Как ограничить сбрасывание базы данных диском?

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

6
задан Piskvor cc-by-sa 3.0 1 July 2010 в 16:01
поделиться

4 ответа

SQLite для ACID db сбрасывается при каждой фиксации ИЛИ при каждой вставке / удалении / обновлении, не обернутой транзакцией. Используйте транзакции для группировки операций ИЛИ ВЫКЛЮЧИТЕ ACIDity и установите PRAGMA синхронный = ВЫКЛ.

«PRAGMA синхронный = ВЫКЛ», и SQLite не будет сбрасывать данные вообще (фактически оставляя это для кэша ОС)

SQLITE_DEFAULT_CACHE_SIZE ТОЛЬКО для размера кеша. И кеш используется ТОЛЬКО для чтения данных.

Есть еще один вариант - вы можете реализовать собственный слой VFS и вообще запретить сохранение страниц до того, как ваш собственный буфер будет заполнен. http://www.sqlite.org/c3ref/vfs.html

Но я уверен, что sync = off (или гораздо лучше использовать транзакции) сделает работу достаточно хорошо (при этом с хорошим шансом) испортить вашу базу данных в случае сбоя питания или полной перезагрузки для синхронизации = выкл).

Еще один совет - поместить ЖУРНАЛ в память или полностью его отключить. Опять же - это отключает кислотность, но это также устраняет некоторые прикосновения к диску.

3
ответ дан 17 December 2019 в 07:09
поделиться

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

2
ответ дан 17 December 2019 в 07:09
поделиться

You have the source code to SQLite - why not simply instrument it to record the information you are interested in.

-1
ответ дан 17 December 2019 в 07:09
поделиться

Хорошо, Нил. Если «SQLite использует форму «сквозное кэширование», затем при переполнении кэша он попытается сбросить данные во временный файл или на диск. Это та же самая точка, которую я пытаюсь экспериментировать, увеличивая размер кэша и, таким образом, получая контроль над скоростью очистки. но этого не происходит. Пожалуйста, ответьте.

0
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: