我也一直在深入研究这个问题,虽然我到目前为止已经提到了这个问题,但我收集的关键事实很少,并且我想分享这些事实:
分区是逻辑数据库或其组成元素划分为不同的独立部分。 由于负载平衡,数据库分区通常是出于可管理性,性能或可用性原因而完成的。
[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]