日志场景: LevelDB 和 SQLite 哪个更合适? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cmos
V2EX    问与答

日志场景: LevelDB 和 SQLite 哪个更合适?

  •  1
     
  •   cmos 2023-08-16 11:41:14 +08:00 2667 次点击
    这是一个创建于 819 天前的主题,其中的信息可能已经有所发展或是发生改变。

    程序日志,日均 300-500 条,不定期(约每周两次)会爆发到 1500 条。需要做到日志持久化,持续时间至少一年,也就是约 15 万条。(不用 txt/log 是因为有时候需要进行统计、计算等)

    • 默认采用 LevelDB ,毕竟是查少写多的场景,再加上长久依赖和习惯,旧项目一直没改动,延续了下来。
    • 最近开新项目,我一想,存日志不应该上 SQLite 吗?总有需要表格化、关系化查找的时候。用 SQLite 直接读数据库就好了,用 LevelDB 外面还得再套一层。

    现在举棋不定,用 LevelDB 可以直接套娃,但是最后统计和计算的时候,还是会苦了自己;用 SQLite 要重写很多东西,但是会方便后期使用。觉得两个都好,两个都想要,可是成年人知道,两个都要,身体受不了。

    19 条回复    2023-08-17 14:17:05 +08:00
    lsk569937453
        1
    lsk569937453  
       2023-08-16 11:50:16 +08:00
    SqLite 是运行在客户端的轻量数据库,并没有指明是存储日志的。所以你的程序是跑在客户端的吗?

    如果程序是跑在服务器上的,1 年就存十几万条日志,那可以有很多方案啊,mysql/mongodb/postgreSQL 。
    cmos
        2
    cmos  
    OP
       2023-08-16 12:02:29 +08:00 via Android
    @lsk569937453 1# 跑在服务器上的,所以我才觉得这个场景应该是用 SQLite 而不是 LevelDB
    F281M6Dh8DXpD1g2
        3
    F281M6Dh8DXpD1g2  
       2023-08-16 12:21:04 +08:00
    才 15 万条,写 txt awk 计算完事
    cat
        4
    cat  
       2023-08-16 13:34:48 +08:00
    @imes 跑在服务器上的 为什么会觉得应该用 SQLite …
    slowman
        5
    slowman  
       2023-08-16 13:36:56 +08:00
    原始日志写 kafka, 后期爱怎么处理怎么处理
    bctdg
        6
    bctdg  
       2023-08-16 13:50:40 +08:00
    统计计算具体是什么类型呀? leveldb 太底层了,不太建议。Prometheus 怎么说,后续接计算或报警都很方便
    cmos
        7
    cmos  
    OP
       2023-08-16 14:13:47 +08:00
    @cat 4#
    @bctdg 6#
    有自增 ID 、用户身份、运行时间、触发事务,以及返回的数据,反正杂七杂八一大堆,所以下意识觉得应该搞个数据库来储存。
    815979670
        8
    815979670  
       2023-08-16 15:08:13 +08:00   1
    感觉 sqlite 合适一些,公司有类似的日志需求,使用 sqlite 存储,因为是批量写入,并且只有管理端查询,目前没有遇到性能上的问题。

    我们的用法是一个月一个 sqlite 文件,单文件数据量 在一千万到两千万左右,文件体积大概 1.2 到 1.5 G 的样子。

    使用体验还是不错的,查询层面,标准的 sql 语句都可以直接用,没有学习成本。如果出了问题 需要进一步分析,直接把 sqlite.db 文件 下载到本地,随便一个数据库客户端都能进行管理操作。

    注意:我上面提到的只是我们项目上的使用体验,没有考虑到 op 的技术栈迁移成本,仅供参考。
    8355
        9
    8355  
       2023-08-16 15:24:36 +08:00
    300-500 条。。。。
    txt 到底那里不好了,vim 一次打不开吗
    8355
        10
    8355  
       2023-08-16 15:25:15 +08:00
    cat 一屏上下滚动都够看的了。。
    patrickyoung
        11
    patrickyoung  
       2023-08-16 16:38:05 +08:00 via iPhone
    Clickhouse
    Itoktsnhc
        12
    Itoktsnhc  
       2023-08-16 16:43:44 +08:00
    随便找个常见的文件格式存一下 然后用 clickhouse-local, duckdb 这类工具做统计分析就行,
    cmos
        13
    cmos  
    OP
       2023-08-16 16:44:10 +08:00 via Android
    @815979670 8# 我感觉 SQLite 应该是综合成本最低的,LevelDB 迁移到 SQLite 问题不大,操作也是 SQL 的那套标准,上手比较快。就是得倒腾旧数据到新平台上。
    AutumnVerse
        14
    AutumnVerse  
       2023-08-16 17:05:38 +08:00 via Android
    日均 300-500 条,txt 难道不是最优解吗。拿 sqlite ,leveldb 存日志,你不怕被同事喷死?

    txt 存日志,每天一个新文件,查询的时候 cat/tail +grep+awk 就完事了。
    icyalala
        15
    icyalala  
       2023-08-16 17:10:16 +08:00
    txt 就够了
    但是为什么有人会觉得 sqlite 只是给客户端用的呢
    ktqFDx9m2Bvfq3y4
        16
    ktqFDx9m2Bvfq3y4  
       2023-08-16 17:17:55 +08:00 via iPhone
    有很多日志中间件支持查询。
    IDAEngine
        17
    IDAEngine  
       2023-08-16 22:46:32 +08:00
    Sqlite 现在都可以分布式存储,扩容比较简单,直接 Sqlite 不很好
    815979670
        18
    815979670  
       2023-08-16 23:37:59 +08:00 via Android
    @imes 如果感觉迁移成本不大的话,选 sqlite 是个不错的选择,楼里好多人说文本文件写日志更合适,可能是日志仅面向于开发吧,我们需要显示在管理后台里,用 sqlite 查询更方便。

    性能方面,如果实时性要求不高,可以把日志写入缓冲区,然后一次性落盘,性能客观。

    我写过一篇博文,可以提供参考: https://www.dbkuaizi.com/archives/154.html
    julyclyde
        19
    julyclyde  
       2023-08-17 14:17:05 +08:00
    我可以理解“总有需要表哥化、关系化查找的时候”但是为什么就“应该上 sqlite”了呢?
    这俩好像缺乏因果关系啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:17 PVG 11:17 LAX 19:17 JFK 22:17
    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