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

2024-04-24  本文已影响0人  wn777

场景

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

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

所需基础功能

要求

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

如何在单机上做数据管理

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

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

内存型

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

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

数据层+数据库

功能更丰富,性能更优。

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

方案对比

整体

lowdb nedb rxdb pounchdb
运行环境 node node node node / broswer
语法 纯json操作,手动落盘 类似MongoDB 的SQL语句 类似MongoDB的SQL语句 MongoDB 的SQL语句
组织结构 没有table,只分datastore - 没有table,只分database
github star 20.6k 13.4k 20.2k 16.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).

功能与使用

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

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

数据层-storage-数据

总结

4种方案

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

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

上一篇下一篇

猜你喜欢

热点阅读