数据库选型问题请教各位大佬,大佬们帮帮忙!

2022-08-09 17:25:00 +08:00
 dtgxx
我们要做个系统,最后卡在上层界面展示的数据库存储选型上了。
我们初期用的 es ,因为数据量很大,可能在 20-30 亿,然后要求每个字段都可以模糊匹配,也能做一些统计。
因为 es 不能比较好的关联,所以我们把所有的业务数据,都放在一个很大的 json 中了,就一个表,每个表就存储了很多一模一样数据结构的大 json ,第一阶段这样没啥问题。

但是 2.0 的需求上升了数据维度,举个栗子:
1.0 版本,我们的 json 存储了 班级、人员、喜好 等信息,我们只要通过喜好=xxx 就可以直接查询到 班级、人员、喜好...
2.0 版本,我们想在 es 搜索喜好,但是只想要班级、人员信息,不需要把喜好的数据带出来:
输入 喜好=xxx 输出 班级 A 人员 A 班级 B 人员 B
由于我们所有信息都放在一个 json 里面了,所以会有很多 班级 A 人员 A 喜好 A 班级 A 人员 A 喜好 B ... 这种结构,就不能直接输出 班级 A 人员 A 班级 B 人员 B ,是需要过滤的

而且后面的需求,比如 喜好苹果的人都在哪些班级里面,通过一个大 json 这种格式,就不能直接检索,肯定要在结果去重,而数据量又很大,就存在很多问题。

我也不知道我说没说清楚哈,大致就是这样,所以我们想修改为关系型数据库,但是迫于数据量很大,也有模糊搜索的需求,就不知道该怎么办了。总觉得需求又需要模糊匹配,也需要多表关联。这个场景,一般大家是怎么应对的呢?大佬们帮帮忙~~~
1998 次点击
所在节点    问与答
15 条回复
lingly02
2022-08-09 17:35:23 +08:00
大数据量统计分析,可以看下 ClickHouse. 全文检索方面,还是 ES 占优,可以想办法结合一下。
TimePPT
2022-08-09 17:36:46 +08:00
写入和查询分离,写入时候关系型数据库分库表分字段,es 同步索引。查时候走 es?
yjhatfdu2
2022-08-09 18:51:15 +08:00
clickhouse,模糊匹配用 ngrambf_v1 索引, 性能和灵活性比 es 高太多了。https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#available-types-of-indices
liprais
2022-08-09 18:54:05 +08:00
你不知道用啥就用 pgsql
server
2022-08-09 19:05:18 +08:00
meilisearch
fox0001
2022-08-09 22:51:07 +08:00
感觉不是存储问题,是查询问题。

复杂的查询,我们使用 Solr 解决。Solr 是以文档的形式存储数据,可以实现所有字段都索引。数据关系可以分解成多个表( Solr 称为 core )进行关联。

如果数据太多,考虑用 Hadoop ?但是我不知道现在 Hadoop 现在还流不流行。
kingjpa
2022-08-09 23:25:11 +08:00
留名 学习一下。
misaka19000
2022-08-09 23:46:42 +08:00
es 查询的时候支持 exclude 数据啊
nomagick
2022-08-09 23:49:38 +08:00
你这不是选型的问题,是设计问题,到底有几种实体,实体之间有几种关系,好好梳理抽象一下
kkeep
2022-08-10 08:53:22 +08:00
对,可以 es 查询后提取数据过滤,按 id 去拿实体,配合前端做个去重就行。
jifengg
2022-08-10 09:28:33 +08:00
我支持 @nomagick 的说法,没看出是选型问题。你所说的“大 json”,是字段多,还是有很多数组之类的数据。需求 2.0 ,完全就是 es 没用好,es 可以只返回指定字段。
另外,你应该不会只用 es 而没有用其他关系型数据库吧?
dtgxx
2022-08-10 11:10:03 +08:00
@jifengg #11 是的,只是用了 es ,目前 es 有 100 多个字段,大约有 20 多亿的数据,当时只是做展示,目前需要有多表关联了。。

@kkeep #10 嗯嗯 这个方式打算考虑考虑

@nomagick #9 好的,之前就是整个大 json 存储,其实即使是用关系型数据库,每个表也有非常多条数据,就查不动了

@misaka19000 #8 我们了解一下


@yjhatfdu2 #3 clickhouse 的单独属性检索性能太低了
yjhatfdu2
2022-08-10 13:35:32 +08:00
@dtgxx 每个属性都可以加 skipindex
guangming3055
2022-08-10 14:22:16 +08:00
主要还是看结构设计,规划好了应该没有问题。这边主体数量三亿以上,然后其他关联数据使用 nested 嵌套文档,总共大概四十亿数据,两百多个字段
注意 es 只存需要查询的字段,其他的数据还是通过 id 到数据库取
不过 es 不太支持多对多的情况,还是需要好好设计结构才行
dtgxx
2022-08-10 20:19:41 +08:00
@yjhatfdu2 #13 嗯嗯 之前用感觉性能不行 不知道是不是我用的有问题
@guangming3055 #14 好嘞谢谢,我测试测试

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

https://www.v2ex.com/t/871730

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

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

© 2021 V2EX