2009-04-25 2 views
32

Есть ли у кого-нибудь реальный опыт работы с базой данных Sqlite на общем ресурсе SMB в локальной сети (Windows или Linux)?Sqlite над сетевым ресурсом

Его ясно видно из documentation, что это не самый быстрый способ поделиться базой данных Sqlite.

Очевидные оговорки состоят в том, что он может быть медленным, и Sqlite поддерживает только один поток, записывающий в БД за раз. Таким образом, вы становитесь намного менее параллельной причиной того, что ваши обновления БД теперь будут блокировать БД дольше (БД будет заблокирована, пока данные будут передаваться по сети).

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

Чего я должен следить? Может ли это работать?

Я знаю, что это не то, для чего был разработан Sqlite, меня меньше интересует решение Postgres/MySql/Sql Server, поскольку я стараюсь максимально упростить мое приложение с минимальным количеством зависимостей.

Ссылки по теме:

С sqlite mailing list, поэтому я думаю, один большой вопрос, насколько ненадежными являются FileLock APIs над SMB (Windows или Linux)

+1

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

ответ

23

Мой опыт работы с файловыми базами данных (т. Е. Без сервера базы данных), который насчитывает более двадцати лет, заключается в том, что если вы попытаетесь поделиться ими, то они будут неизбежно в конечном итоге будут повреждены. Я настоятельно рекомендую вам снова взглянуть на MySQL.

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

+0

Да, имей с идеей обмена этой информацией через сокеты с одноранговой сетью. Есть слишком много вещей, которые могут пойти не так, как с встроенным db через сетевой ресурс , –

8

Ну я не большой SQLite эксперт, но я считаю, Блокировка записей/таблиц может работать некорректно и может привести к повреждению базы данных. Потому что, поскольку нет единого сервера, который поддерживает центральную блокировку, два экземпляра dll sqlite на разных машинах, которые используют один и тот же файл по сети, могут работать некорректно. Если база данных открыта на том же компьютере, sqlite может использовать блокировку уровня файла, предлагаемую ОС для обеспечения целостности, но я сомневаюсь, что она работает правильно над сетевым ресурсом.

6

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

из https://www.sqlite.org/whentouse.html

, который также применяется для любых баз данных на основе файлов, как Microsoft Access

Смежные вопросы