海量数据的数据库存储(Sharding)

出于性能考虑一般推荐一个数据表不要超过10W条记录。
面对海量数据的应用中,记录一般都是E级别统计的。因此我们对其存储必须要做特殊处理。
虽然表分区可以一定程度上的缓解这个问题,但是可扩展性还是不够强。从而引入了Sharding的概念,目前通用作法都是通过程序逻辑进行分表分库存储。


现在,这些重复工作已经有通过的解决方案了。Mysql的HSCALE就是这样一个产品,它是基于MySQL Proxy的一个插件应用,在MySQL proxy的 基础上,在MySQL proxy的层面将上层的请求分配到实际的表上。实际的原理是通过拦截SQL进行替换和服务器重定向再将SQL传递到目标服务器上。它的分表算法可以由自定义的Lua脚本来实现,非常灵活。
而且支持动态增加分区,数据可以自动迁移,这样我们的数据扩容仅仅需要几行配置即可。

其它的Mysql不同维度的扩展应用
MySQL master/slave: master上写,同步到slaver,读的负载均衡到slaver上。适合大量读的情形。因为HSCALE相当是一个黑盒,可能这种模式部署有些困难,或者部署多层MySQL Proxy应该可以。不用那么麻烦,我们其实根据应用逻辑进行不同的分区配置有一定的改善,后面会有相关的digg例子说明。
MySQL cluster: 存储上的高实用、高冗余。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。
MySQL proxy: lua语言实现的中间层,对客户端完全透明,有负载均衡和读写分离功能。

其它和HSCALE类似产品
HiveDB/Hibernate shards所适用的典型场合就是一个海量记录的表,可以根据某个规则分开存到多个相同表结构的数据库服务器上。和HSCALE功能差不多,但HSCALE当前版本对跨服务器DB支持不是很好;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值