SQLite и параллельный доступ в Tomcat - PullRequest
0 голосов
/ 01 февраля 2012

Я изучаю возможность использования SQLite в приложении Wep, развернутом в Tomcat.
Поиск в Google Я нашел следующий ответ SQLite в Tomcat 6 , который гласит:

К сожалению, вы не можете создать пул соединений SQLite на Tomcat, поскольку SQLite имеет файл базы данных для каждого пользователя

Я не уверен, что это значит.

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

Я запутался здесь.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

SQLite поддерживает несколько программ чтения для одного и того же файла, но только один модуль записи. Одно приложение МОЖЕТ создать несколько подключений к одной базе данных. Вопрос, на который вы ссылаетесь, упоминал, что приложение хотело создать отдельную базу данных для каждого пользователя и использовать для всех из них единый пул соединений. Это никак не связано с доступом к самой базе данных.

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

Вам следует проверить преимущества и недостатки ведения журнала с предварительной записью , чтобы убедиться, что вы можете использовать его в своем веб-приложении. По крайней мере, вам нужен SQLite 3.7+, и ваша база данных должна находиться на том же компьютере, что и ваше веб-приложение. Это, вероятно, нормально для небольших сценариев.

Я согласен с Tichodroma, однако, SQLite не предназначен для веб-ферм или для размещения на отдельном сервере.

2 голосов
/ 01 февраля 2012

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

Нет, вы не можете.SQLite не предназначен для использования в таком сценарии.

Взгляните на http://sqlite.org/whentouse.html

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

Редактировать: Для работы на Java мне нравится база данных H2.Это не SQLite, но красивый и маленький.

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