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


    场景

    应用程序为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 效果出众,语法成熟,功能较为完善,配置要求不高,读写性能优。

  • 相关阅读:
    JavaSE---栈和队列
    15-bean生命周期,循环依赖
    JVM虚拟机栈的五道面试题
    初识mysql
    数据结构_B树(C语言)
    通配符SSL证书价格贵吗
    华为云会议,轻松实现远程智能办公
    Bytebase 2023 第三季度回顾
    C++超复杂的构造和析构函数执行顺序详解
    智能网联跑出中国「加速度」,26.15%搭载率背后的市场洗牌
  • 原文地址:https://blog.csdn.net/qq_38428433/article/details/138173427