Вопрос или проблема
Я ищу базу данных в памяти, где я буду хранить длинный список записей.
- Каждая запись будет иметь переменное количество неуникальных (!) атрибутов (аналогично тому, как организованы таблицы NoSQL).
- Мне нужно иметь возможность сохранять данные из памяти на диск и обратно, предпочтительно имея все в одном файле.
- Скорость имеет для меня значение.
- Параллелизм не требуется: файл будет загружен движком базы данных в память, изменен, а затем сохранен в другой файл.
- Размер базы данных будет до 100 Мб и до 10 тыс. записей.
- В основном будут запросы SELECT (в значительной мере полагающиеся на индексы), обновления (UPDATE) и вставки (INSERT) (удалений (DELETE) не будет)
- Журналирование или транзакции ACID не требуются.
- Скорость загрузки данных в память и их сохранения обратно на диск не имеет значения.
Какое программное обеспечение вы порекомендуете использовать?
Я бы обратил внимание на SQLite. Я считаю, что он соответствует всем вашим требованиям.
Ответ или решение
Для ваших требований я бы рекомендовал рассмотреть использование SQLite. Этот легковесный реляционный встроенный движок баз данных может функционировать как in-memory база данных с возможностью персистентного хранения данных в одном файле. Позвольте объяснить, как именно SQLite может удовлетворить ваши потребности:
-
Непостоянные атрибуты: SQLite поддерживает динамические таблицы, что позволяет создавать записи с переменным числом атрибутов. Вы можете использовать формат JSON для хранения неструктурированных данных, что особенно удобно для реализации модели, аналогичной NoSQL.
-
Персистентное хранение данных: SQLite позволяет сохранять всю базу данных в одном файле на диске, что полностью соответствует вашему требованию иметь все данные в одном месте. Вы можете с легкостью загружать данные в память и сохранять их обратно в файл.
-
Высокая скорость: SQLite очень быстрый и эффективный для малых и средних объемов данных. Поскольку вы упомянули, что основное количество операций будет составлять SELECT, UPDATE и INSERT, SQLite отлично подойдет для вашей задачи, особенно с использованием индексов для оптимизации SELECT запросов.
-
Нет необходимости в параллелизме и транзакциях: SQLite хорошо работает в средах, где не требуется сложная схема параллельного доступа или полные транзакции ACID. Поскольку вы указали, что не нужны журналы или сложные транзакционные механизмы, это позволит вам избежать излишней сложности.
-
Гибкость работы с данными: SQLite позволяет использовать SQL-запросы для выполнения операций с данными, что добавляет удобство и гибкость при работе с вашей базой данных.
-
Простота использования: SQLite имеет достаточно простую и понятную API, что позволит вам быстро интегрировать его в ваше приложение.
Помимо SQLite, вы также можете рассмотреть использование других небольших библиотек, таких как DuckDB или LevelDB. Однако, учитывая ваши требования, SQLite кажется наиболее подходящим вариантом из-за своей простоты и эффективности.
В итоге, я рекомендую использовать SQLite как решение для вашей задачи по созданию простой in-memory базы данных с персистентным хранением данных в одном файле.