SQLite & C #] Как я могу контролировать количество людей, редактирующих файл БД? - PullRequest
0 голосов
/ 12 августа 2010

Я сейчас программирую простое программное обеспечение для управления информацией о клиентах с помощью SQLite.

Один exe-файл, один db-файл, несколько dll-файлов.- Вот и все :)

2 ~ 4 человека могут одновременно запустить этот exe-файл и получить доступ к базе данных.

Они также будут выполнять не только чтение, но и частое редактирование.

Ага, вот теперь одна из самых известных проблем ... "Синхронизация"

Я пытался создать / удалить временный пустой файл всякий раз, когда кто-то пытается его отредактировать.(это «ключ» для доступа к БД.)

Но для этого должен быть лучший способ: (

Как лучше всего предотвратить эту проблему?

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

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

Однако документация для SQLite явно предупреждает об использовании этого по сети:

SQLite будет работать по сети файловая система, но из-за задержки связано с большей частью сети файловые системы, производительности не будет отличный. Кроме того, логика блокировки файлов много сетевых файловых систем реализация содержит ошибки (на обоих Unix и Windows). Если блокировка файла не работает как надо, может возможно для двух или более клиентов программы для изменения той же части та же база данных в то же время, что приводит к повреждению базы данных. Потому что эта проблема является результатом ошибок в базовой файловой системе реализация, нет ничего SQLite может сделать, чтобы предотвратить это.

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

Итак, если ваши «2-4 человека» находятся на разных компьютерах и используют общий сетевой ресурс, я бы порекомендовал вам не использовать SQLite. Вместо этого используйте традиционную клиент-серверную СУБД, которая предназначена для нескольких одновременных подключений с нескольких хостов.

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

0 голосов
/ 12 августа 2010

Вы смотрите на некоторые классические проблемы в работе с несколькими пользователями, обращающимися к базе данных: потерянное обновление.

См. Это руководство по параллелизму: http://www.brainbell.com/tutors/php/php_mysql/Transactions_and_Concurrency.html

По крайней мере, вы не будетенадо беспокоиться о том, что сам файл db будет поврежден этим, потому что SQLite блокирует весь файл во время его записи.При этом, SQLite не рекомендует использовать его, если вы ожидаете, что к вашему приложению будет одновременно обращаться несколько клиентов.

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