淘客熙熙

主题:【原创】好吧,给一个铁道部订票系统的正确答案 -- 布老虎

共:💬185 🌺732 🌵9 新:
全看分页树展 · 主题 跟帖
家园 表分区(分表)的主要目的是为了降低查询负载

尤其是可以有效降低全表扫描的查询负载。在有索引的条件下,这个查询负载降低不明显。

写操作的问题是,竞争+并发,一个事务提交会导致其它事务重做或者回滚。用一个粗略的方法计算,假设有10个事务竞争一行数据,假设他们全部能成功提交,那么,并行事务(假设到所有事务在最终提交前发生回滚)最终耗费的运算资源是10+9+8+7+6+5+4+3+2+1=45;如果这10个事务是串行提交的话,那么耗费资源是1+1+1+1+1+1+1+1+1+1=10。

由于大量的数据库连接资源被浪费到回滚上。数据库连接池会被迅速耗尽。最终导致读数据连接也无法接入

春运的时候竞争只会比这个强。

无论分多少个表,对于同一行的竞争是无法规避的。现代数据库对资源的锁定都是按照行来的(行锁),并且写不会阻塞读。分表(分区)对于写竞争改善不大。

如果写操作对资源的锁定是按照表来的话,那么你的想法非常有意义。不过现代数据库大多不是这样。

核心问题是解决写操作竞争。可以搜索"MVCC"参考一下数据库的并发控制原理。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河