关于分库分表的一点疑惑

2 天前
 irisdev
平时做的项目都比较小,一般都是几台应用服务器+几台数据库服务器,虽然也有数据库拆分,但基本上都是把不同业务的表放在不同库中,比如一个 erp 系统,将财务相关的表放在某台服务器的某个库中,将仓库相关的表放在某台服务器的某个库中,没有拆分到更细的颗粒度,比如物料表,快上亿条数据了,也没有将这一张表拆分成不同表或者到不同库中。

目前即使是这样也给写代码带来了一些麻烦,比如我负责生产模块,但是有时候要查一些物料数据,这时候就不可避免地要跨库查数据,这样我还可以理解。但是如果有一天物料表要拆分成两张表或者到两个库中,那我写 sql 时岂不是要一样的语句写两遍然后 union 一下了?联想到那些大厂,比如淘宝,所有用户的“足迹”,就是浏览记录,至少得有百亿条数据了吧?这种业务是怎么处理的呢...应用服务器我可以理解,可以 cdn ,可以负载均衡,反正运行的是一套代码。但是数据库我就理解不了了,就算是一个简单的查询,“根据用户得到下单记录”,那也得全表查询吧?难不成这张订单表是单表?不现实。如果这张订单表被拆过,那淘宝的程序员在写代码的时候要考虑各个子库各个子表的情况吗?那不得累死。还是说“数据库集群”(只听过没概念...)可以像服务器集群一样屏蔽连接,程序员写代码就好了?不过在我理解中,服务器集群部署的是代码,转发到哪一台都可以,数据库集群里面的数据都是不一样的,那如果要屏蔽细节提供跟单体数据库一样的服务,内部肯定也通过网络通信然后统一提供给用户,这样感觉会不会对效率也有影响?感觉这些大公司的应用速度还是很快的,尤其是拼多多,感觉查订单记录就跟查几万几十万的表一样。

因为这块懂得太少,表达地比较乱,也没法专业地表达,见谅..但意思应该表达出来了,这个疑问困扰我很久了,有没有明白的说两句,感谢
3602 次点击
所在节点    数据库
48 条回复
pangzipp
1 天前
建议看下 mongodb 的 sharding 方案。
antipro
1 天前
数据库也可以上集群,出钱就行,统一存储,全闪存。
irisdev
1 天前
我找到了一篇相当不错的文章解决了部分疑问: https://tech.meituan.com/2016/11/18/dianping-order-db-sharding.html
night98
1 天前
现代分布式数据库已经实现你说的那些了,基本上可以直接当作单体数据库来用,除了查询的时候有些时候有一点小坑外,其他的和单体数据库区别已经不大了,所谓的分库分表基本上可以说是时代的眼泪了,再学习的意义不大,除了面试拿来吹牛有点用
areless
1 天前
最简单的做法就是主键取模分表。基本上也能撑。但是 like 得用 ES 。基本这样也能撑。现在有更好得方案,可是还是以前的好理解,现在应该不再解释这些原理了,直接上操作就可以了。
huzhizhao
1 天前
其实 如果你是 MySQL 或者 pg sql
普通的业务,我理解做分区已经非常够用了。
chutianyao
23 小时 27 分钟前
@promiser3d 反正我们遇到好几次了,还查不到原因, 差点把订单系统搞挂,是不敢在核心系统使用了
promiser3d
16 小时 54 分钟前
@chutianyao 那你们现在是用的 mysql + 中间件的方案?

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

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

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

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

© 2021 V2EX