17|分片(一):如何选择最适合的水平分片方式?
该思维导图由 AI 生成,仅供参考
分片策略讨论与梳理
- 深入了解
- 翻译
- 解释
- 总结
水平分片是解决分布式系统中数据存储和性能瓶颈问题的重要技术之一。本文从数据划分和数据平衡两个维度讨论了水平分片策略。数据划分主要有基于模运算和基于范围划分两种方式,其中基于范围划分又分为基于关键词划分和基于关键词的 Hash 值划分。基于关键词划分保留了数据的顺序性,便于区间查询,但可能导致数据分布不均匀和访问热度不均匀的问题。而基于关键词的 Hash 值划分通过 Hash 运算解决了数据分布和访问热度不均匀的问题,但失去了关键词的顺序性。水平分片技术的选择对于构建和运维大规模无状态的分布式系统具有重要意义。 根据数据分片是否支持动态的分裂与合并,水平分片的数据平衡方式可分为静态分片和动态分片。静态分片在系统设计之初确定数据分片的数目和区间,而动态分片可以在运行时根据分片的负载和容量做调整。动态分片与基于关键词的划分是一个比较好的组合方式,避免了基于关键词划分的问题,还保留了数据基于关键词有序的优点。但是,基于关键词的划分可能导致访问冷热不均匀的问题,而基于关键词的 Hash 值划分则可以很好地解决这个问题。 总而言之,水平分片策略的选择应基于业务特点,清晰地选择适合的策略。文章还对常见的数据划分策略和动态、静态的数据平衡策略进行了讨论,分析了它们的优缺点和应用场景。水平分片技术的全面总结和对比有助于读者深入理解分布式技术的应用和实践。
《深入浅出分布式技术原理》,新⼈⾸单¥59
全部留言(12)
- 最新
- 精选
- 言十年基于关键词的划分中,基于自增 ID 或者时间戳等原因,导致的访问冷热不均匀的问题。为什么会导致冷热不均呢?
作者回复: 一般来说,最新的数据,访问热度最高,比如三年前的朋友圈、新闻、评论、消息是很少有人访问的,但是最新的新闻等访问的人就越多了,自增 ID 或者时间戳会让最新的数据在最新的分片中。
2022-03-176 - shuff1e在极端情况下,如果一个关键词的访问热度非常大,我们有什么办法对这个关键词进行负载均衡呢? --- 可以对该关键词进行逻辑上的再划分。 比如"你好"这个key, 可以分成"你好_1","你好_2",...“你好10”等10个逻辑key
作者回复: 是的,非常对! 不过这个也是有代价的,在更新的时候,需要保持多个副本的一致性(这个看业务需求来决定一致性级别)
2022-03-0924 - 言十年#思考题#在极端情况下,如果一个关键词的访问热度非常大,我们有什么办法对这个关键词进行负载均衡呢? 多级缓存?考虑程序内存缓存、文件缓存或者其他方式
作者回复: 对的,多级缓存的思路不错,不过写操作要注意多级缓存的一致性
2022-03-172 - 言十年有没有动态分片的具体应用案例?或者技术?
作者回复: 最近的分布式数据库几乎都是采用动态分片策略的,比如spanner、tidb等,单独就动态分片来说,技术上不难,按一定的大小分裂和合并就行了,难的是基于分片之上的操作,比如事务、性能优化等
2022-03-171 - sunnywhy在极端情况下,如果一个关键词的访问热度非常大,是不是可以考虑再加一个别的纬度来进行细分?
作者回复: 是的,这是思路是对的,不过由于只有一个关键词,增加维度对于关键词不能划分了,不过可以给关键词复制的“替身”
2022-03-1021 - 小虎子🐯老师讲得很清晰,点赞👍
作者回复: 哈哈,多谢~
2022-03-091 - 和光同尘实际业务场景复杂,按照ID取模进行分表之后会导致数据严重倾斜,单个用户的数据量因为查询和排序条件复杂又没法再分裂,一直没想到这种场景如何处理,目前还只存了近三个月的数据。
作者回复: 如果是分表的话,数据倾斜没有太好的办法,查询的话,可以通过其他的键再分片存储一份索引数据,不过也不是很好的办法。 我们当时是选择 NewSQL 了
2022-04-102 - 宇智波鼬增加冗余数据?针对热点数据
作者回复: 是的👍
2022-04-02 - peter请教老师两个问题: Q1:动态分片没有讲具体的方法,不需要讲吗? 或者,动态分片就是增加一个新的节点并把数据拷贝到新节点上,所以不用讲吗? Q2:峰值同时在线人数这个指标有意义吗? 在“期中测评:IM系统设计中”,有一个指标是“峰值同时在线人数”,这个指标很重要吗?一般都是说并发数量,峰值同时在线人数会占用系统很多资源吗?
作者回复: Q1:课程中的描述:“动态分片,因为在运行时,分片区间是可以进行分裂和合并的”。 Q2:对于IM系统来说,峰值在线人数就是长连接的最大并发数。
2022-03-09 - Hello关键词hash值划分和模运算有什么区别?hash以后不是也要取模?老师,能否举个例子帮助理解下。2022-05-081