我这个需求 适合用 clickhouse 吗

88 天前
 BuGoooo

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

3217 次点击
所在节点    程序员
33 条回复
8355
87 天前
@root71370 简单来说看看阿里云的价格
Elasticsearch 有 Serverless 版本,可以按照 cu 收费,如果计划任务批量写库实际使用的 cu 很少,系统不是高并发持续访问的话一年不到 1 万就够了。clickhouse 单机起步就是 1 万
dilu
87 天前
“就两个字段一个用户编码(随机的) 一个姓名”

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

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

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

如果只搜后 4 位,重复的概率得多大啊,你一下子就能搜出上万条记录,请问你怎么把这上万甚至几十万的数据展示给用户?
rays
87 天前
你的需求是模糊匹配且是后缀匹配,是要用到 LIKE 和 position 函数,跳数索引是前缀匹配,无法满足你的需求,起不到加速查询的作用。position 是 ClickHouse 自带的字符串查询算法,性能会比 like 要好。但是 ClickHouse 数据库还是更适合列式聚合场景的,你的这种需求,还是不是很推荐使用 ClickHouse ,因为引入一项新技术后并没有带来突破性的提升。
guanhui07
87 天前
搜索需求 最合适还是 es
blessingsi
87 天前
查询流量是多少?
BuGoooo
87 天前
@NotLongNil
编码长度是固定的,32 位的。但是编码是随机的,每次查询的话就是查询开头和结尾是否有匹配的,比如
ABCD****123456 我就查询前面 2 位 AB 和后面 4 位是否有相匹配的编码
BuGoooo
87 天前
@homewORK es 我也倒腾了下,总感觉没对 查起来速度有点慢 不知道是不是我倒腾的没对
BuGoooo
87 天前
@dilu 打错了,就是编码+姓名, 主要是通过匹配编码来找数据
NotLongNil
87 天前
@BuGoooo #26 clickhouse 不适合做这个。上面看到你试验后,发现查询慢。这是正常的,因为 CH 做了全表扫描。CH 的索引跟 mysql 多索引不一样。如果是固定前两位和固定后四位查询,你使用 mysql ,把这两个单独提出来,作为分表键,加索引,查询速度比 ch es 还快,还节省资源
silentsky
87 天前
@NotLongNil clickhouse 物化视图就能做
unclejimao
86 天前
多存两列,prefix 存前两位,做分区字段,不区分大小写的话 1000 多个分区; suffix 存后 4 位,做排序字段;
查询的时候直接 WHERE prefix=? AND suffix=?
NotLongNil
86 天前
@silentsky #30 CH 的 MergeTree 索引结构,只能判断到数据在哪个段,然后将整个段加载到内存,在内存中进行遍历过滤。一个段默认大小有 8000 多行。在这个场景下,做好分表,设置好索引,B+ 树段查询速度反而会比 CH 更可观,还节省资源,并发更大。楼主这个搜索场景还需要考虑并发数,CH 的并发成本比 mysql 高了几个量级。物化视图只是 MergeTree 套了一层,底层没变
oneisall8955
83 天前
es 前缀匹配完美符合切合你的需求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1111791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX