NeDB: SQLite для NodeJS
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.