V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tdb11039gg
V2EX  ›  数据库

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

  •  
  •   tdb11039gg · 102 天前 · 3149 次点击
    这是一个创建于 102 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 用过 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  
       102 天前
    excel
    Amose2024
        2
    Amose2024  
       102 天前   ❤️ 5
    所以你不是来问问题的啊,卖弄?
    opengps
        3
    opengps  
       102 天前
    这些不够你选得?
    kk380446
        4
    kk380446  
       102 天前
    op 手撸一个数据库出来
    zoharSoul
        5
    zoharSoul  
       102 天前
    sqlite 啊 这还用想吗
    tdb11039gg
        6
    tdb11039gg  
    OP
       102 天前 via Android
    @ounxnpz 用不来
    @Amose2024 卖弄啥,ai 选的,我都没用过
    @kk380446 难,tinydb 好像不支持并发写,得顺序执行
    @zoharSoul
    changdy
        7
    changdy  
       102 天前
    看你具体场景 ,一般是 sqlite 或者 h2 吧.
    netnr
        8
    netnr  
       102 天前 via Android
    DuckDB
    chihiro2014
        9
    chihiro2014  
       102 天前
    直接 docker 安装,无所谓轻量不轻量
    dreamk
        10
    dreamk  
       102 天前
    isar 支持所有平台
    配合 Tantivy 实现跨平台的全文搜索
    模糊错别字拼音都支持,省去 es 了
    wheat0r
        11
    wheat0r  
       102 天前
    ms access
    tdb11039gg
        12
    tdb11039gg  
    OP
       101 天前 via Android
    @changdy h2 用的多吗
    @netnr 试试
    @chihiro2014 本地一般不用安装的
    @dreamk 这个不错
    @wheat0r 感觉重了,不能跨平台部署把
    FangHao
        13
    FangHao  
       101 天前   ❤️ 1
    完全不知道你需求场景是啥,只看到一个轻量本地
    wxf666
        14
    wxf666  
       101 天前
    @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  
       101 天前
    TP 负载就 sqlite 啊,AP 性质的就 duckdb
    s9ar
        16
    s9ar  
       101 天前
    如果只需要 kv 就 leveldb 咯
    tdb11039gg
        17
    tdb11039gg  
    OP
       101 天前
    @FangHao 就像 sqlite 那样,读写都在本地,单独开个数据库很费资源的,比如历史记录功能,只存本地就可以。
    @wxf666 sqlite 可以满足,如果是非关系型( json )的就不太行。小项目不复杂自己封装下也行。
    @s9ar 感谢
    iorilu
        18
    iorilu  
       101 天前
    数据库就考虑 2 个

    本地跑 sqlite

    网站做服务: portgres

    其他不用看, 没那空, 当然了靠搞数据库吃饭的人除外
    renguangwei
        19
    renguangwei  
       101 天前
    没有应用场景啊,那就 txt
    MrDarnell
        20
    MrDarnell  
       101 天前
    根本不用想 sqlite3
    wxf666
        21
    wxf666  
       101 天前
    @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
       101 天前
    @iorilu 有道理,楼上说的也没错,有 key,value 和非结构化的一些场景也可以考虑用别的。
    @renguangwei 像用 sql 一样操作文件多爽呀
    @MrDarnell 为啥
    @wxf666 非关系型的扩展性强一些,不用去设计表了。想变就变。2 问题不大。3 用 sqlite 的 json 字段应该也可以做。
    wxf666
        23
    wxf666  
       101 天前
    @tdb11039gg #22

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

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


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

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


    帖子:/t/1071840#reply91
    Yjhenan
        24
    Yjhenan  
       100 天前
    FerretDB + SQLite ?😁

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

    若是适配麻烦,postgre 也有 embed 版本,mysql 也有但很难搞不推荐,mysql 试着用 h2 平替,只是兼容性很垃圾。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:39 · PVG 07:39 · LAX 15:39 · JFK 18:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.