164

Anybody know of a lightweight yet durable database, written in Javascript, that can be used with Node.js.

I don't want the 'weight' of (great) solutions like Mongo or Couch. A simple, in memory JS database with the capability to persist to disk as a file would be enough. I would only use it to store small amounts of data.

Requirements:

  • can run in process with a node.js server application
  • can save the whole database to disk and recover after a failure
  • NO need for atomic writes or transaction supports
  • fast queries and sorting would be nice
  • only needs to support small data volumes, up to 1MB in total

I've come across TAFFY db so far but it really doesn't seem optimized for use in Node.js. Anybody seen what I'm looking for out there?

Thanks

2
  • Try to use github.com/rvagg/node-levelup Commented Sep 22, 2014 at 16:52
  • For new projects you might want to take a look at AceBase, which is a very lightweight and fast NoSQL database engine for Node.js. Commented Jan 13, 2022 at 8:27

11 Answers 11

126

I had the same requirements as you but couldn't find a suitable database. nStore was promising but the API was not nearly complete enough and not very coherent.

That's why I made NeDB, which a dependency-less embedded database for Node.js projects. You can use it with a simple require(), it is persistent, and its API is the most commonly used subset of the very well-known MongoDB API.

https://github.com/louischatriot/nedb

Sign up to request clarification or add additional context in comments.

9 Comments

nedb is great, but be aware that you cannot use it across multiple processes - each one gets its own copy at startup.
As a heads-up it looks like NeDB might have been abandoned.
I don't understand why latest commit 1.5 years ago means the project is abandoned. It absolutely isn't, it just achieved its goal and I don't see any value in feature-creep ...
Consider having a simple script that updates the README every 3 months, replacing the last line that says "This project is still active as <today's date> - NeDB (c) 2013-<today's year> Louis Chatriot"; the commit message should be something like "stating that project is still active as of <today's date>", which will be the first thing people see at the top of github.
@LouisChatriot I have to agree. You have 107 issues, 32 PRs sitting there and last change to code was 3 years ago. Just seeing that, it's software I don't want to bring in and deal with incompatibilities (3 years in js dev is an eternity), issues that get ignored, etc. The right amount of stars but it doesn't scream fresh.
|
31

Lokijs: A fast, in-memory document-oriented datastore for node.js, browser and cordova.

  • In-memory Javascript Datastore wih Persistence
  • In-Browser NoSQL db with syncing and persisting
  • a Redis-style store an npm install away
  • Persistable NoSQL db for Cordova
  • Embeddable NoSQL db with Persistence for node-webkit

LokiJS to be the ideal solution:

  • Mobile applications - especially HTML5 based (Cordova, Phonegap, etc.)
  • Node.js embedded datastore for small-to-medium apps
  • Embedded in desktop application with Node Webkit

https://github.com/techfort/LokiJS

4 Comments

would my data in lokiJS get cleared if I clear my localstorage?
@LeonardoDaCodinchi - Depends how you use it, but in Node it saves to a json file for persistence.
The database is still stored in memory on startup though. From what I have come to understand.
Does it use the same DB across different node processes? I'm using for a visitor counter in express and in production we have several processes running in parallel
19

NeDB seems to be what you are looking for. From the blurb:

Embedded persistent database for Node.js, written in Javascript, with no dependency (except npm modules of course). You can think of it as a SQLite for Node.js projects, which can be used with a simple require statement. The API is a subset of MongoDB's. You can use it as a persistent or an in-memory only datastore.

3 Comments

@Deilan I don't understand why latest commit 1.5 years ago means the project is abandoned. It absolutely isn't, it just achieved its goal and I don't see any value in feature-creep ...
@LouisChatriot I agree that generally I am wrong with any judgements so far. So I removed it from my initial comments.
Officially "No longer maintained" as of July 8, 2021
16

Take a look at http://www.tingodb.com. I believe it does what you looking for. Additionally it fully compatible with MongoDB API. This reduces implementation risks and gives you option to switch to heavy solution as your app grows.

https://github.com/sergeyksv/tingodb

3 Comments

Full compatability with MongoDB is a very nice feature - develop your app to work with small local db, then if you need to, scale up to MongoDB.... Thanks!
... but definitely don't forget to compare with nedb, which is also MongoDB compatible, and see which works for you
Latest commit on Dec 26, 2016.
13

I'm only familiar with Mongo and Couch, but there's also one named Persistence.

4 Comments

Would you still consider this a solution? last commit was 7 years ago.
Latest commit on Mar 31, 2010.
I think your looking for the newer PersistenceJS
how is that possibly any better @Chamilyan
9

Try nStore, it seems like a nice key/value lightweight dembedded db for node. See https://github.com/creationix/nstore

1 Comment

Latest commit on Apr 2, 2013.
8

I had trouble with SQLite3, nStore and Alfred.

What works for me is node-dirty:

path = "#{__dirname}/data/messages.json"
messages = db path

message = 'text': 'Lorem ipsum dolor sit...'

messages.on "load", ->    
    messages.set 'my-unique-key', message, ->
        console.log messages.get('my-unique-key').text

    messages.forEach (key, value) ->
        console.log "Found key: #{key}, val: %j", value

messages.on "drain", ->
    console.log "Saved to #{path}"

2 Comments

Thank you for the share, I've been looking for something like this for a while. This in combination with small websites works just fine!
@DieterGoetelen you are welcome! I was also recently quite happy using a more powerful EJDB which has a MongoDB-like syntax and has bindings in Node.js and beyond github.com/Softmotions/ejdb-node
8

LevelUP aims to expose the features of LevelDB in a Node.js-friendly way.

https://github.com/rvagg/node-levelup

You can also look at UnQLite. with a node.js binding node-unqlite

https://github.com/symisc/unqlite

Comments

7

Maybe you should try LocallyDB it's easy-to-use and lightweight in addition to the with advanced selecting system similar to javascript conditional expression...

https://github.com/btwael/locallydb

5 Comments

Thanks Wael Amine Boutglay LocallyDB just did my thing for node js. Previously I was working with php and I created my own flat file database github.com/sguha-work/LifeDB
LocallyDB is nice for locally testing! Please note that it use block IO. Do not use it in production.
The link doesn't work. It's a domain parking page.
@rsp link fixed, check http://boutglay.com/locallydb/
Latest commit on Aug 1, 2016.
2

UeberDB provides abstraction for various databases

https://github.com/pita/ueberDB

https://www.npmjs.org/package/ueberDB

Comments

1

I wrote jaguarDb to handle some of the things that you are mentioning since I sometimes need a "little" database for demo or test projects too and I don't want to depend on mongoDB or another real database.

https://github.com/hectorcorrea/jaguarDb

1 Comment

Latest commit on Apr 3, 2013.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.