最近我读到了一些关于可伸缩架构的文章。在这种情况下,在数据库中不断出现的两个单词是切分和分区。我查了一下描述,但最后还是很困惑。
堆栈溢出公司的专家能帮我掌握基本知识吗?
发布于 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
发布于 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
何时划分表
以下是关于何时对表进行分区的一些建议:
分区剪枝
分区剪枝是使用分区提高性能的最简单也是最重要的方法。分区剪枝通常可以将查询性能提高几个数量级。例如,假设应用程序包含包含订单历史记录的orders表,并且该表已按周进行分区。请求一周订单的查询只能访问orders表的单个分区。如果Orders表有2年的历史数据,那么这个查询将访问一个分区,而不是104个分区。由于分区的剪枝,此查询可能执行速度可能快100倍。
分区策略
你可以阅读他们的文字,并可视化他们的图像,这很好地解释了一切。
最后,重要的是要理解数据库是极其资源密集的:
许多DBA将在同一台机器上进行分区,其中分区将共享所有资源,但通过拆分数据和/或索引来改进磁盘和I/O。
虽然其他策略将采用“共享无”架构,其中碎片将驻留在单独和不同的计算单元(节点)上,拥有100%的CPU、磁盘、I/O和内存。提供自己的优势和复杂性。
发布于 2013-12-25 12:34:23
看起来这回答了你们的两个问题:
水平分区按行拆分一个或多个表,通常在架构和数据库服务器的单个实例中。它可以通过减少索引大小(从而减少搜索工作量)提供一种优势,前提是有一些明显的、健壮的、隐式的方法来识别将在哪个表中找到特定行,而无需首先搜索索引,例如,“CustomersEast”和“CustomersWest”表的经典示例,其中它们的邮政编码已经指示将在何处找到它们。 切分超越了这一点:它以同样的方式对有问题的表进行分区,但是它可以在模式的多个实例中这样做。明显的优点是,大型分区表的搜索负载现在可以跨多个服务器(逻辑或物理),而不仅仅是同一逻辑服务器上的多个索引。
资料来源:维基碎片.
分片是跨多台机器存储数据记录的过程,也是MongoDB满足数据增长需求的方法。随着数据大小的增加,一台机器可能不足以存储数据,也不足以提供可接受的读写吞吐量。分片解决了水平缩放的问题。通过分片,您可以添加更多的机器来支持数据增长和读写操作的需求。
资料来源:MongoDB.
https://stackoverflow.com/questions/20771435
复制相似问题