适用于Node.js的轻量级Javascript数据库

158

有没有人知道一款轻量级但耐用的数据库,用JavaScript编写,可以与Node.js一起使用。

我不想要像Mongo或Couch这样的(好的)解决方案的“重量”。一个简单的内存JS数据库,具备将数据持久化到磁盘文件的功能就足够了。我只需要用它来存储少量的数据。

要求:

  • 能够在Node.js服务器应用程序中进程运行
  • 可以将整个数据库保存到磁盘,并在故障后进行恢复
  • 不需要原子写或事务支持
  • 快速查询和排序会很不错
  • 只需要支持小数据量,总量不超过1MB

目前我已经看到了TAFFY db,但它似乎并不是针对Node.js进行优化。有人看到我正在寻找的东西吗?

谢谢


尝试使用 https://github.com/rvagg/node-levelup。 - hellboy
对于新项目,您可能想看一下AceBase,它是一个非常轻量级和快速的Node.js NoSQL数据库引擎。 - Ewout Stortenbeker
11个回答

125

我和你有同样的需求,但找不到一个合适的数据库。nStore看起来很有前途,但是它的API并不完整,也不够连贯。

这就是为什么我创建了NeDB,它是一个无依赖的内嵌式数据库,适用于Node.js项目。你只需要简单地使用require()就可以调用它,它是持久化的,并且其API是非常著名的MongoDB API中最常用的子集。

https://github.com/louischatriot/nedb


12
nedb很好用,但请注意您不能在多个进程中使用它 - 每个进程在启动时都会有自己的副本。 - Meekohi
21
提醒一下,看起来 NeDB 可能已经被放弃了。 - Guy
7
我不明白为什么最新的提交距今1.5年就意味着项目被放弃了。实际上并不是这样,它只是达到了目标,而且我认为添加功能并没有任何价值... - Louis Chatriot
9
考虑编写一个简单的脚本,每三个月更新一次 README,替换最后一行的内容,即“此项目仍然活跃于<今天的日期> - NeDB (c) 2013-<今天的年份> Louis Chatriot”;提交信息应该是类似于“声明项目截至<今天的日期>仍然活跃”,这将成为人们在 Github 上看到的第一件事。 - Giacomo Lacava
12
我同意@LouisChatriot的观点。你有107个问题、32个待处理的Pull Requests,而且最后一次修改代码是3年前。仅仅看到这些,我就不想使用这个软件并面对不兼容性(在JS开发中,3年时间足以成为一个时代),被忽视的问题等等。虽然该项目拥有适量的星星评分,但它并没有展现出新鲜感。 - Neithan Max
显示剩余4条评论

31

LokiJS:一款快速的、内存型的文档导向数据存储引擎,适用于node.js、浏览器和cordova。

  • 内存中的JavaScript数据存储引擎,可持久化
  • 在浏览器中使用的NoSQL数据库,支持同步和持久化
  • 一条npm安装命令即可拥有类似Redis的存储引擎
  • Cordova的可持久化NoSQL数据库
  • 可嵌入Node-Webkit应用程序的具备持久化功能的NoSQL数据库

LokiJS被认为是以下情况的理想解决方案:

  • 移动应用程序,尤其是基于HTML5的应用程序(如Cordova、Phonegap等)
  • 中小型嵌入式数据存储引擎
  • 嵌入到Node Webkit桌面应用程序中

https://github.com/techfort/LokiJS


如果我清除本地存储,lokiJS 中的数据会被清除吗? - HIRA THAKUR
@LeonardoDaCodinchi - 取决于你如何使用它,在Node中,它会保存到一个json文件以进行持久化。 - BryanGrezeszak
尽管如此,据我所了解,数据库仍存储在启动时的内存中。 - mjwrazor
它在不同的节点进程中使用相同的数据库吗?我正在使用它来为Express中的访问计数器服务,在生产环境中我们有多个并行运行的进程。 - João Pimentel Ferreira

19

NeDB 似乎是您正在寻找的内容。以下是简介:

NeDB是一个嵌入式持久化数据库,用于Node.js编写的JavaScript项目,不依赖任何东西(当然,需要npm模块)。您可以将其视为Node.js项目的SQLite,只需使用简单的require语句即可使用。API是MongoDB的子集。您可以将其用作持久性数据存储或仅内存中的数据存储。


@Deilan 我不明白为什么最近的提交是1.5年前,就意味着这个项目已经被放弃了。它绝对没有被放弃,它已经实现了它的目标,我也看不到添加新功能有任何价值... - Louis Chatriot
@LouisChatriot 我同意,到目前为止我的任何判断都是错误的。因此,我已将其从我的最初评论中删除。 - Deilan
自2021年7月8日起,正式宣布“不再维护”。 - aaronP

16

1
完全兼容MongoDB是一个非常好的功能 - 开发您的应用程序以使用小型本地数据库,然后如果需要,扩展到MongoDB...谢谢! - Brad Parks
但是一定不要忘记与nedb进行比较,它也是MongoDB兼容的,看看哪个适合您。 - Brad Parks
1
2016年12月26日的最新提交。 - Deilan

13

我只熟悉Mongo和Couch,但还有一个名为Persistence的数据库。


17
你认为这仍然是一个解决方案吗?最后一次提交是在7年前。 - mjwrazor
3
最新的提交日期为2010年3月31日。 - Deilan
2
我认为你正在寻找更新的PersistenceJS - Chamilyan
3
那怎么可能更好呢,@Chamilyan。 - Zee

9

2
2013年4月2日的最新提交。 - Deilan

8

我在使用SQLite3、nStore和Alfred时遇到了问题。

对我而言,适用的解决方案是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}"

谢谢分享,我已经寻找类似的东西有一段时间了。这个与小型网站结合使用效果很好! - Dieterg
1
@DieterGoetelen 欢迎!我最近也很高兴使用更强大的EJDB,它具有类似MongoDB语法,并且在Node.js和其他领域都有绑定 https://github.com/Softmotions/ejdb-node - Radek

8

7

感谢Wael Amine Boutglay,LocallyDB刚刚为我的Node.js项目服务了。之前我一直在用PHP并且创建了自己的平面文件数据库https://github.com/sguha-work/LifeDB。 - Sahasrangshu Guha
LocallyDB非常适合进行本地测试!请注意它使用块IO。不要在生产环境中使用它。 - Junle Li
1
该链接无效。这是一个域名停放页面。 - rsp
@rsp 链接已修复,请查看[http://boutglay.com/locallydb/]。 - Wael Boutglay
2
2016年8月1日的最新提交。 - Deilan

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接