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