Как стать автором
Обновить

Комментарии 16

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

{ макро с картинкой про троллейбус }
Такие базы обычно используют в тестах.
Если вы используете в тестах окружение, отличное от продакшена, то смысла в таких тестах нет совсем.
Мир не идеален, так ведь и моками нельзя пользоватся, это ж отличное от продакшена. Используют HSQLDB, H2, веб проверяют на phantom.js и тп.
Основная мотивация это встраиваемая в процесс nosql база данных не требующая ничего кроме JavaScript. Т.е. отсуствие зависимости от внешних (часто тяжелых) сервисов/библиотек. В этом смысле даже sqlite можно назвать тяжелой зависимостью для JavaScript поскольку она является нативной библиотекой.

По мимо прочего хотелость надежности и легкости в резервном копировании. В контексте того к чему мы шли — это резервное копирование приложения вместе с данными с помощью банального rsync-backup. В таком ключе обновляя приложение, даже если произошли обновления данных очень легко откатываться назад (в случае ошибки например). Т.е. код получается синхронизирован с данными.

Полная совместимость с MongoDB по сути была вторична и не являлась основной целью. Так скажем решили просто не рисковать. В конечном итоге правда это помогло обзавестись несколькими сотнями тестова «за так», просто взяв из проекта нативного драйвера. Сразу кстати скажу есть другие библиотеки которые пишут что они реализуют MongoDB API ( github.com/mWater/minimongo, github.com/louischatriot/nedb). Это не так, они далеки от этого. Наша совместима настолько что «легким движением руки» ее удалось подсунуть в mongoosejs.com.

Что касается производительности, для объема данных который разумен именно для встраиваемой базы данных он вполне на уровне. Кроме прочего это для сервера важно 5 или 10 мс занял запрос. Для десктоп приложения (например собраного на nwjs.io) это фактически без разницы. С другой стороны ставить полноценную MongDB на дексктоп в довесок к небольшому приложению как бы перебор. Ну и например для малюток типа raspberry pi настоящая mongodb может быть тяжеловата.

Как то так. Заранее извиняюсь за поздний ответ, пост проболтался в песочнице больше полутора лет и о том что его опубликовали я узнал случайно.
НЛО прилетело и опубликовало эту надпись здесь
Кажется, minimongo это что-то в эту сторону.
Я бы чуть иначе написал.
Как обычно бывает, нам захотелось сделать модно и на NoSQL
Вот так лучше. В обычной ситуации люди не заморачиваются и поднимают SQLite :)
SQLite не есть NoSQL база данных, это во-первых. Во-вторых это бинарная зависимость (нативная библиотека) и мы очень хотели не иметь таких зависимостей.

Ну и к слову, NoSQL это не модно, а удобно, в особенности в JavaScript. Ну так для простоты просто получается прямая цепочка передачи JSON (Бразуер — Сервер — База). Но о вкусах как говорится не спорят, кому то нравится SQL + ORM.
Для одного из проектов понадобился встраиваемая БД, скулйат использовать не хотел, так как хотел в случае чего переключиться на использование монги. Остановился на nedb, из очевидных минусов — хранит все данные в JSON-виде, и ни разу не бинарном, все состояния после операций так же хранятся в файле(все состояния после инсертов, апдейтов и прочее), ну и как это обычно бывает, грузит все данные в память.
На будущем проекте обязательно попробую вашу БД.
Данные мы храним похожим образом, в текстовых небинарных файлах. Перед тем как остановится на этом мы перепробовали и оттестировали несколько вариантов, и именно такой оказался наиболее быстрым. Звучит странно, но JSON это нативный способ сериализации для JavaScript и очевидно допиленный до совершенства.

Также старые записи хранятся в файле. Это продиктовано необходисомтью гарантировать надежность, а именно полную порчу базы данных в случае непредвиденного завершения. Правда существует процедура автоматический оптимизации (очистки мусора).

Вот что важно, данные все в памяти не хранятся, только индексы и кэш. Кроме прочего github.com/louischatriot/nedb API только похож на MongoDB но не совместим с ним не разу. Наша база подсовывается в mongoosejs.com и он этого не замечает.
firebase. тысячи их, это модно.
Не вполне понятно, почему «хранение данных в памяти» считается недостатком. Хассо Платтнер* уже давно показал, что с текущим соотношением быстродействия оперативки и накопителей и их возможностями масштабирования — данные в памяти хранить не только можно, но и нужно; а на дисках — по сути дела бэкапы. *(see open.hpi.de/courses/imdb2015 for details)
наверное, потому что, обычно, памяти всегда меньше, чем данных. и заканчиваться она может быстрее, чем диск
Ну, вы вполне можете воткнуть очень много памяти и маленький диск, так что технически это не обязательно так)

Но вообще это вопрос того, что где хранить. Очевидно, что библиотеку изображений никто в памяти держать не будет, а вот какие-то текстовые данные, к котором постоянно идут обращения — только так, места они много не отнимают
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории