Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 分布式数据库用例_Mysql_Database Partitioning_Distributed System_Large Data_Bigdata - Fatal编程技术网

Mysql 分布式数据库用例

Mysql 分布式数据库用例,mysql,database-partitioning,distributed-system,large-data,bigdata,Mysql,Database Partitioning,Distributed System,Large Data,Bigdata,目前我有一个mysql数据库,我每年收集的数据是5 TB。我会一直保存我的数据,我不想很早就删除某些内容。 我问自己是否应该使用分布式数据库,因为我的数据每年都会增长。5年后,我将有25个没有索引的Terrabyte。(只是计算了我每天保存的原始数据) 我有5个表,大多数查询是多个表上的联接。 我需要以特定的时间戳访问多行上的1-2列 分布式数据库是否比单个mysql数据库更受欢迎 分区将很困难,因为我所有的表都是高度连接的 我知道这取决于查询和数据库表的设计,我还可以拥有一个分布式mysql数

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

我有5个表,大多数查询是多个表上的联接。 我需要以特定的时间戳访问多行上的1-2列

分布式数据库是否比单个mysql数据库更受欢迎

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

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

编辑:

  • 平均而言,我将有1500个客户端每秒写入数据,它们会影响所有表

  • 我只需要旧数据集进行分析。像机器学习和 模式匹配

  • 客户机还应该能够看到历史数据

    • 要对如此广泛的问题提供一个具体的答案是不可能的

      总的来说,我建议只要你能证明自己有问题,就只担心表现;如果您担心,最好设置一个测试平台,用代表性数据填充它,然后看看会发生什么

      “MySQL能处理5-25 TB的数据吗?”是的。不,视情况而定。如您所说,如果您没有索引,那么在达到5TB之前,您的查询可能会慢很长一段时间。如果是5 TB/年的高度可索引数据,那就没问题了

      对于这个问题,最常见的解决方案是为所有“常规”工作保留一个“事务性”数据库,并为报告保留一个数据仓库,使用常规提取/转换/加载作业来移动数据并将其存档。数据仓库通常有一个为查询而优化的模式,通常与原始模式完全不同

      如果您想保持所有内容在逻辑上的一致性,可以使用和集群—MySQL的一种开箱即用的特性


      然而,我不会推出自己的“分布式数据库”解决方案。这比你想象的要困难得多。

      要对如此广泛的问题提供一个具体的答案是不可能的

      总的来说,我建议只要你能证明自己有问题,就只担心表现;如果您担心,最好设置一个测试平台,用代表性数据填充它,然后看看会发生什么

      “MySQL能处理5-25 TB的数据吗?”是的。不,视情况而定。如您所说,如果您没有索引,那么在达到5TB之前,您的查询可能会慢很长一段时间。如果是5 TB/年的高度可索引数据,那就没问题了

      对于这个问题,最常见的解决方案是为所有“常规”工作保留一个“事务性”数据库,并为报告保留一个数据仓库,使用常规提取/转换/加载作业来移动数据并将其存档。数据仓库通常有一个为查询而优化的模式,通常与原始模式完全不同

      如果您想保持所有内容在逻辑上的一致性,可以使用和集群—MySQL的一种开箱即用的特性

      然而,我不会推出自己的“分布式数据库”解决方案。这比你想象的要困难得多。

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

      “高索引5TB”将慢到爬行。索引是一棵树。向索引中添加新行意味着在该项所属的树中定位该块,然后读取修改写入该块。但是

      • 如果索引是
        AUTO_INCREMENT
        TIMESTAMP
        (或类似内容),则被修改的块“始终”位于BTree的“末尾”。因此,实际上所有的读写操作都是可缓存的。也就是说,更新这样一个索引的开销非常低

      • 如果索引是“随机”的,例如UUID、GUID、md5等,那么要更新的块很少在缓存中找到。也就是说,为这一行更新这一索引可能要花费一对IOPs。即使是SSD,你也可能跟不上。(假设您没有几TB的RAM。)

      • 如果索引介于顺序和随机之间(比如,某种“名称”),那么BTree中可能有数千个“热点”,这些热点可能是可缓存的

      底线:如果你不能避免随机索引,你的项目就注定要失败

      下一期。。。查询。如果需要扫描5TB的
      文件,请选择
      ,这需要时间。如果这是一种数据仓库类型的应用程序,并且您需要(比如)汇总上个月的数据,那么构建和维护汇总表将非常重要。此外,这可以避免对“事实”表上的某些索引的需要,从而可能消除我对索引的担心

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

      您有联机容量为25TB的机器吗?如果没有,这可能会迫使您拥有多台机器。但是,这样就有了在它们之间运行查询的复杂性

      5TB是根据INT=4字节等估算的?如果使用InnoDB,需要乘以2到3才能得到实际的内存占用。此外,如果将来需要修改表,则此类操作可能需要复制表,以便将所需的磁盘空间增加一倍。您的25TB存储容量更像是100TB

      分区
      的有效用例非常少,所以我不想在knowin之前讨论这个问题