База данных ключ-значение - PullRequest
0 голосов
/ 09 ноября 2011

Мне нужно хранить короткие строки (более 50 символов) и быстро их искать. Сначала я хотел использовать SQLite для этого. Я создал одну таблицу с одним индексированным столбцом TEXT. Используя все виды низкоуровневых трюков, я мог бы заполнить базу данных 1 миллионом строк за 10 секунд.

Проблема заключалась в том, что если компьютер был перезагружен, добавление дополнительных 10.000 строк заняло 30 секунд, что ни в коем случае не соответствует 1M строк за 10 секунд. Причина этого заключается в том, что SQLite должен прочитать очень большую часть существующего индекса с диска, прежде чем он сможет добавить новые строки. Другая проблема заключается в том, что размер базы данных удваивается, поскольку все строки хранятся дважды (один раз в обычной таблице, один раз в таблице индексов) из-за механизма b-дерева.

Есть ли простая альтернатива? Который использует поиск на основе хеша, например? Я знаю о различных решениях NoSQL, но они ориентированы на децентрализованное и распределенное хранилище, а мне просто нужна простая встроенная база данных «плоских файлов»?

1 Ответ

0 голосов
/ 09 ноября 2011

Насколько важно сохранять последние значения на диске?

Вы можете использовать коллекцию в памяти, такую ​​как Словарь или Список, и сохранить ее на диске, сериализуя ее в локальный файл при асинхронном вызове через регулярные интервалы.

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

Это был бы гораздо более гибкий способ выполнить то, что вам нужно, поскольку вам не нужно постоянно молотить диск усилиями чтения / записи.

...