如何处理大规模数据集

3

最近我在阅读关于在MySQL数据库中管理大型数据集的不同方法。

说实话,目前我很困惑。我阅读了一些有关这个问题的概念,但我不知道它们彼此之间的关系。

请看以下内容:

  • 分区 - 这是一个插件
  • 集群 - 我猜是名为NDB的集群
  • 分片 - 这是一个概念,我认为并没有可实现性

场景是在MySQL中存储/维护/检索大量数据(假设一个具有50亿行的表)。那么我们该如何拆分这个数据集?

我有几个问题:

  1. 上述三个项目之间有多少重叠部分?
  2. 在分区中,所有部分都会存储在同一台机器(服务器)上吗?还是可以保存在不同的机器上?
  3. 如何检测数据存储在哪个分区?(以便相应地查找数据)
  4. 我知道分区是针对“表”的,那么集群是针对“数据库”的吗?
  5. 通过分片,我们在不同的服务器上复制数据,还是在不同的服务器上有不同的数据?它发生在“表”层还是“数据库”层?
  6. 当我们需要对整个表执行join子句时,不同部分(集群/分区)如何相互查看? 假设数据在不同的分区/机器中。
  7. 使用集群,我需要安装MySQL的不同版本吗? 它不支持普通版本吗?

总之,我已经阅读了3天,主要的概念仍然很模糊。


仅供参考,关于“购买 vs 发明”的内容,请访问 https://www.singlestore.com/comparisons/mysql - Svyatoslav Danyliv
这个问题有很多“专注”的问题(和很多误解); 我投票重新开放。 - Rick James
问题归结为“比较和对比”分区、聚类和分片。然后提供了一些需要讨论的方面。 - Rick James
聚类可通过NDB或Galera实现。最好在两者之间进行划分。分区已集成到InnoDB中。如果要进一步讨论您的5B行表格,请发起一个新问题并解释您拥有的数据类型(数据仓库、时间序列、传感器数据、位置跟踪等),我们可以“专注”于为您的数据找到最佳解决方案。 - Rick James
是的,您可以混合和匹配这三个概念,也许以任何组合方式。但通常,一个应用程序不需要超过一种技术。 - Rick James
我看到了@RickJames.. 谢谢您的解释。 - stack
1个回答

1

一个快速比较:

描述 服务器数量 冗余? 目标
分区 1 时间序列
集群 >= 3 恢复
分片 >1 写扩展

分片是将数据分散在多个服务器上。

  1. 以上三项之间有多少重叠?

A: 非常少,每个部分为不同的目标以不同的方式分配数据。

  1. 在分区中,所有部分都会存储在同一台机器(服务器)上吗?还是它们可以保存在不同的机器上?

A: 在分区中,所有部分都将存储在同一台机器(服务器)的同一实例中。

  1. 如何检测存储在哪个分区中的数据?

A: 当可行时,提供一个WHERE子句,以确定需要哪个分区(参见“分区修剪”)。

  1. 我知道分区是针对“表”的,那么聚集是针对“数据库”的吗?

A:我认为你可以这样描述。聚集还具有在不同硬件上具有第二份副本的优点。

  1. 通过分片,我们在不同的服务器复制数据,还是在不同的服务器上有不同的数据?此外,这发生在“表”层还是“数据库”层?

问题6:当我们需要在整个表上使用联接条件时,不同部分(集群/分区)将如何相互查看?假设数据被分成不同的分区/机器。

回答:一个 JOIN 只在一个服务器上运行。(MariaDB 有“FEDERATEDX”,但这是一种昂贵的解决方法。)对于分区,查询将多个分区视为一个大表,因此 JOIN 不是问题。对于集群,所有内容都在每个服务器上,因此也不是问题。对于分片,可以在只有大表的一部分的情况下进行。顺便说一下:阅读这篇文章:如何处理涉及多个方面的问题


分别是硬盘数据世界中的无RAID、RAID1和RAID0。 - Flash Thunder
我对这里的一些答案有异议,但需要更多的回复空间来进行回应。 - Rick James
@RickJames:你可以(由我)编辑我的“答案”,因为我知道它不完整。 - Luuk
1
@Luuk - 谢谢,已完成。 - Rick James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接