bthulu
V2EX  ›  问与答

有没有内置数据库可存储上亿数据的, 如 sqlite 这种的?

  •  
  •   bthulu · Feb 24, 2021 · 2420 views
    This topic created in 1906 days ago, the information mentioned may be changed or developed.

    并发量几乎没有, 但是数据量比较大, 上亿条是有的. 数据量大了以后, sqlite vacuum 一下要好久好久, 造成业务 ting 停顿半个小时到几个小时不等, 实在受不了了. 有没有别的这种, 内嵌到 jar 包里的本地数据库解决方案, 不要长时间停顿的

    10 replies    2021-02-24 17:28:52 +08:00
    optional
        1
    optional  
       Feb 24, 2021 via Android
    leveldb
    mokeyjay
        2
    mokeyjay  
       Feb 24, 2021
    到了这个数据量,我觉得停顿是你本地硬盘不行的原因吧。机械硬盘?
    bthulu
        3
    bthulu  
    OP
       Feb 24, 2021
    @mokeyjay sqlite vacuum 会将当前整库数据复制一份, 再把原来的库删掉. 整库数据有几百 G, 几百 G 数据复制一下, 你觉得什么牛逼硬盘能在几秒内搞定?
    bthulu
        4
    bthulu  
    OP
       Feb 24, 2021   ❤️ 1
    @optional leveldb 只能按 key 取数据啊, 我这至少要支持额外的两列索引
    mokeyjay
        5
    mokeyjay  
       Feb 24, 2021   ❤️ 1
    @bthulu #3 ramdisk
    您这人真会说话,嘴真甜,给您点赞
    QBugHunter
        6
    QBugHunter  
       Feb 24, 2021
    楼主你先排除硬盘的原因。。。
    你到底复制了多少数据导致停顿半小时的,你说亿级别的,那数据库文件到底有多大

    Sqlite3 对 1-10 亿级别的数据处理,除非特殊情况,否则不会出现性能瓶颈
    bthulu
        7
    bthulu  
    OP
       Feb 24, 2021
    @QBugHunter 增删改查是没有问题, 就是 vacuum 是个大问题啊
    bthulu
        8
    bthulu  
    OP
       Feb 24, 2021
    或许我该用自动 vacuum, 这样不用复制数据倒是快很多
    itskingname
        9
    itskingname  
       Feb 24, 2021
    @QBugHunter 1-10 亿级别都没有性能瓶颈。如果只是读的时候,已经可以吊打 MySQL 了。
    systemcall
        10
    systemcall  
       Feb 24, 2021 via Android
    @bthulu 几百 G,当然是用 M1 搞定
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   935 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 19:48 · PVG 03:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.