首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库切分与分区

数据库切分与分区
EN

Stack Overflow用户
提问于 2013-12-25 09:54:25
回答 7查看 141.2K关注 0票数 308

最近我读到了一些关于可伸缩架构的文章。在这种情况下,在数据库中不断出现的两个单词是切分和分区。我查了一下描述,但最后还是很困惑。

堆栈溢出公司的专家能帮我掌握基本知识吗?

  • 切分和分区有什么区别?
  • “所有的切分数据库本质上都是分区的(在不同的节点上),但所有分区的数据库不一定都是切分的”,这是真的吗?
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-12-25 12:22:12

分区更像是跨表或数据库划分数据的通用术语。分片是一种特定的分区类型,也是所谓水平分区的一部分。

在这里,您可以跨(通常)多个实例或服务器复制模式,使用某种逻辑或标识符来知道要查找数据的实例或服务器。这类标识符通常称为"Shard键“。

一个常见的、没有键的逻辑是使用字母表来划分数据.are是实例1,E是实例2等等。客户数据非常适合这一点,但是如果分区没有考虑到某些字母比其他字母更常见的话,那么跨实例的大小就会出现一些错误。

另一种常见的技术是使用密钥同步系统或逻辑,以确保跨实例的唯一密钥。

您可以研究的一个众所周知的例子是Instagram如何在早期解决它们的分区问题(参见下面的链接)。他们一开始在很少的服务器上进行分区,使用Postgres将数据从入门服务器中分割出来。我相信那几个物理碎片上有几千个逻辑碎片。阅读他们2012年的精彩文章:Instagram工程-分片&ID

也见这里:http://www.quora.com/Whats-the-difference-between-sharding-and-partition

票数 247
EN

Stack Overflow用户

发布于 2016-09-09 13:53:24

我也一直在研究这个问题,虽然我是目前为止在这个问题上的参考,但我收集到的一些关键事实和我想要分享的观点是:

分区是将逻辑数据库或其组成元素划分为不同的独立部分。数据库分区通常是出于可管理性、性能或可用性的原因,例如负载平衡。

(数据库)

切分是一种分区类型,例如水平分区 (HP)

还有垂直分区 (VP),您可以将表分割成更小的不同部分。规范化还涉及跨表的列拆分,但垂直分区超出了这一范围,即使已经规范化的情况下也会对列进行分区。

(建筑)

我非常喜欢Tony在Quora上的回答,他让您从模式(而不是列和行)的角度进行思考。他说..。

水平分区”,即分片,是复制模式,然后根据碎片键对数据进行分割。

垂直分区”涉及到对模式的划分(并且数据是顺其自然的)。

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

Oracle的数据库分区指南有一些不错的数字。我抄写了这篇文章的几个节选。

01/server.111/b 32024/partion.htm

何时划分表

以下是关于何时对表进行分区的一些建议:

  • 大于2GB的表应始终被视为分区的候选表。
  • 包含历史数据的表,其中新数据被添加到最新的分区中。一个典型的例子是一个历史表,其中只有当前月份的数据是可更新的,其余的11个月是只读的。
  • 当表的内容需要跨不同类型的存储设备分发时。

分区剪枝

分区剪枝是使用分区提高性能的最简单也是最重要的方法。分区剪枝通常可以将查询性能提高几个数量级。例如,假设应用程序包含包含订单历史记录的orders表,并且该表已按周进行分区。请求一周订单的查询只能访问orders表的单个分区。如果Orders表有2年的历史数据,那么这个查询将访问一个分区,而不是104个分区。由于分区的剪枝,此查询可能执行速度可能快100倍。

分区策略

  • 范围
  • 哈希
  • 列表

你可以阅读他们的文字,并可视化他们的图像,这很好地解释了一切。

最后,重要的是要理解数据库是极其资源密集的:

  • CPU
  • 磁盘
  • I/O
  • 内存

许多DBA将在同一台机器上进行分区,其中分区将共享所有资源,但通过拆分数据和/或索引来改进磁盘和I/O。

虽然其他策略将采用“共享无”架构,其中碎片将驻留在单独和不同的计算单元(节点)上,拥有100%的CPU、磁盘、I/O和内存。提供自己的优势和复杂性。

建筑

票数 73
EN

Stack Overflow用户

发布于 2013-12-25 12:34:23

看起来这回答了你们的两个问题:

水平分区按行拆分一个或多个表,通常在架构和数据库服务器的单个实例中。它可以通过减少索引大小(从而减少搜索工作量)提供一种优势,前提是有一些明显的、健壮的、隐式的方法来识别将在哪个表中找到特定行,而无需首先搜索索引,例如,“CustomersEast”和“CustomersWest”表的经典示例,其中它们的邮政编码已经指示将在何处找到它们。 切分超越了这一点:它以同样的方式对有问题的表进行分区,但是它可以在模式的多个实例中这样做。明显的优点是,大型分区表的搜索负载现在可以跨多个服务器(逻辑或物理),而不仅仅是同一逻辑服务器上的多个索引。

资料来源:维基碎片.

分片是跨多台机器存储数据记录的过程,也是MongoDB满足数据增长需求的方法。随着数据大小的增加,一台机器可能不足以存储数据,也不足以提供可接受的读写吞吐量。分片解决了水平缩放的问题。通过分片,您可以添加更多的机器来支持数据增长和读写操作的需求。

资料来源:MongoDB.

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20771435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档