gpt4 book ai didi

mysql - 高效的 MySQL 查询/模式来存储来自并行进程的信息

转载 作者:行者123 更新时间:2023-11-29 05:34:10 25 4
gpt4 key购买 nike

问题:

我有多个处理平面文件记录的并行进程。每个文件对应于电信系统中的给定接口(interface)(通过系统的消息被赋予32位全局唯一标识符,并且给定消息可以在多个接口(interface)上有记录)。 一个进程处理每个文件

让我们调用接口(interface):A、B 和 C。消息字符串可以根据它是由哪个接口(interface)编写的而不同。我应该创建一个表来存储有关通过系统的每条消息的信息。因此,该表应包含(以及其他字段):id,message_on_A,message_on_B,message_on_C。我想避免相同 ID 的重复条目。

我试过的是:

  1. 设置id为PRIMARY KEY,使用INSERT ON DUPLICATE KEY UPDATE命令为每个进程设置对应的message字段
  2. 将 id 分解成多个部分,并将这些部分用作复合主键;其余同1。
  3. 存储所有记录,然后使用第二个查询提取每个 ID 的所有信息(使用 GROUP BY ID 和 max(message_on_A)、max(message_on_B)、max(message_on_C))。没有为此方法定义主键。

这些方法都不够快。我正在寻找一种解决方案,它可以为 100 万个 ID 实现大约 30 秒的运行时间(考虑到 3 个接口(interface),所以有 300 万条记录)。

第一种和第二种方法在 MyISAM 表上用了大约 400 秒完成了这项工作。我也试过 InnoDB,但速度要慢得多。

目前我正在考虑再尝试方法 3,但我需要找到一个更快的查询(GROUP BY 和 max() 查询在我终止它之前持续了 20 多分钟)

问题:任何人都可以为这个问题提出更好的模式吗?还有更好的查询?

最佳答案

我正在考虑对第三种方法进行修改。将数据存储在三个单独的表中,以 GUId 作为每个表中的主键。这应该使插入尽可能快地发生。在此级别处理重复项。

代替分组依据,尝试以下操作:

select A.id,
A.message as A_message,
(select B.message from B where B.id = A.id limit 1) as B_message,
(select C.message from C where C.id = A.id limit 1) as C_message
from A

如果这可行,那么您唯一的问题是消息缺少 A 组件。我认为也有办法解决这个问题。问题是这是否实现了您的性能目标。

关于mysql - 高效的 MySQL 查询/模式来存储来自并行进程的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com