2014-12-12 8 views
0

Существует база данных SQLite, используемая для хранения данных в статическом размере в циклическом режиме.Фрагментация в SQLite, используемая круговым способом без VACUUM

Например, хранится 100 дней данных. В день 101 день 1 удаляется, а затем вводится день 101.

Количество строк одинаково между днями. Отдельные поля в строках представляют собой целые числа (32-разрядные или менее) и временные метки.

База данных хранится на SD-карте с плохой скоростью ввода-вывода, что-то вроде скорости чтения 30 МБ/с.

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

Таким образом, проблема заключается в фрагментации, потому что я постоянно вставляю и удаляю записи без ВАКУУМИРОВАНИЯ. Но поскольку я удаляю/вставляю один и тот же набор строк каждый день, будут ли данные фрагментированы? Подходит ли SQLite для сбора данных дня 101 в освобожденных страницах 1-го дня?

И хотя набор строк один и тот же, целые числа могут составлять 1 байт, а затем 4 байта другой. База данных также имеет несколько индексов, и я не уверен, где они хранятся , и если они мешают идеальному шаблону освобождения страниц, а затем повторно используют их.

(SQLite это единственная технология, которая может быть использована. Не удается переключиться на TSDB/RRDtool и т.д.)

+0

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

+0

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

+0

Вы сказали, что SQLite - единственная технология, которая может быть использована. Итак, альтернативой фрагментации было бы отказаться? –

ответ

0

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

Однако карты SD, скорее всего, имеют слой флэш-перевода, который вводит фрагментацию всякий раз, когда вы пишете какой-либо случайный сектор.

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


В теории, WAL mode является добавление-только, и, таким образом, легче на флэш-устройстве. Однако checkpoints будет почти таким же плохим, как VACUUM.