一致性哈希--分库分表
2016-12-19 21:52
148 查看
首先了解一下什么是一致性哈希,这里推荐一篇博客:
http://blog.csdn.net/cywosp/article/details/23397179/
分库分表是目前解决单点数据库一种比较流行的做法,也相对成熟,但都有一个共同的问题,就是随着业务的增长,之前的分库分表容量不够了,需要扩容了,这时,使用一致性哈希或者分段哈希(静态哈希+配置规则)可以尽量的减少数据的迁移。这里只谈一谈一致性哈希的做法。
什么时候我们需要利用一致性哈希水平拆分数据库单表呢?
1、当我们拥有一个数据量非常大的单表,比如上亿条数据。
2、不仅数据量巨大,这个单表的访问读写也非常频繁,单机已经无法抗住 I/O 操作。
3、此表无事务性操作,如果涉及分布式事务是相当复杂的事情,在拆分此类表需要异常小心。
4、查询条件单一,对此表的查询更新条件常用的仅有1-2个字段,比如用户表中的用户id或用户名。
最后,这样的拆分也是会带来负面性的,当水平拆分了一个大表,不得不去修改应用程序或者开发db代理层中间件,这样会加大开发周期、难度和系统复杂性。
大众点评实例:http://www.jianshu.com/p/e598a1bf0980
http://blog.csdn.net/cywosp/article/details/23397179/
分库分表是目前解决单点数据库一种比较流行的做法,也相对成熟,但都有一个共同的问题,就是随着业务的增长,之前的分库分表容量不够了,需要扩容了,这时,使用一致性哈希或者分段哈希(静态哈希+配置规则)可以尽量的减少数据的迁移。这里只谈一谈一致性哈希的做法。
什么时候我们需要利用一致性哈希水平拆分数据库单表呢?
1、当我们拥有一个数据量非常大的单表,比如上亿条数据。
2、不仅数据量巨大,这个单表的访问读写也非常频繁,单机已经无法抗住 I/O 操作。
3、此表无事务性操作,如果涉及分布式事务是相当复杂的事情,在拆分此类表需要异常小心。
4、查询条件单一,对此表的查询更新条件常用的仅有1-2个字段,比如用户表中的用户id或用户名。
最后,这样的拆分也是会带来负面性的,当水平拆分了一个大表,不得不去修改应用程序或者开发db代理层中间件,这样会加大开发周期、难度和系统复杂性。
大众点评实例:http://www.jianshu.com/p/e598a1bf0980
相关文章推荐
- 一致性哈希(Consistent Hash)
- 又拍网架构中的分库设计
- 又拍网架构中的分库设计[转自INFOQ]
- memcached分布测试报告(一致性哈希情况下的散列函数选择)[转载]
- 总结一致性哈希(Consistent Hashing)
- 分库分表的设计思路让大系统变简单
- 数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
- 又拍网架构中的数据库分库设计
- 一致性哈希(Consistent Hashing)算法的C++实现
- 数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
- 又拍网架构中的数据库分库设计
- 一致性哈希的替代算法 shard 可反解vsid php版
- 一致性哈希(Consistent Hashing)
- 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
- 数据库水平切分的实现原理解析-分库,分表,主从,集群,负载均衡器
- [转]MYSQL性能优化分享(分库分表)
- 又拍网架构中的分库设计
- 一致性哈希概念与Python的简单实现
- django - 多数据库及分库实现
- 数据库分库分表(sharding)系列(四) 多数据源的事务处理