Есть ли способ кэшировать и объединять несколько транзакций записи в Hibernate при использовании SQLite? - PullRequest
0 голосов
/ 10 октября 2018

Я бы хотел использовать Hibernate ORM с базой данных на базе SQLite.Для этого я сейчас использую этот диалект .

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

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

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

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

есть ли способ прозрачно задержать фактическое (физическое) выполнение нескольких транзакций, кроме как полагаться на другую, более продвинутую СУБД, которая может использовать ввод-вывод более эффективно сама по себе?

Похоже, япотребовалось бы какое-то специальное «кэширование третьего уровня», когда все полученные объекты сначала собираются, а затем сохраняются в кучу логикой приложения.

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