V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
so2back
V2EX  ›  程序员

请教一个关于 clickhouse 和 es 检索的问题

  •  
  •   so2back · 235 天前 · 1039 次点击
    这是一个创建于 235 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前在做一个日志分析模块,里边有个分页展示所有日志的页面,并且可以按条件搜索,主要还是根据关键字去模糊搜索日志,类似 like '%关键字%' 这种。

    我翻了下 clickhouse 的官方文档,找到 like 这种查询的优化可以用 tokenbf_v1 索引,但是我模拟了 1 亿数据量的日志,发现直接用 like '%%'并不走索引,只能用 hasToken()函数才行,但是这种函数的方式更像是分词匹配(确实这个索引的逻辑也是这样),不是 like 原本的逻辑。而且,tokenbf_v1 索引在低命中率的时候效果才明显,高命中率的时候依旧等于全表扫描。

    我测试下来发现 clickhouse 并不能完全满足我。我想请教下 clickhouse 是否还有其他的优化是我未知的,或者 es 是否可以满足这种需求( es 我还没怎么接触过)。现在我测试的 1 亿数据,命中有 900w 数据时,select count()出来的时间要 100 来秒,太慢了。不知道 es 的情况会怎么样。

    9 条回复    2023-09-10 21:44:16 +08:00
    dode
        1
    dode  
       235 天前
    增加 clickhouse 节点,划分多个独立硬盘分区数据呢
    vitoliu
        2
    vitoliu  
       235 天前
    clickhouse 不清楚
    es 可以通过 ngram+term query 进行查询。只有一亿数据的话可以尝试下,p99 肯定是可以做到一秒以内。
    也可以先 suggester 查询,不行再使用 wildcard 查询,但是注意要限制字符长度。
    so2back
        3
    so2back  
    OP
       235 天前
    @dode 机器不在我手上,没办法尝试- -
    so2back
        4
    so2back  
    OP
       235 天前
    @vitoliu 好的谢谢,起码有个思路,我针对性的去测试一下
    vitoliu
        5
    vitoliu  
       235 天前
    @so2back #4 嗯,这么说来你们是自运维的 infrastructure ?全文检索场景肯定是优先 ES 的。而且 ES 集群对外能提供多种能力,业务普适性比 clickHouse 强。
    vincent7245
        6
    vincent7245  
       235 天前
    大哥你是不是用错场景了,clickhouse 是做 OLAP 的,你只结把日志怼进去查是不是太粗暴了
    so2back
        7
    so2back  
    OP
       235 天前
    @vincent7245 主要看了好几个像携程、唯品会、石墨啥的博客说把日志从 es 转到 ck ,所以我在想 ck 是不是可行的,但我实际测试下来好像又不是一回事,可能场景不同吧,我这种场景太暴力了,就单纯的 like
    kneo
        8
    kneo  
       234 天前 via Android
    like 是很难索引的。而且你返回结果太大了。有必要 900 万条都返回?看得过来嘛……
    so2back
        9
    so2back  
    OP
       234 天前
    @kneo 做出来给别人用的,如果真有这么多数据,然后有人这么搜索的话感觉要直接炸裂,到时候就真要回炉重做了- -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2222 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:14 · PVG 17:14 · LAX 02:14 · JFK 05:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.