
NeDB (Node.js Embedded Database) — встраиваемая база данных для NodeJS, реализующая подмножество MongoDB API. Эта легкая NoSQL СУБД написана на чистом JavaScript, не имеет бинарных зависимостей и, помимо NodeJS, может использоваться в NW.js, Electron или прямо в браузере.
NeDB обеспечивает хранение данных в простом файле на диске в json-формате, который похож на коллекции в MongoDB.
Установка
NeDB доступен из bower и npm:
npm install nedb --save
Давайте создадим хранилище данных под названием «users»:
var Datastore = require('nedb');
var db = new Datastore({filename : 'users'});
db.loadDatabase();
Это создаст файл с именем users в вашем рабочем каталоге. Если вы хотите использовать NeDB для хранения в памяти, вам необходимо использовать конструктор без параметров, т.е. не передавать ему имя файла.
CRUD
Давайте вставим запись:
db.insert({name : "Boris the Blade", year: 1946});
Откройте файл users, чтобы увидеть вставленный объект. NeDB автоматически добавляет поле "_id" для каждого объекта. Чтобы вставить более одной записи, передайте массив в метод insert. Такая операция является атомарной, так что если одна из вставок потерпит неудачу, для другой будет выполнен откат.
Извлечение данных:
db.find({year: 1946}, function (err, docs) {
console.log(docs);
});
Этот метод принимает запрос в виде объекта и функцию обратного вызова; docs представляет собой массив, содержащий результаты поиска. В данном примере мы просто выведем этот массив в консоль.
Обновление данных:
Для обновления данных вам нужно передать три аргумента:
— запрос для поиска документа, который нужно изменить;
— объект для замены;
— параметры замены (их мы оставим пустыми – {}).
db.update({year: 1946}, {name: "Doug the Head", year: 1940}, {});
Выполните запрос и посмотрите на файл users. Замечаете нечто необычное? Первая запись (Бориса Бритвы) до сих пор в файле. Это происходит из-за механики NeDB, которая считает, что не стоит тратит время на переписывание записей. NeDB просто добавляет новые строки. То же самое касается операции удаления:
db.remove({year: 1946}, {});
Индексация
NeDB поддерживает индексы почти как в Mongo:
db.ensureIndex({fieldName: 'year'});Это позволяет немного ускорить поиск данных по полю year. Вы можете индексировать любые поля, включая поля во вложенных документах.
Скорость
NeDB не предназначен для того, чтобы заменить круп��омасштабные базы данных, такие как MongoDB. Тем не менее, база работает довольно быстро на ожидаемых наборах данных, особенно после индексации. Документация утверждает, что «на обычной, не-очень-быстрой dev-машине» для коллекции из 10,000 документов NeDB показывает:
Вставка: 10,680 ops/s
Поиск: 43,290 ops/s
Обновление: 8,000 ops/s
Удаление: 11,750 ops/s
Чуть более точные сравнительные тесты производительности NeDB против MongoDB, Tingodb и EJDB.
Вот и все. Только что вы познакомились с NeDB.
