目前,我确实有一个mysql数据库,并且iam收集的数据每年为5 Terrabyte。我会一直保存数据,我不认为我想过早删除某些内容。
我问自己是否应该使用分布式数据库,因为我的数据每年都会增长。 5年后,我将拥有25个无索引的Terrabyte。 (只是计算出我每天保存的原始数据)

我有5个表,查询最多的是多个表的联接。
而且我需要在特定的时间戳访问多行中的1-2列。

分布式数据库会比单个mysql数据库更受欢迎吗?

分区将很困难,因为我的所有表都连接得很高。

我知道这取决于查询和数据库表设计,我也可以拥有分布式mysql数据库。
我只想知道何时应该考虑分布式数据库。
这将是一个用例吗?还是mysql可以处理这个大数据集?

编辑:


平均而言,我每秒将有1500个客户端写入数据,它们会影响所有表。
我只需要旧的数据集进行分析。像机器学习和
模式匹配。
客户也应该能够看到历史数据

最佳答案

您的问题是关于“分布式”的,但是我看到更严重的问题需要首先回答。

“高索引5TB”将减慢爬网速度。索引是BTree。要向索引添加新行,则意味着将块定位在该项目所属的树中,然后读取-修改-写入该块。但...


如果索引是AUTO_INCREMENTTIMESTAMP(或类似的东西),则被修改的块始终位于BTree的“末端”。因此,几乎所有的读写操作都是可缓存的。即,更新这样的索引的开销非常低。
如果索引是“随机”的,例如UUID,GUID,md5等,则很少在缓存中找到要更新的块。也就是说,为该行更新该一个索引可能会花费一对IOP。即使使用SSD,您也可能无法跟上步伐。 (假设您没有几TB的RAM。)
如果索引介于顺序和随机之间(例如某种“名称”),则BTree中可能有成千上万个“热点”,并且这些热点可能是可缓存的。


底线:如果您不能避免随机索引,那么您的项目就注定了。

下一期...查询。如果您需要扫描5TB的SELECT,这将花费一些时间。如果这是应用程序的数据仓库类型,并且您需要汇总上个月的数据,那么建立和维护汇总表将非常重要。此外,这可以消除对“事实”表上某些索引的需求,从而有可能消除我对索引的担忧。

“查看历史数据”-查看单个行?或者只是查看摘要信息? (同样,如果像DW一样,很少需要查看旧的数据点。)如果汇总就足够了,那么可以避免使用大部分25TB的数据。

您有一台在线容量为25TB的计算机吗?如果没有,那可能会迫使您拥有多台计算机。但是,您将需要在它们之间运行查询的复杂性。

从INT = 4字节估计5TB,等等?如果使用InnoDB,则需要乘以2到3才能获得实际的占用空间。此外,如果将来需要修改表,则可能需要将表复制过来,这样会使所需的磁盘空间增加一倍。您的25TB变得更像100TB的存储空间。

PARTITIONing几乎没有有效的用例,因此我不希望在不了解更多情况之前就进行讨论。

“共享”(跨计算机拆分)可能是“分布式”的意思。对于多个表,您需要认真考虑如何拆分数据,以便JOINs继续工作。

5TB是巨大的-竭尽所能缩小它-使用较小的数据类型,进行规范化等。但是不要“过度规范化”,最终可能会导致糟糕的性能。 (我们需要查看查询!)

有许多方法可以获取多TB数据库。在我们变得更加具体之前,我们确实需要有关您的表和查询的更多信息。

10-01 04:21
查看更多