在数据飞速增长的互联网科技发展的今天,数据存储除了用oracle,ibm,emc....等提供的商业解决方案。开源的关系型数据库分布式解决方案并不太完备。任何一个商业的分布式解决方案都是需要高昂的代价,动则就几百W。
应对一般企业的数据存储,根据以往开发的经验要想快速实现一套分布式关系型数据存储方案并非不可能。基于对java开发的熟悉,可以采用java中间件(自已构造)+shell脚本+mysql库
如果你在关系型数据库存储方面因数据量问题遇到了瓶颈可以大胆尝试下。
自已动手实现数据存储mysql分片,约定不可破坏的规则:
1,所有的表结构设计必须要有id字段,所有的id字段必须是guid。保证唯一性(不可设计带有自增ID的表结构)。
2,数据同步依赖于mysql的主从同步,mysql的主从同步是一个完备的解决方案,这点在开源上是可靠的(选用mysql被oracle收购前的稳定发行版本)
3,mysql主从同步的同时需要一个failover机制当master down机,slave要自动接管master
4,java中间件的所有CRUD均针对注册节点的master
5,java中间件要实现hash一致性算法,对写入数据均匀分配到mysql注册的master节点上。
6,java中间件查询要实现全局查询,所有master节点结果合并
7,update与delete要保证真正存数据的节点生效。
8,shell脚本负责mysql心跳检测 java中间件对于mysql master节点的状态共享需要一个cache
9,新增节点数据均衡负载,可在中间件实现
java中间件以jar包形式被app方依赖可最大程度减少网络通信
监控部分,对于整个集群方案的监控可由java中间件上报集群节点的状态
抛砖引玉,如需实现整个解决方案,还要克服代码上的困难,但我坚信一定是可以实现的(在开源的基础上实现非常easy)。未必是最好的,但它是一套可行的解决方案,最主要的它是廉价的