数据库分片与分区

 kei_herme 发布于 2023-02-08 11:17

我最近一直在阅读有关可扩展架构的文章.在这种情况下,继续显示wrt数据库的两个词是分片分区.我搜索了关于搜索引擎,维基百科和stackoverflow的描述,但最终仍然感到困惑.

stackoverflow的专家能帮助我掌握基础知识吗?

分片分区有什么区别?

"所有分片数据库是否基本上都是分区的(在不同的节点上),但所有分区数据库都不一定是分片的"是真的吗?

Canis.. 93

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

请参阅此处:http://www.quora.com/Whats-the-difference-between-sharding-and-partition

3 个回答
  • 分区更像是在表或数据库之间划分数据的通用术语.分片是一种特定类型的分区,即水平分区.

    请参阅此处:http://www.quora.com/Whats-the-difference-between-sharding-and-partition

    2023-02-08 11:19 回答
  • 我也一直在深入研究这个问题,虽然我到目前为止已经提到了这个问题,但我收集的关键事实很少,并且我想分享这些事实:

    分区是一个逻辑数据库或它的组成元件分成不同的部分独立的一个部门.由于负载平衡,数据库分区通常是出于可管理性,性能或可用性原因而完成的.

    https://en.wikipedia.org/wiki/Partition_(database)

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

    还有垂直分区(VP),您可以将表拆分为较小的不同部分.规范化还涉及在表之间拆分列,但垂直分区超出了这一范围,即使已经规范化,也会对列进行分区.

    https://en.wikipedia.org/wiki/Shard_(database_architecture)

    我非常喜欢Tony Baco对Quora的回答,他让你在模式(而不是列和行)方面思考.他说......

    " 水平分区 "或分片正在复制[复制]模式,然后根据分片键分割数据.

    " 垂直分区 "涉及划分模式(并且数据随之进行).

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

    Oracle的数据库分区指南有一些很好的数字.我从文章中复制了一些摘录.

    https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

    何时分区表

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

    应始终将大于2 GB的表视为分区的候选对象.

    包含历史数据的表,其中新数据被添加到最新分区中.一个典型的例子是历史表,其中只有当前月份的数据是可更新的,而其他11个月是只读的.

    当表的内容需要分布在不同类型的存储设备上时.

    分区修剪

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

    分区策略

    范围

    哈希

    名单

    您可以阅读他们的文本并可视化他们的图像,这些图像可以很好地解释

    最后,重要的是要了解数据库是非常耗费资源的:

    中央处理器

    磁盘

    I/O

    记忆

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

    而其他策略将采用"无共享"架构,其中分片将驻留在独立且不同的计算单元(节点)上,具有100%的CPU,磁盘,I/O和内存.提供自己的一系列优势和复杂性.

    https://en.wikipedia.org/wiki/Shared_nothing_architecture

    2023-02-08 11:20 回答
  • 看起来这样可以回答您的问题:

    水平分区按行拆分一个或多个表,通常在模式和数据库服务器的单个实例中.它可以通过减少索引大小(以及搜索工作量)提供优势,前提是有一些明显的,健壮的,隐式的方法来识别将在哪个表中找到特定行,而不需要首先搜索索引,例如经典'CustomersEast'和'CustomersWest'表的示例,其中的邮政编码已经指明了它们的位置.

    分片超出了这个范围:它以相同的方式对有问题的表进行分区,但是它可以在可能的多个模式实例中进行分区.显而易见的优点是,现在可以跨多个服务器(逻辑或物理)分割大型分区表的搜索负载,而不仅仅是同一逻辑服务器上的多个索引.

    资料来源:Wiki-Shard.

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

    资料来源:MongoDB.

    2023-02-08 11:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有