一个表设计问题

2020-04-20 09:44:13 +08:00
 mawerss1

业务场景是保存物流动态信息 物流动态目前看一般情况下只会进行 append,不会修改和删除中间的行

问题: 两种建表方式那种更好一点

1. 具体的物流动态用单独的表保存。 比如:
表 A 保存订单 id 和状态
id tid  status

表 B 保存具体物流动态信息
aid content time 

2.物流信息保存在上面的表 a 中和订单状态放在一起,用字符分割,在程序中解析字符串,插入时使用 concat 链接字符串

表 A 中的数据单表大概有 500w 条,如果按第一种方式,假设每个订单平均 5 个动态,就要 2500w 行,按第二种设计方法是否会有问题?
4935 次点击
所在节点    MySQL
30 条回复
index90
2020-04-20 12:37:15 +08:00
@mawerss1 横向扩展是指你需要考虑当一台机器已经无法满足你的容量需求时,在架构上能够扩展的能力。看你的数据量,很快单机就处理不了。例如你可能会将不同订单存储在不同节点上,这时候你需要有一个算法,根据 id 找出对应的存储节点,而同一个订单的 content 都存储在一个节点上,显然查询更友好。
mawerss1
2020-04-20 13:59:39 +08:00
@index90 目前是根据用户 id 来分库的
RJH
2020-04-20 16:34:46 +08:00
我建议选第一个,两张表存储,因为你根本不会知道后续会增加什么维度的查询。

本来简单的表,后面可能会随着功能的迭代,增加越来越多的字段。
fcoolish
2020-04-20 17:24:07 +08:00
反正我选第一个,又不是不会分库分表,然后用缓存索引。
还有数据量大直接从 es 查呗。
jatesun
2020-04-20 17:37:31 +08:00
第一个还用选吗
isleon
2020-04-20 17:43:39 +08:00
第二种的话,后面突然让你加个字段你就欲仙欲死了。
ZoR
2020-04-20 17:47:27 +08:00
第二个后期变更需求,维护会是个灾难
leoskey
2020-04-20 17:54:33 +08:00
如果项目没死,第二种后期维护的确是个不小的问题。
chimw
2020-04-20 18:20:40 +08:00
物流信息可以存在时序数据库中,比如 influxdb
newtype0092
2020-04-20 18:22:14 +08:00
@index90 大佬 MySQL 大概多少数据量时需要考虑横扩呢?

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

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

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

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

© 2021 V2EX