Я бы хотел использовать Hibernate ORM с базой данных на базе SQLite.Для этого я сейчас использую этот диалект .
Данные сохраняются с использованием классического шаблона DAO.Поэтому каждый раз, когда мне нужно сохранить объект, я пропускаю его через DAO, который сам открывает сеанс Hibernate и выполняет одну транзакцию.В этой настройке данные немедленно записываются в файл SQLite, создавая требуемый файл журнала и т. Д.
Программа может периодически получать отдельные записи данных из веб-интерфейса для сохранения в базе данных, иногда больше, иногдаМеньше.
Проблема теперь возникает, когда необходимо сохранить большое количество записей за короткое время.Каждый из них будет записан на диск независимо, что приведет к большому количеству ненужных дисковых операций ввода-вывода по сравнению со сценарием, в котором эти данные сначала накапливаются, а затем записываются в базу данных за одну транзакцию.
В связи сотсутствие пользовательского механизма накопления и задержки записи, сейчас этого не происходит.Я также стремлюсь не реализовывать такой кеш самостоятельно, так как существует много логики, которая может войти в правильно спроектированный кеш, и я сомневаюсь, что я первый, кто имеет дело с этим типом проблемы.
есть ли способ прозрачно задержать фактическое (физическое) выполнение нескольких транзакций, кроме как полагаться на другую, более продвинутую СУБД, которая может использовать ввод-вывод более эффективно сама по себе?
Похоже, япотребовалось бы какое-то специальное «кэширование третьего уровня», когда все полученные объекты сначала собираются, а затем сохраняются в кучу логикой приложения.