信息平台数据库主键中心化设计方案

本文介绍了一种通过合理规划解决数据库分片问题的方法,包括全局DB-schema文档管理、DB和Table编号分配以及利用MSSQL、MySQL、Oracle的sequence特性实现自动ID生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提到数据库的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, 以此类推.

请大家考虑这种方案的可行性和维护成本, 谢谢!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值