Подходит ли MS Access (JET) для многопользовательского доступа? - PullRequest
17 голосов
/ 18 апреля 2009

У меня есть продукт, предназначенный для настольных компьютеров, использующий файл MS Access в качестве базы данных.

Теперь некоторым пользователям необходимо установить его на несколько ПК (скажем, на 2 или 3) и ПОДЕЛИТЬСЯ базой данных.

Я думал поместить файл MS Access в общую папку и получить к нему доступ с ПК, но ... JET Engine предназначен для многопользовательского доступа?

Какие-нибудь советы или вещи, которые нужно знать об этом?

EDIT: Это приложение .net, использующее базу данных в качестве хранилища (не использующее базу данных в качестве внешнего интерфейса)

Ответы [ 13 ]

26 голосов
/ 20 апреля 2009

В ответах в этой теме так много дезинформации, что я не знаю, с чего начать. Я просто потратил 4 очка в репутации, голосуя за ответы с вводящей в заблуждение и неверной информацией.

  1. ядро ​​базы данных Jet (и это все, что здесь задействовано, как пояснил OP с редактированием) по умолчанию является многопользовательским - оно было построено с нуля таким образом.

  2. совместное использование хранилища данных Jet является очень надежным, когда сеть не соответствует стандартам. Это означает, что это не глобальная и не беспроводная сеть, поскольку полоса пропускания должна быть достаточной для того, чтобы Jet поддерживал файл LDB (для многопользовательской блокировки), что означает один раз в секунду пинг экземпляром ядра базы данных Jet вашего локального компьютера (с настройки по умолчанию) и потому, что Jet не может восстановиться после разрыва соединения (что довольно часто встречается в беспроводной среде).

  3. Ситуация, когда Access перестает работать, - это когда общий доступ к MDB внешнего приложения Access (что не относится к данному постеру). Причина, по которой это не удается, заключается в том, что вы делитесь вещами, которые не могут быть надежно предоставлены и у которых нет причин для совместного использования. Поскольку объекты Access хранятся в файле MDB (весь проект Access хранится в одном поле BLOB в одной записи в одной из системных таблиц), он очень подвержен повреждению, если его открывают несколько пользователей. По моей оценке, совместное использование внешнего интерфейса доступа (или неразделенного MDB с таблицами и формами / отчетами / и т. Д. В одном MDB) является источником 99,99% повреждений файлов Access / Jet.

Мой основной ответ на вопрос OP: да, Jet будет отличным хранилищем данных для приложения такого размера. Тем не менее, если существует какая-либо вероятность того, что совокупность пользователей вырастет выше 25, то, возможно, было бы лучше начать с нуля с помощью механизма базы данных, который более устойчив при более высоких популяциях пользователей.

7 голосов
/ 18 апреля 2009

Совершенно возможно сделать это; но вы ДОЛЖНЫ разделить базу данных на внешний интерфейс (с формами, запросами, кодом) и внутренний (только данные). Каждый пользователь должен иметь интерфейс на своем компьютере, связывающийся с общим сервером.

Это будет медленно, поскольку Jet генерирует тонну сетевого трафика. Microsoft также постепенно осуждает Access как инструмент разработки. Например, Access 2007 имеет гораздо менее сложную модель безопасности, чем Access 2003.

Как разработчик Access, я постепенно отхожу от Access.

6 голосов
/ 18 апреля 2009

С 2 или 3 пользователями в надежной локальной сети все будет в порядке, если вы часто выполняете резервное копирование сетевого диска.

Избегайте любых битовых / булевых полей в ваших таблицах - у Jet есть несколько неприятных проблем с повреждением при множественном доступе к ним.

Также имейте в виду, что все блокировки в Access являются оптимистичными: иногда вы будете получать грязные чтения.

MS Access разработан для небольших офисных сценариев, таких как: некритическое легкое офисное использование, которое можно настроить с минимумом программирования.

Ожидайте, что файл данных будет время от времени повреждаться - регулярно создавайте резервные копии.

6 голосов
/ 18 апреля 2009

Не делайте этого ... База данных Jet утверждает, что может поддерживать несколько пользователей, но невероятно легко использовать мастер увеличения размера для преобразования файла Access в базу данных Sql Express. Этот файл базы данных может быть легко заблокирован пользователем или администратором, и все ваши пользователи не смогут использовать базу данных.

... и Sql Express бесплатен . Ваш путь обновления до полного экземпляра Sql Server или какой-либо другой коммерческой базы данных прост.

2 голосов
/ 20 апреля 2009

Механизм ACE / Jet является отличным программным обеспечением, но, хотя он был предназначен * для поддержки нескольких пользователей, фактически поддержка нескольких пользователей на практике не является его сильной стороной. Последняя капля для меня - то, где затем удалили защиту уровня пользователя (ULS) из движка: я предполагаю, что могу вообразить простую ситуацию с базой данных, когда все пользователи будут иметь одинаковые привилегии (то есть доступ администратора к всем объектам базы данных ) но IMO, которая плохо поддерживает несколько пользователей, по сравнению, скажем, с MS SQL Server.

1 голос
/ 20 апреля 2009

Если ваши пользователи могут вдвое дольше ждать приложения с половиной нужных им функций, не используйте Access.

1 голос
/ 20 апреля 2009

Это было сделано очень много раз многими инженерами-разработчиками программного обеспечения, когда мы видели, как .mdb портился в многопользовательской ситуации. Если многие опытные разработчики Access могут сделать это правильно, как я склонен верить, то мы, универсалы, должны делать что-то не так, и что-то должно быть довольно фундаментальным, но неочевидным, чтобы многие из нас убегали от этой вещи. кричит "Никогда больше!" Так что, если вы считаете себя опытным специалистом-разработчиком Access (или знаете, как его найти), сделайте это. Но если вы универсальный или случайный пользователь, ищущий легковесный бэкэнд, то я советую вам поискать что-то другое (SQL Server - хороший IMO).

1 голос
/ 18 апреля 2009

Как системный администратор, пожалуйста, не используйте Access для чего-либо многопользовательского. Делайте то, что предлагает Джефф Фриц, и используйте базу данных, предназначенную для многопользовательского доступа. Вы можете подумать, что ваше маленькое приложение будет доступно только нескольким людям, но я гарантирую, что к концу года у него будет сто пользователей и пятьдесят новых функций. И если это все Access, а не VB / SQL Express, ваши сотрудники будут ворваться в ваш дом и перерезать вам горло.

Access не является клиент-серверным приложением и обеспечивает очень мало возможностей для резервного копирования / восстановления или какой-либо автоматизации. Не говоря уже о том, что интерфейс и БД очень тесно связаны ... поэтому, если вы когда-нибудь захотите превратить это в веб-приложение или внести какие-либо серьезные изменения, ваш мир будет наполнен болью.

1 голос
/ 18 апреля 2009

Да, он поддерживает доступ нескольких пользователей (то есть небольшого числа в рабочей группе) к общей сетевой папке. Однако архитектура совместного использования файлов просто не идеальна для поддержки одновременной записи в файл несколькими пользователями. Система клиент-серверной базы данных (SQL Server и т. Д.) Обычно обеспечивает более высокую производительность, безопасность и надежность.

0 голосов
/ 30 мая 2012

просто проверьте, есть ли файл блокировки базы данных (например, .ldb) или нет. Если он есть, кто-то обращается к этому файлу. Если его там нет, в настоящее время никто не имеет доступа к этому файлу, и вы можете продолжить. В противном случае дождитесь, когда этот файл (.ldb) больше не будет существовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...