Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库分片与分区_Mysql_Sharding_Database Partitioning - Fatal编程技术网

Mysql 数据库分片与分区

Mysql 数据库分片与分区,mysql,sharding,database-partitioning,Mysql,Sharding,Database Partitioning,最近我一直在阅读有关可伸缩架构的文章。在这种情况下,关于数据库不断出现的两个词是切分和分区。我查了一下描述,但还是弄糊涂了 stackoverflow的专家能帮我弄清楚基本知识吗 分片和分区之间的区别是什么 “所有分片数据库本质上都是分区的(在不同的节点上),但所有分区的数据库不一定都是分片的”,这是真的吗 分区更像是在表或数据库之间划分数据的通用术语。分片是一种特定类型的分区,是所谓水平分区的一部分 在这里,您可以跨(通常)多个实例或服务器复制模式,使用某种逻辑或标识符来知道要查找数据的实例

最近我一直在阅读有关可伸缩架构的文章。在这种情况下,关于数据库不断出现的两个词是切分和分区。我查了一下描述,但还是弄糊涂了

stackoverflow的专家能帮我弄清楚基本知识吗

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

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

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

一种常见的无键逻辑是使用字母表划分数据。A-D是实例1,E-G是实例2等。客户数据非常适合于此,但如果分区没有考虑到某些字母比其他字母更常见,则在实例的大小上会有一些错误

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

您可以研究的一个众所周知的例子是Instagram在早期是如何解决分区的(请参见下面的链接)。他们开始时在很少的服务器上进行分区,使用Postgres从一开始就划分数据。我相信那几个物理碎片上有几千个逻辑碎片。在这里阅读他们2012年的精彩作品:


请参见此处:

这似乎回答了您的两个问题:

水平分区通常按行分割一个或多个表 在架构和数据库服务器的单个实例中。可能 通过减少索引大小(从而减少搜索工作量)提供优势 前提是有一些明显的、可靠的、隐含的方法来识别 在哪个表中可以找到特定的行,而不需要首先 搜索索引,例如“CustomerEast”的经典示例 和“CustomerWest”表,它们的邮政编码已经表明 在那里可以找到它们

切分超出了这个范围:它将有问题的表划分为 同样的方法,但它可能跨多个实例执行此操作 模式的一部分。明显的优势是,搜索负载为 大型分区表现在可以跨多个服务器拆分 (逻辑或物理),而不仅仅是同一逻辑上的多个索引 服务器

来源:

分片是跨多个数据库存储数据记录的过程 机器,是MongoDB满足数据需求的方法 成长。随着数据大小的增加,单个机器可能无法访问 足以存储数据,也不能提供可接受的读写 吞吐量切分解决了水平缩放的问题。具有 切分,您可以添加更多的计算机来支持数据增长和需求 读取和写入操作的类型


资料来源:。

我也一直在深入研究这个问题,尽管我是这个问题的参考人,但我收集的关键事实和我想分享的观点很少:

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


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

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

我真的很喜欢Tony Baco在Quora上的回答,他让你从模式(而不是列和行)的角度来思考。他说

水平分区”或分片是复制[复制]模式,然后根据分片键分割数据

垂直分区”涉及到对模式进行分割(并且数据会一直进行下去)

Oracle的数据库分区指南中有一些不错的数据。我从这篇文章中抄了一些摘录

何时对表进行分区

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

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

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

分区策略

  • 射程
  • 散列