提到数据库的sharding,你可能会了解mysql的做法: http://www.uml.org.cn/sjjm/201211212.asp
下面介绍另一种依靠规则来解决此类问题。
我的想法是, 通过合理的规划, 在3.0初期, 就是用bigint, 具体方案如下:
1. 维护一个全局的DB-schema文档.
2.每个DB一个编号, 格式为3位十进制,
例如 BusinessPlatform:100 xTrans2ZTC:101
整体容量为 900 个DB (我们系统的DB数量应该不会超过这个数字吧)
3.DB内部, 每个Table一个编号, 格式为4位十进制,
例如 dbo.opt_Order:1000 dbo.opt_Waybill:1001
整体容量为9000个table, 相同的DB内部table编号不可重复
4. 每个Table的主键采用 DB编号+table编号+11位十进制
11位十进制的容量 00000000000—99999999999
也是每个表可以有一千亿的容量
以上只是管理运作方案,维护成本比较小, 达到的目的是DB性能和数据可移植性.
具体技术实现如下:
1. Mssql2012新特性 支持sequence, 可以为每个必要的表建立对应的sequence (有些历史数据表作为数据存档 没必要建立sequence)
参考: http://www.cnblogs.com/CareySon/archive/2012/03/12/2391581.html
2.Mysql sequence实现, 参考
http://blog.youkuaiyun.com/crazylaa/article/details/5368447
3.Oracle sequence 参考
http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html
比如说 当前 DB:105, Table: 1045
那么sequence的initvalue就是 105104500000000000, increment是1, 以此类推.
请大家考虑这种方案的可行性和维护成本, 谢谢!