有几种模式可用于在多个物理表中拆分单个逻辑实体。
垂直分区将一些列放在一个表中,将一些列放在另一个表中。如果需要,可以有多个这样的附加表。所有这些表共享相同的主键。一起使用的列存储在一起,因此一页读取读取所有必需的值。优点是每页有更多行,因此扫描和聚合需要更少的 IO。有时决定哪些列应该放在一起可能很棘手。随着分区数量的增加,每个 INSERT 都会成比例地变得更加昂贵。
水平分区按键范围分割数据。例如,姓氏以 A 到 M 开头的所有用户进入表 User_1,N 到 Z 进入 User_2。应用程序确定在运行时使用哪个子表,通常是通过算法或通过查找,尽管现在大多数 DBMS 将其作为内置功能提供,通过 DDL 实现,对应用程序透明。如果您在数据写入中有热点,这可以分散痛苦。优化器可以从范围扫描中消除整个分区,从而提高响应时间。加载和删除整个分区可能是非常快速的元数据操作。
分片是键范围被移动的地方,不仅仅是移动到不同的表,而是移动到 DBMS 的一个完全不同的实例。应用程序决定连接到哪个实例,具体取决于键范围。这是一种横向扩展技术。一些 DBMS 支持将此作为一项功能,例如用于 MariaDB 的 Galera。显而易见的成本是运行其他实例的额外硬件,跨所有节点复制参考数据以维持 RI 和应用程序复杂性。
当然,这些技术可以组合使用,因此可以对表进行水平和垂直分区。
拆分的一般优点:
缺点包括:
基本上,如果您没有问题,并且没有看到有人来,请不要打扰。使用 DBMS 功能的水平分区是唯一值得考虑作为先发制人措施的方法。即便如此,它也需要重新写入 200GB。你有磁盘和服务窗口来完成这个吗?
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |