最近,我正在阅读有关管理 MySQL 数据库中庞大数据集的不同方法。
说实话,此刻我很困惑。我阅读了有关上述问题的一些概念,但我不知道它们之间有何关联?
请看看这些:
该场景是在 MySQL 中存储/维护/搜索大量数据(假设有 50 亿行的表)。所以我们必须拆分数据集,但如何拆分?
我有几个问题:
join
子句。假设数据分布在不同的分区/机器中。无论如何,我已经阅读了超过 3 天的内容,主要概念对我来说仍然不明确。
答案 0 :(得分:1)
快速比较:
描述 | 服务器数量 | 冗余? | 一个目标 |
---|---|---|---|
paritioning | 1 | 没有 | 时间序列 |
clustering | >= 3 | 是 | 恢复 |
sharding | >1 | 没有 | 写入缩放 |
分片是在多个服务器之间分配数据。
A:很少。每个人为了不同的目标以不同的方式划分数据。
A:在分区中,所有部分将存储在同一台机器(服务器)上的同一个实例上。
A:在可行的情况下,提供一个 WHERE
子句来指明需要哪些分区。 (参见“分区修剪”)
A:我想你可以这样描述。集群(也)具有在不同硬件上拥有第二个副本的优势。
A:不可以。通常最大的表以某种任意方式拆分——有些行放在每个分片上。然后客户端必须知道如何进行拆分才能知道要与哪个服务器通信。 (这项重要任务没有固定代码。)较小的表要么复制到所有分片上,要么放在其他机器上。
A:JOIN
只在一台服务器上工作。 (MariaDB 有“FEDERATEDX”,但这是一种代价高昂的解决方法。)对于分区,查询将许多分区视为一个大表,因此 JOIN
不是问题。对于集群,一切都在每台服务器上,没问题。因为分片很好在你只有大表的一部分的约束下。