彭于晏们 , 我来套一个数据库的选型方案

2021-08-12 00:14:46 +08:00
 changdy

我想把现有 ERP 系统的查询功能进行优化

目前的情况是有 4 张主表, 每张表大概有 1500w 条数据 ,每天大概增加 3w 条数据, 每张表都有 100 多个字段,其中不乏有 varchar(200)这种字符串.

查询时 4 张表还会进行 join,算上其他表总的关联表大概有 10 张左右.并且查询条件也比较多变,聚合索引难以覆盖所有场景,但一般会基于一个时间段再搭配其他三四个灵活的字段进行查询.

目前的想法是把这几张表的数据进行聚合,筛选出比较重要的字段(大概有 70 个)单独存放到一个数据库中 , 以下是我的一些需求

目前是把数据放到了 MongoDB ,加上索引后大概占了 20GB 左右,查询效率一般, 所以想知道对于我这种场景有没有比 MongoDB 更合适的数据库, PostgreSQL ClickHouse Cassandra ?

3851 次点击
所在节点    数据库
35 条回复
sytnishizuiai
2021-08-12 21:31:26 +08:00
我的人生中超过 2 30 个的都没见过。。。学习了、、、
zibber
2021-08-12 22:44:20 +08:00
1. 如果有关联查询, 写入到 es 的数据按需要重新整合, es 关联查询性能不行
2. 还有一个更简单的方式, 买阿里云的 analyticd, 同步一份, 多核大内存硬查, 选个 16c, 32c 绝对够用
jwangkun
2021-08-13 09:37:19 +08:00
ClickHouse
zlo309618100
2021-08-13 09:59:48 +08:00
塞到 es 的一个索引里面,然后用主表的 id 作为 documentid.
然后所有的查询打到 es,查出 id 之后再去数据库里面拉
这样就把问题从条件查询转为 id 查询。
不过有坑的点是,es 是 real time,刚插入的数据不能在 100ms 级查出来。
strict
2021-08-13 16:13:10 +08:00
当然是 clickhouse

- 首要的是查询效率高,能满足多变的组合查询条件
> clickhouse 支持超多内置函数&自定义函数

基本上只做即时查询 ,没有对数据进行二次挖掘和处理
> 计算速度快

其余条件
> 全都满足
Brentwans
2021-08-13 19:09:40 +08:00
4 张 1kw 的表之间还要 join ? n 比 n 的 join 吗?
changdy
2021-08-14 13:05:55 +08:00
@Brentwans 不是 1 对 2,3 这种. 也有点类似于垂直分表了
changdy
2021-08-14 13:17:16 +08:00
这个查询既有实时性要求 同时也不能把查询范围定的太死,
但是对于时间范围较大的查询,基本上不做聚合操作, 过滤后的数据基本上只有五六条
@encro
changdy
2021-08-14 13:20:25 +08:00
@wangyzj
@JKeita
@windyboy
请问下 我并不需要 es 的分词检索 , 这种情况 es 的性能会比其他数据库的查询性能更高吗?
changdy
2021-08-14 13:24:30 +08:00
@nekoneko 嗯 正在考虑用 shardingsphere 实现分区分表 .不过 redis 就不太行了 单纯的 key value .涉及到条件查询还需要加载到内存中过滤
encro
2021-08-14 17:27:11 +08:00
同等配置下,es 性能不会比 mysql 高,预热过后加载到内存中的 es 才性能高。

es 性能高的主要原理是:
1,index 分区;
2,内存预热;
3,搜索引擎倒排索引;

欢迎补充。
waytodelay
2021-08-14 20:52:17 +08:00
@encro ES 有什么学习资料推荐吗?最近想学习这个
encro
2021-08-15 09:42:22 +08:00
@waytodelay

官方文档,没记错有中文的。

补充 es 性能高还有一点当然是:
容易集群;
encro
2021-08-17 09:18:26 +08:00
按日期查询,
那么 ES 比较合适的一种选择吧,
可以按年月建立 index,然后查询。

不过,ERP 一般都是依赖数据库,通过触发器,物理视图,统计表之类的提高查询性能。
whajcf
2021-08-18 13:58:10 +08:00
ClickHouse 慎用, 出现错误数据时删除特别麻烦, 现在云版报表模块咬牙改数据, 本地版已经拉出分支来在换库实现 ...

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

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

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

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

© 2021 V2EX