Подтвердить что ты не робот

Sqlite над сетевым ресурсом

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

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

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

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

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

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

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

Из списка рассылки sqlite, поэтому я думаю, что один большой вопрос: насколько ненадежными являются aplock для файла с файлом (SMTP) (Windows или Linux)

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

from https://www.sqlite.org/whentouse.html

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