【发布时间】:2014-04-06 16:06:24
【问题描述】:
当前设计
以前我的同事设计了一个数据库,其中包含诸如 customer_0、customer_1.... 到 customer_9 之类的表,其中所有客户 ID 根据 ID 的最后一位数字分为 10 个不同的表。
这种设计的问题:
- 我认为这不是标准做法
- 要处理它,您始终必须将查询创建为字符串,无论是在存储过程中还是在代码中,您传入 id 并在运行时创建查询,提取 id 的最后一位数字,然后选择表查询。
- 要应用外键约束,您需要以相同的方式拆分引用的表(我不会在这里使用术语分区,因为这种类型的拆分不是分区),即使它们不打算存储大量数据,例如customer_sales 表也必须分成 10 个部分,因为您必须应用外键约束。 (客户与 custoemr_sales 具有一对多关系)
我的设计
在寻找解决方法时,我知道您可以进行表分区,这完全解决了我的问题。参考this问题。
分区方法的问题
现在这种方法的问题是分区中无论如何都不能有外键约束,所以这并不能解决问题。
数据库分片或“无共享”
然后我遇到了这个问题,您在其中使用模式复制,我理解的是在不同的物理位置复制模式,因此根据特定的分片键查询相应的模式。
我的问题
现在该怎么办,放不下外键约束,选择表分区。 我是否应该放弃所有的分区和分片,只关注常规模式,而将分片部分留给 DBA?
注意:最大预期客户群为 1000 万。
【问题讨论】:
-
听起来不一定是“大数据”情况。您在单表配置中遇到任何问题吗?
标签: mysql database-design sharding database-partitioning