加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

当数据库遇到分布式,你会怎么做?

发布时间:2020-03-08 16:46:45 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 数据库通常有着完善的事务支持,但是局限于单机的存储和性能,于是就出现了各种分布式解决方案。最近读了《Designing Data-Intensive Applications》这本书,所以做一个总结,供大家做个参考,有什么不对的请大家指正,一起讨论。 数据模型 数据

本地索引 文档分区所以,在这种索引方法中,每个分区是完全独立的,每个分区维护自己的二级索引,仅覆盖该分区中的文档。当数据写入时(添加、删除、更新),只需要处理分区内数据的索引更新。数据查询时,则需要将查询发送到所有的分区,并合并所有返回的结果。

这种查询分区数据库的方法有时被称为分散/聚集(scatter/gather),并且可能会是二级索引上的读取查询相当昂贵。即使并行查询分区,已容易导致尾部延迟放大。MongoDB、Cassandra、ElasticSearch、SolrCloud都是使用这种文档分区二级索引。

当数据库遇到分布式,你会怎么做?

全局索引 关键词分区,这种索引方法跟主键分区的方式是一样的。相对于文档分区索引,读取更有效率,不需要分散/聚集所有分区,客户端只需要向包含关键词的分区发出请求。缺点在于写入速度较慢且较为复杂,因为写入单个文档可能会影响索引的多个分区。

理想情况下,索引总是最新的。写入数据库的每个文档都会立即反映在索引中。在基于关键词的全局索引中,这需要跨分区的分布式事务,并不是所有的数据库都支持。在实践中,对全局二级索引的更新通常是异步的。

分区再平衡

随着数据集大小增加、查询吞吐量的增加,需要更多的机器来处理。这些都需要数据和请求从一个节点移动到另一个节点,这一过程称为再平衡(reblancing)。

再平衡通常要满足以下几点要求:

再平衡之后,负载(数据存储、读取和写入请求)应该在集群中的节点之间公平地共享

再平衡发生时,数据库应该继续接受读取和写入

节点之间只移动必须的数据,以便快速再平衡,并减少网络和磁盘I/O负载

平衡策略可以分为几种:固定数量的分区、动态数量的分区和按节点比例分区

固定数量的分区 创建比节点更多的分区,并为每个节点分配多个分区。如果一个节点被添加到集群中,新节点可以从当前每个节点中窃取一些分区,直到分区再次公平分配。ElasticSearch使用这种方式分区策略。

只有分区在节点间移动,分区的数量不会改变,键所对应的分区也不会改变,唯一改变的是分区所在的节点。这种变更不是实时的(网络上传输数据需要时间),传输过程中,原有分区仍然会接手读写请求。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读