#c_sharp #база_данных #visual_studio #access
Имею БД Access и прогу на C# работающую с ней. Пока все тестил в монопользовательском режиме. Но сама программа должна выполнять роль клиентского приложения для офиса кадастрового управления, и поэтому имеет место много пользовательское обращение к одной БД. Как избежать проблем с одновременными подключениями нескольких пользователей, обращение к одним данным, ведь явно будет ужасная потеря целостности.
Ответы
Ответ 1
Потери целостности, по крайней мере на уровне базы, не будет - Аccess это все-таки база данных, и она обеспечивает целостность всех данных, включая внешние ключи. И да, она полноценно поддерживает транзакции. Т.е. при работе из .NET она практически ничем не отличается от SQL Server, кроме строки соединения. Но вам придется пересмотреть ваш код на предмет предположений, которые могут быть ложными в случае одновременной работы нескольких пользователей - например, если пользователи будут активно удалять данные - то стоит аккуратно обрабатывать случаи открытия их для отображения. Единственная реальная проблема с Access - это ограничение на 10 одновременных подключений. Что может стать очень серъезной проблемой при найме 11-го сотрудника :)Ответ 2
Из вопроса не совсем понятно, как вы собираетесь обеспечивать многопользовательский режим -- то ли это трёхзвенное приложение (т.е. есть middle layer в виде application server), то ли просто клиент-сервер. Предполагаю второе. Но в случае с MS Access тут особая ситуация -- фактически это файл-сервер. Я в своё время учавствовал в создании приложений, которые используют таким образом .mdb базу. База выкладывается на файловую шару, при подключении с клиента указывается путь к файлу на шаре, естественно, у всех участников должны быть права как на шару, так и на файл. Jet-драйвер корректно обрабатывает блокировки при одновременном доступе к таблицам, тут проблем нет. Но из-за того что это файл-сервер, производительность может проседать. За чем стоит следить: Размер базы. Если я правильно помню, есть верхний предел размера файла -- кажется, 2 ГБ. Соответственно, ничего пожирающего место, такое как документы в виде полей итп хранить в базе не стоит. Старые данные после удаления остаются в файле базы -- видимо, для ускорения операции удаления. Поэтому, время от времени нужно выполнять чистку базы (Compact/Repair). Для этой операции нужен монопольный доступ к файлу базы. Про не более 10 подключений -- https://support.microsoft.com/en-us/kb/154869 -- это только для 1.1, 2.0, 2.5; для Jet 3.0 уже можно больше. Но ещё может быть ограничение на количество подключений к шаре. Но в любом случае, надо понимать, что файловая БД -- это только для небольших задач и малого числа пользователей.
Комментариев нет:
Отправить комментарий