V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
imes
V2EX  ›  问与答

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

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

    程序日志,日均 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 。
    imes
        2
    imes  
    OP
       2023-08-16 12:02:29 +08:00 via Android
    @lsk569937453 1# 跑在服务器上的,所以我才觉得这个场景应该是用 SQLite 而不是 LevelDB
    liprais
        3
    liprais  
       2023-08-16 12:21:04 +08:00
    才 15 万条,写 txt awk 计算完事
    cat
        4
    cat  
       2023-08-16 13:34:48 +08:00
    @imes 跑在服务器上的 为什么会觉得应该用 SQLite …
    1423
        5
    1423  
       2023-08-16 13:36:56 +08:00
    原始日志写 kafka, 后期爱怎么处理怎么处理
    bctdg
        6
    bctdg  
       2023-08-16 13:50:40 +08:00
    统计计算具体是什么类型呀? leveldb 太底层了,不太建议。Prometheus 怎么说,后续接计算或报警都很方便
    imes
        7
    imes  
    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 这类工具做统计分析就行,
    imes
        13
    imes  
    OP
       2023-08-16 16:44:10 +08:00 via Android
    @815979670 8# 我感觉 SQLite 应该是综合成本最低的,LevelDB 迁移到 SQLite 问题不大,操作也是 SQL 的那套标准,上手比较快。就是得倒腾旧数据到新平台上。
    jiangwei2222
        14
    jiangwei2222  
       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 只是给客户端用的呢
    Chad0000
        16
    Chad0000  
       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   ·   实用小工具   ·   1768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:35 · PVG 00:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.