Использование sqlite на сетевом ресурсе - PullRequest
1 голос
/ 21 августа 2011

Мы используем SQLite (драйвер Xerial JDBC) в Java-приложении на базе Windows. Теперь мы переходим к клиент-серверной версии одного и того же приложения, где несколько клиентов Swing на основе Java будут подключаться к одному и тому же файлу базы данных SQLite на указанном сервере Windows PC. Пожалуйста, поправьте меня, если я ошибаюсь:

  1. Является ли хранение файла базы данных SQLite через сетевой ресурс единственной возможностью использовать SQLite в этом режиме? или есть какое-то другое решение, которое мне не хватает?
  2. Увеличит ли использование SQLite шансы повреждения БД?

Я не вижу много одновременных операций обновления. Будет 5-10 клиентов, пытающихся читать и обновлять одну и ту же БД. В таком случае, лучше ли использовать БД уровня предприятия (MySQL, Postgres)?

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Из абзаца часто задаваемых вопросов перед одним цитируемым :

SQLite использует блокировки чтения / записи для управления доступом к базе данных.(В Win95 / 98 / ME, в которой отсутствует поддержка блокировок чтения / записи, вместо этого используется вероятностное моделирование.) Но будьте осторожны: этот механизм блокировки может работать неправильно, если файл базы данных хранится в файловой системе NFS.Это связано с тем, что блокировка файлов fcntl () нарушена во многих реализациях NFS.Следует избегать размещения файлов базы данных SQLite в NFS, если несколько процессов могут пытаться получить доступ к файлу одновременно.В Windows документация Microsoft гласит, что блокировка может не работать в файловых системах FAT, если вы не запускаете демон Share.exe.Люди, которые имеют большой опыт работы с Windows, говорят мне, что блокировка файлов сетевых файлов очень глючная и не заслуживает доверия.Если то, что они говорят, является правдой, то совместное использование базы данных SQLite между двумя или более компьютерами Windows может вызвать непредвиденные проблемы.

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

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

0 голосов
/ 21 августа 2011

Это FAQ :

[...] Нам не известно ни о каком другом встроенном ядре базы данных SQL, которое поддерживает столько параллелизма, сколько SQLite. SQLite позволяет несколько процессы, чтобы файл базы данных открывался одновременно и для нескольких процессы для чтения базы данных сразу. Когда любой процесс хочет записать, он должен заблокировать весь файл базы данных на время его Обновить. Но это обычно занимает всего несколько миллисекунд. Другой процессы просто ждут от писателя, чтобы закончить, затем продолжить об их бизнес. Другие встроенные механизмы баз данных SQL обычно допускают только один процесс для подключения к базе данных одновременно. [...]

Также читайте SQLite без сервера .

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

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