Я создаю приложение Electron, для которого мне нужно выбрать встраиваемую базу данных NoSQL. На самом деле эта база данных должна содержать локальное подмножество данных, хранящихся на удаленном бэкэнде ArangoDB. Я много искал в Интернете, но пока не смог сойтись с окончательным кандидатом. Я надеюсь, что кто-то может посоветовать мне из опыта.
Типичные наборы данных составляют, возможно, ~ десятки тысяч документов, и я могу представить случаи, когда набор со временем будет составлять ~ 1 Гб. Кроме того, мне нужны вторичные индексы.
Я просмотрел PouchDB, UnQlite, LokiJS, LevelDB, NeDB, LinvoDB...
В конце концов, NeDB и LinvoDB кажутся разумными кандидатами с сохранением на диск (подобно SQlite), где NeDB не может обрабатывать большие наборы данных; что-то, с чем LinvoDB, форк NeDB, кажется, может справиться. LinvoDB не загружает всю базу данных в память, а по умолчанию индексирует «все» и сохраняет это в памяти.
С другой стороны, я пытался следить за несколькими разговорами об их индексах, где NeDB, кажется, предполагает в своей документации, что они сохраняются на диск (https://github.com/louischatriot/nedb#indexing), после того, как он был создан, который, по-видимому, снова отвергается LinvoDB (извините, я потерял многие цитаты/источники в огромное количество открытых вкладок...), предполагая, что индексы должны создаваться с нуля при запуске. (И, возможно, я вообще неправильно понимаю документацию NeDB.)
По сути, мне нужно решение базы данных JS для приложения Electron, которое может содержать «значительные», но не «огромные» объемы данных. Время загрузки приложения должно быть разумным (т. е. не препятствовать его использованию), в то же время быть отзывчивым (т. е. база данных должна содержать вторичные индексы) и максимально бережно относиться к ресурсам пользователя.
Вопросы:
- Есть ли у кого-нибудь опыт работы с вышеуказанными или другими встроенными базами данных NoSQL, с помощью которых можно было бы порекомендовать какую-либо из этих или других для моего варианта использования?
- Если действительно индексы LinvoDB нужно перестраивать с нуля каждый раз, когда я запускаю приложение, может ли это быть значительным ударом по производительности (время загрузки порядка секунд)? (Конечно, мне придется сравнить это...)
- ArangoDB не встраивается, но, возможно, мне следует просто развернуть его как сервис вместе с моим родным приложением? Эта ссылка база данных NoSQL: ArangoDB предполагает, что сами разработчики не препятствуют этому. Будет ли это излишним и/или не удобным для пользователя? Хит производительности?
Любые советы будут действительно оценены.