有没有推荐用的轻量本地数据库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tdb11039gg
V2EX    数据库

有没有推荐用的轻量本地数据库

  •  
  •   tdb11039gg 2024-09-12 19:29:51 +08:00 3617 次点击
    这是一个创建于 400 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 用过 SQLite (安卓开发)
    • 还有 TINYDB(json 格式)

    下面是 AI 推荐的:

    SQLite:

    优点:轻量、无需服务器、配置简单、支持 SQL 查询。 使用场景:移动应用、桌面应用、小型网站。

    H2 Database:

    优点:内存数据库、支持 SQL 、可嵌入 Java 应用。 使用场景:Java 应用、测、开发。

    Berkeley DB:

    优点:高性能、键值存储、事务支持。 使用场景:嵌入式系统、需要高并发和事务支持的场景。

    LevelDB:

    优点:由 Google 开发,键值存储,性能优异。 使用场景:需要高性能键值存储的场景。

    RocksDB:

    优点:基于 LevelDB ,增加了更多功能和优化。 使用场景:需要高并发和持久化存储的场景。

    LMDB:

    优点:内存映射数据库,支持多线程读写。 使用场景:需要高并发访问和持久化存储的场景。

    PouchDB/CouchDB:

    优点:文档型数据库,支持 JSON 存储,易于使用。 使用场景:需要灵活数据模型和同步能力的应用。

    Realm:

    优点:移动端优化的数据库,支持多平台。 使用场景:移动应用,特别是需要跨平台支持的应用。

    NeDB:

    优点:轻量级的文档型数据库,适用于 Node.js 。 使用场景:Node.js 应用,需要轻量级存储解决方案。

    26 条回复    2024-10-29 11:04:32 +08:00
    ounxnpz
        1
    ounxnpz  
       2024-09-12 19:54:28 +08:00
    excel
    Amose2024
        2
    Amose2024  
       2024-09-12 20:20:16 +08:00   5
    所以你不是来问问题的啊,卖弄?
    opengps
        3
    opengps  
       2024-09-12 21:22:38 +08:00
    这些不够你选得?
    kk380446
        4
    kk380446  
       2024-09-12 21:36:47 +08:00
    op 手撸一个数据库出来
    zoharSoul
        5
    zoharSoul  
       2024-09-12 21:55:35 +08:00
    sqlite 啊 这还用想吗
    tdb11039gg
        6
    tdb11039gg  
    OP
       2024-09-12 22:06:00 +08:00 via Android
    @ounxnpz 用不来
    @Amose2024 卖弄啥,ai 选的,我都没用过
    @kk380446 难,tinydb 好像不支持并发写,得顺序执行
    @zoharSoul
    changdy
        7
    changdy  
       2024-09-12 22:11:39 +08:00
    看你具体场景 ,一般是 sqlite 或者 h2 吧.
    netnr
        8
    netnr  
       2024-09-12 22:46:02 +08:00 via Android
    DuckDB
    chihiro2014
        9
    chihiro2014  
       2024-09-12 23:19:51 +08:00
    直接 docker 安装,无所谓轻量不轻量
    dreamk
        10
    dreamk  
       2024-09-12 23:27:14 +08:00
    isar 支持所有平台
    配合 Tantivy 实现跨平台的全文搜索
    模糊错别字拼音都支持,省去 es 了
    wheat0r
        11
    wheat0r  
       2024-09-12 23:34:05 +08:00
    ms access
    tdb11039gg
        12
    tdb11039gg  
    OP
       2024-09-13 08:10:14 +08:00 via Android
    @changdy h2 用的多吗
    @netnr 试试
    @chihiro2014 本地一般不用安装的
    @dreamk 这个不错
    @wheat0r 感觉重了,不能跨平台部署把
    FangHao
        13
    FangHao  
       2024-09-13 09:37:14 +08:00   1
    完全不知道你需求场景是啥,只看到一个轻量本地
    wxf666
        14
    wxf666  
       2024-09-13 12:19:19 +08:00
    @dreamk #10

    1. 有提供 Cli 版本,以及其他语言使用的库吗?

    2. 支持并行写吗?





    @tdb11039gg #12

    SQLite 还不能满足你吗?


    1.Python 都能每秒 1W 写入事务,每事务几百字节 + 64 字符 唯一索引验证。

    1000W 记录时,仍能 7000 TPS 。(六七年前的低压轻薄本上测试,[源码](/t/1070957#reply13))



    2. 几年前,微信说,手机上百万百字聊天记录,

    搜索三个词,只需 0.0029 秒。10 秒全文索引完毕。

    可无限读事务同时查询,也不影响写事务并行。

    支持:拼音及首字母(自动解决多音字)和汉字任意混合、模糊(通过 NEAR )、同义词(错别字是这个原理吗?)等

    ([文章链接]( https://mp.weixin.qq.com/s/Ph0jykLr5CMF-xFgoJw5UQ))



    3. 我测试过,在电视盒子上(单核 Nginx 默认页压测 1W QPS ,性能不及 6 年前骁龙 636 千元机一半),

    Python 的 FastAPI + SQLite + 去年本站被爬的千万数据(此时 5GB 数据库):

    - 200 模拟发帖回帖 + 全文索引 / 秒
    - 1100 获取整帖(包括回帖者信息) / 秒
    s9ar
        15
    s9ar  
       2024-09-13 12:43:27 +08:00
    TP 负载就 sqlite 啊,AP 性质的就 duckdb
    s9ar
        16
    s9ar  
       2024-09-13 12:44:58 +08:00
    如果只需要 kv 就 leveldb 咯
    tdb11039gg
        17
    tdb11039gg  
    OP
       2024-09-13 13:20:14 +08:00
    @FangHao 就像 sqlite 那样,读写都在本地,单独开个数据库很费资源的,比如历史记录功能,只存本地就可以。
    @wxf666 sqlite 可以满足,如果是非关系型( json )的就不太行。小项目不复杂自己封装下也行。
    @s9ar 感谢
    iorilu
        18
    iorilu  
       2024-09-13 14:23:33 +08:00
    数据库就考虑 2 个

    本地跑 sqlite

    网站做服务: portgres

    其他不用看, 没那空, 当然了靠搞数据库吃饭的人除外
    renguangwei
        19
    renguangwei  
       2024-09-13 14:27:23 +08:00
    没有应用场景啊,那就 txt
    MrDarnell
        20
    MrDarnell  
       2024-09-13 16:15:03 +08:00
    根本不用想 sqlite3
    wxf666
        21
    wxf666  
       2024-09-13 17:27:44 +08:00
    @tdb11039gg #17


    1. 请教下,存 json 的优势是什么呢?

    - 增删查改方便?(如果不写 SQL ,而是用 ORM ,应该无所谓吧?)
    - 物理上,这些数据聚在一块儿,查找起来速度更快?
    - ……?



    2. 逻辑上说,非关系能干的,关系应该都能干吧?

    就是可能慢些,或其他缺陷?



    3. SQLite 支持 json 增删查改聚合处理( json_* 或 jsonb_* 系列函数,或者 -> 及 ->> 操作符)

    但没有 jsonPath 那样简洁的方式。。(做个插件,或者宿主语言里实现个函数给 SQLite 用也行)

    比如查某帖里,某人近一年来的回复:

    ```sql
    SELECT 回复 ->> '内容'
    FROM 帖子表
    JOIN json_each(回复数组) 回复
    WHERE 帖子 ID = 1072404
      AND 回复 ->> '作者' == '某人'
      AND 回复 ->> '时间' >= '2023-09-13'
    ```

    也支持对 json 字段做索引( Indexes On Expressions ),但目前不支持多值索引(如索引一个数组)。

    真要实现,可以做个触发器,将数组里的差异项,更新到另一个索引里(如《帖子 ID ,回复人 ID ,楼层 or 楼层数组》索引)。



    但我感觉,这些实现成一般关系表,就足够了。。
    tdb11039gg
        22
    tdb11039gg  
    OP
       2024-09-13 19:29:28 +08:00
    @iorilu 有道理,楼上说的也没错,有 key,value 和非结构化的一些场景也可以考虑用别的。
    @renguangwei 像用 sql 一样操作文件多爽呀
    @MrDarnell 为啥
    @wxf666 非关系型的扩展性强一些,不用去设计表了。想变就变。2 问题不大。3 用 sqlite 的 json 字段应该也可以做。
    wxf666
        23
    wxf666  
       2024-09-13 20:26:54 +08:00
    @tdb11039gg #22

    前两天,我还见人吐槽,Python 的 *args, **kwargs (相当于支持接收一个 array 和 object )

    原因是动态字段太灵活,太不严谨,文档代码对不上,后期维护太困难等问题。


    我很疑惑,用 MongoDB 的,是怎么解决这些问题的呢。。

    加上 json 还能字段想变就变,会不会前后期数据,字段都不统一呢。。


    帖子:/t/1071840#reply91
    Yjhenan
        24
    Yjhenan  
       2024-09-14 12:17:49 +08:00
    FerretDB + SQLite ?

    https://github.com/FerretDB/FerretDB
    FerretDB 的成立是为了成为 MongoDB 事实上的开源替代品。FerretDB 是一个开源代理,它将 MongoDB 5.0+ 有线协议查询转换为 SQL 使用 PostgreSQL 或 SQLite 作为数据库引擎。
    tdb11039gg
        25
    tdb11039gg  
    OP
       2024-09-14 18:27:03 +08:00
    @wxf666 MongoDB 虽然是 json 存储,也要考虑模型,只不过不用去维护数据结构了。实际上同一个字段又存字符串,又存结构体是不行的。
    @Yjhenan SQLite 可以,FerretDB 不是本地数据库。
    zzmark06
        26
    zzmark06  
       354 天前
    非联网的单机 db ,oltp 用 sqlite ,olap 用 duckdb ,都是王者级

    若是适配麻烦,postgre 也有 embed 版本,mysql 也有但很难搞不推荐,mysql 试着用 h2 平替,只是兼容性很垃圾。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2487 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:12 PVG 19:12 LAX 04:12 JFK 07:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86