【框架: Nodejs单机数据库选择】

本文讨论了为Node.js程序选择适合的单机数据库,强调了对内存管理、性能和资源消耗的要求。比较了lowdb、nedb、rxdb和pouchdb等数据库框架,最终推荐pouchdb和leveldb作为内存型和SQL型数据库的组合,因其成熟、功能完善且性能优越。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

应用程序为nodejs程序,为nodejs程序选择一款适合的单机数据库,提供数据管理功能。

关键词,单机运行,适合nodejs服务。

所需基础功能

  • CURD,增删改查
  • 索引,加速查找
  • 事务相关(增值) 如果没有,可以自己实现,考虑通过加锁实现
  • Geo(增值)如果没有,可以自己实现,需要考虑下性能

要求

单机相对于云上,资源有限,考虑性能。资源消耗(mem,cpu)不要占用过高 ,查询性能要好 ,要适用于单机设备,小型轻量级的。

如何在单机上做数据管理

单机数据管理框架,总结下来有2种方案,

1, 框架直接把数据读到内存中,然后操作修改,再和磁盘数据同步。

内存型

简单直接,功能性,性能上一般。

2,数据层加配一个数据库。框架本质上是个数据层layer,可以搭配不同的数据库使用。

数据层+数据库

功能更丰富,性能更优。

筛选出的单机数据管理框架:lowdb, nedb, rxdb,pouchdb。lowdb,nedb属于上述图1,rxdb,pouchdb属于上述图2,具体对比如下,

方案对比

整体

lowdbnedbrxdbpounchdb
运行环境nodenodenodenode / broswer
语法纯json操作,手动落盘类似MongoDB 的SQL语句类似MongoDB的SQL语句MongoDB 的SQL语句
组织结构没有table,只分datastore-没有table,只分database
github star20.6k13.4k20.2k16.2k
易用性可以
问题过于简单 ,性能优化不足 ,数据量大时,可能有性能问题停止维护,内存中数据与磁盘中大小相同部分功能收费暂无发现明显问题

lowdb性能问题: If you have large JavaScript objects (~10-100MB) you may hit some performance issues. This is because whenever you call db.write, the whole db.data is serialized using JSON.stringify and written to storage.

nedb的合并过程: A copy of the whole database is kept in memory. This is not much on the expected kind of datasets (20MB for 10,000 2KB documents).

功能与使用

lowdbnedbrxdbpounchdb
语法纯json操作,手动落盘语法上类似MongoDB 的SQL语句语法上类似MongoDB 的SQL语句mango语法,与MongoDB 的SQL语句差不多
存储结构运行时memory存储,启动时整体读盘,wirte时整体落盘append+compress模式,类似redis AOF取决于选择数据库,由于rxdb上面除内存型存储,非完全开源,大部分数据库存储需要付费使用,未继续调研levelDB,kv存储,数据库也是可以选择多种,以下是假设选择leveldb,进行的调研
explain不支持不支持-支持
changestream不支持不支持-支持
await支持需要额外代码-支持
索引支持-支持
资源配置要求要求低要求低,随数据增长-可配置,大小都可以,内存越大性能越好

数据层,storage,数据 之间的关系

数据层-storage-数据

总结

4种方案

方案lowdbnedbrxdb + sqlitepouchdb + leveldb
定位内存型数据库内存型数据库sql型数据库no-sql数据库
特点过于简单,数据全部在内存中,查快,但是随着数据增多,内存会同步1:1增长相对成熟。数据全部在内存中,和lowdb有相同问题。相对成熟,但是sqlite版不是开源的,收费。多级缓存,少量数据在内存中,大部分在磁盘中。pouchdb作为数据层提供较为丰富的功能,leveldb对于查询性能有保障。
功能缺乏一般丰富丰富
性能较差一般
存储结构JSONJSONB树LSM-Tree

综合来看, pouchdb + leveldb 效果出众,语法成熟,功能较为完善,配置要求不高,读写性能优。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值