V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
BuGoooo
V2EX  ›  程序员

我这个需求 适合用 clickhouse 吗

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

    目前大概有 10 亿条数据(陆续还会继续增加),就两个字段一个用户编码(随机的) 一个姓名。 我现在想做模糊匹配查询手机号做毫秒级的返回,比如输入编码后 3 位置后 4 位这些条件来输出所有编码一样的用户出来,用 clickhouse 合适吗

    33 条回复    2025-02-21 10:07:29 +08:00
    raycool
        1
    raycool  
       35 天前
    用 ES 合适吧?
    xausky
        2
    xausky  
       35 天前
    如果都是后 N 位的话直接数据库索引就可以优化,如果是任意 N 位 PGSQL 的话可以用 pg_trgm
    yudoo
        3
    yudoo  
       35 天前
    非常合适啊 也好部署,数据压缩比较好对内存要求比较低
    silentsky
        4
    silentsky  
       35 天前 via Android
    合适
    8355
        5
    8355  
       35 天前
    es 成本更低
    gazi
        6
    gazi  
       35 天前
    es 更合适。
    clickhouse 的任意位置模糊匹配查询很费劲
    bronyakaka
        7
    bronyakaka  
       35 天前
    搜索需求 毫无疑问是 es
    root71370
        8
    root71370  
       35 天前 via Android
    @8355 大家不都说 clickhouse 的成本要比 es 低吗?
    mark2025
        9
    mark2025  
       35 天前
    pgsql 的 FTS 搜索可以满足需求
    NotLongNil
        10
    NotLongNil  
       35 天前 via iPhone
    需要你再具体描述下你的搜索场景,是固定按后 3 位搜索?还是后 4 位?还是随机长度?
    cobbage
        11
    cobbage  
       35 天前
    Pika
    me1onsoda
        12
    me1onsoda  
       35 天前 via Android
    这么简单的需求 pg 其实就可以,支持表达式索引
    levelworm
        13
    levelworm  
       35 天前 via Android
    好奇一把,十个亿存储量多大?
    spritecn
        14
    spritecn  
       35 天前
    感觉,这个活普通 mysql 就能搞定啊,不要被各种教程说 2000 万以上 mysql 撑不住说法给忽悠
    13240284671
        15
    13240284671  
       35 天前
    @spritecn 模糊搜索呢,你用 mysql 搜试下,搜一次几分钟
    silentsky
        16
    silentsky  
       35 天前
    @spritecn 怎么想的 这个得看业务需要 如果数据分析那肯定不用 mysql 存储成本也高
    lasuar
        17
    lasuar  
       35 天前
    @spritecn #14 亿级模糊搜索超出 mysql 的能力范畴了,早点上专业的更合适。
    homewORK
        18
    homewORK  
       35 天前
    不适合
    clickhouse 更适合的是时序 + 数据处理任务的数据
    很明显你这个不是,只是查找。es 可能更合适,或者折腾一下 mysql 等
    cosen
        19
    cosen  
       35 天前
    应该问题不大,把后 3 位或后 4 位设计成分区,最多也就 1w 个分区,这样查数据也不会全表扫,可以试试
    telemsg
        20
    telemsg  
       35 天前   ❤️ 1
    各位需求都没明白吧(我反正是没有看懂) 就开始说技术了?
    8355
        21
    8355  
       35 天前
    @root71370 简单来说看看阿里云的价格
    Elasticsearch 有 Serverless 版本,可以按照 cu 收费,如果计划任务批量写库实际使用的 cu 很少,系统不是高并发持续访问的话一年不到 1 万就够了。clickhouse 单机起步就是 1 万
    dilu
        22
    dilu  
       35 天前
    “就两个字段一个用户编码(随机的) 一个姓名”

    “模糊匹配查询手机号做毫秒级的返回”

    从哪又蹦出来一个手机号字段?不就两个字段吗?一个用户编码,一个姓名

    而且从实际出发,你已经有 10 亿条记录,还是手机号这种数据,先不说你从哪来的

    如果只搜后 4 位,重复的概率得多大啊,你一下子就能搜出上万条记录,请问你怎么把这上万甚至几十万的数据展示给用户?
    rays
        23
    rays  
       35 天前
    你的需求是模糊匹配且是后缀匹配,是要用到 LIKE 和 position 函数,跳数索引是前缀匹配,无法满足你的需求,起不到加速查询的作用。position 是 ClickHouse 自带的字符串查询算法,性能会比 like 要好。但是 ClickHouse 数据库还是更适合列式聚合场景的,你的这种需求,还是不是很推荐使用 ClickHouse ,因为引入一项新技术后并没有带来突破性的提升。
    guanhui07
        24
    guanhui07  
       35 天前
    搜索需求 最合适还是 es
    blessingsi
        25
    blessingsi  
       34 天前
    查询流量是多少?
    BuGoooo
        26
    BuGoooo  
    OP
       34 天前
    @NotLongNil
    编码长度是固定的,32 位的。但是编码是随机的,每次查询的话就是查询开头和结尾是否有匹配的,比如
    ABCD****123456 我就查询前面 2 位 AB 和后面 4 位是否有相匹配的编码
    BuGoooo
        27
    BuGoooo  
    OP
       34 天前
    @homewORK es 我也倒腾了下,总感觉没对 查起来速度有点慢 不知道是不是我倒腾的没对
    BuGoooo
        28
    BuGoooo  
    OP
       34 天前
    @dilu 打错了,就是编码+姓名, 主要是通过匹配编码来找数据
    NotLongNil
        29
    NotLongNil  
       34 天前
    @BuGoooo #26 clickhouse 不适合做这个。上面看到你试验后,发现查询慢。这是正常的,因为 CH 做了全表扫描。CH 的索引跟 mysql 多索引不一样。如果是固定前两位和固定后四位查询,你使用 mysql ,把这两个单独提出来,作为分表键,加索引,查询速度比 ch es 还快,还节省资源
    silentsky
        30
    silentsky  
       34 天前 via Android
    @NotLongNil clickhouse 物化视图就能做
    unclejimao
        31
    unclejimao  
       34 天前
    多存两列,prefix 存前两位,做分区字段,不区分大小写的话 1000 多个分区; suffix 存后 4 位,做排序字段;
    查询的时候直接 WHERE prefix=? AND suffix=?
    NotLongNil
        32
    NotLongNil  
       34 天前
    @silentsky #30 CH 的 MergeTree 索引结构,只能判断到数据在哪个段,然后将整个段加载到内存,在内存中进行遍历过滤。一个段默认大小有 8000 多行。在这个场景下,做好分表,设置好索引,B+ 树段查询速度反而会比 CH 更可观,还节省资源,并发更大。楼主这个搜索场景还需要考虑并发数,CH 的并发成本比 mysql 高了几个量级。物化视图只是 MergeTree 套了一层,底层没变
    oneisall8955
        33
    oneisall8955  
       31 天前
    es 前缀匹配完美符合切合你的需求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5396 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:44 · PVG 14:44 · LAX 23:44 · JFK 02:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.