返回介绍

6. 分区

发布于 2024-08-24 16:53:17 字数 1557 浏览 0 评论 0 收藏 0

我们必须跳出电脑指令序列的窠臼。 叙述定义、描述元数据、梳理关系,而不是编写过程。 —— Grace Murray Hopper,未来的计算机及其管理(1962)

​ 在 第 5 章 中,我们讨论了复制——即数据在不同节点上的副本,对于非常大的数据集,或非常高的吞吐量,仅仅进行复制是不够的:我们需要将数据进行 分区(partitions) ,也称为 分片(sharding)i

i. 正如本章所讨论的,分区是一种有意将大型数据库分解成小型数据库的方式。它与 网络分区(net splits) 无关,这是节点之间网络中的一种故障类型。我们将在 第 8 章 讨论这些错误。 ↩
术语澄清

​ 上文中的 分区(partition) ,在 MongoDB,Elasticsearch 和 Solr Cloud 中被称为 分片(shard) ,在 HBase 中称之为 区域(Region) ,Bigtable 中则是 表块(tablet) ,Cassandra 和 Riak 中是 虚节点(vnode) , Couchbase 中叫做 虚桶(vBucket) .但是 分区(partition) 是约定俗成的叫法。

​ 通常情况下,每条数据(每条记录,每行或每个文档)属于且仅属于一个分区。有很多方法可以实现这一点,本章将进行深入讨论。实际上,每个分区都是自己的小型数据库,尽管数据库可能支持同时进行多个分区的操作。

​ 分区主要是为了 可扩展性 。不同的分区可以放在不共享集群中的不同节点上(参阅 第二部分 关于 无共享架构 的定义)。因此,大数据集可以分布在多个磁盘上,并且查询负载可以分布在多个处理器上。

​ 对于在单个分区上运行的查询,每个节点可以独立执行对自己的查询,因此可以通过添加更多的节点来扩大查询吞吐量。大型,复杂的查询可能会跨越多个节点并行处理,尽管这也带来了新的困难。

​ 分区数据库在 20 世纪 80 年代由 Teradata 和 NonStop SQL【1】等产品率先推出,最近因为 NoSQL 数据库和基于 Hadoop 的数据仓库重新被关注。有些系统是为事务性工作设计的,有些系统则用于分析(参阅 [事务处理或分析] ):这种差异会影响系统的运作方式,但是分区的基本原理均适用于这两种工作方式。

​ 在本章中,我们将首先介绍分割大型数据集的不同方法,并观察索引如何与分区配合。然后我们将讨论 重新平衡分区 ,如果想要添加或删除群集中的节点,则必须进行再平衡。最后,我们将概述数据库如何将请求路由到正确的分区并执行查询。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文