如何在MySql上管理巨大的操作

| 我有一个MySql数据库。我有很多记录(大约4,000,000,000行),我想对其进行处理以减少它们(减少到大约1,000,000,000行)。 假设我有以下表格: 表RawData:我每秒要将5000多个行插入到RawData中 table ProcessedData:此表是在RawData处插入的行的已处理(汇总)存储。      最小行数> 20,000,000 表ProcessedDataDetail:我写表ProcessedData的详细信息(聚合的数据) 用户想要在需要连接8个以上其他表的ProcessedData表中查看和搜索。 插入RawData并在ProcessedData中搜索(ProcessedData INNER JOIN ProcessedDataDetail INNER JOIN ...)非常慢。我使用了很多索引。假设我的数据长度为1G,但我的索引长度为4G :)。 (我想利用这些索引,它们会使我的处理变慢) 如何提高此过程的速度? 我想我需要一个来自ProcessedData的影子表,将其命名为ProcessedDataShadow。然后处理RawData并使用ProcessedDataShadow对其进行聚合,然后将结果插入ProcessedDataShadow和ProcessedData中。你有什么想法?? (我正在用C ++开发项目) 先感谢您。     
已邀请:
        在不了解您的实际应用程序是什么的情况下,我有以下建议: 如果尚未使用,请使用InnoDB。 InnoDB利用行锁,在处理并发更新/插入方面要好得多。如果您不同时进行工作,则会变慢,但是行锁定可能是您必须要做的,具体取决于您将为RawData拥有多少源。 索引通常可以加快处理速度,但是选择错误的索引可能会使处理速度变慢。我不希望您摆脱它们,但是很多索引会使插入速度非常慢。可以在插入批量数据时禁用索引,以防止在每次插入时更新索引。 如果要选择可能会干扰数据收集的大量数据,请考虑使用仅用于读取的复制从数据库服务器。即使这将锁定行/表,主(主)数据库也不会受到影响,并且从属数据库将在自由释放时立即恢复运行。 您是否需要处理数据库中的数据?如果可能,请收集应用程序中的所有数据,然后仅插入ProcessedData。     
        您没有说数据的结构是什么,如何合并数据,需要多长时间向用户提供数据,以及合并过程有多麻烦。 但是,最直接的问题将是每秒下沉5000行。您将需要一台非常大,非常快的机器(可能是分片集群)。 如果可能的话,我建议编写一个合并缓冲区(使用内存中的哈希表-不在DBMS中)以将合并后的数据放入-即使它只是部分合并-然后从此更新到处理数据表中而不是尝试直接从rawData填充它。 确实,我可能会考虑将原始和合并的数据分离到单独的服务器/群集中(MySQL联合引擎很方便提供数据的统一视图)。 您是否已分析查询以查看您真正需要哪些索引? (提示-此脚本对此非常有用)。     

要回复问题请先登录注册