处理不断更新的 mysql 表的最佳方法


Best way to deal with mysql tables that are constantly being updated

我有一个场景,我无法找到正确处理的最佳方法。我有一个mysql数据库,其中包含许多表,其中存储了全球许多设备的配置信息。有一个脚本经常运行,用于查找更改、跟踪状态以及与这些设备相关的各种其他内容。

数据驱动用于管理所述设备的前端应用程序。我的问题是我如何正确处理一直更新数据库。所以目前我将所有数据写入临时表,然后将 * 截断/选择 * 到活动表中。

我知道这绝对是可怕的,它会导致许多不同的问题,这是一个真正的痛苦。我确信一定有更好的方法,但我找不到。谁能提出更有效率的建议。这些表相对较小,因此我可以摆脱上述方法。(每个表少于 2k 行(

如果我能弄清楚如何只更新已更改的内容和任何新内容,那就太好了。我只是不知道如何摆动那个。任何建议将不胜感激。

MySQL 版本:mysql 版本 14.14 发行版 5.1.67MyISAM(可能也不应该使用它... ?

有没有办法我可以尝试使用时间戳或类似的东西......

更新:我在这里没有提供足够的数据,所以我的错。让我试着给出一些更好的细节。

我有一个简单的表格,存储如下字段:(这里大大简化了(

主机名,IP,状态,策略,位置。

我有一个大约每 10 分钟运行一次的脚本来捕获所有这些以及更多内容以转储到 mysql 中。问题是,当我截断时,有时用户可能正在尝试使用前端应用程序,并且表尚未填充。我正在努力想出一个更好的方法来解决这个问题。

两件事:MyISAM可能不是你桌子的最佳选择。写入 MyIASM 会锁定整个表。像InnoDB这样的引擎将允许行级锁定,因此只有受影响的行才会在更新和插入期间被锁定。当然,切换到这个可能并不简单。MyIASM有其用途。它快速,低开销,通常非常适合数据仓库。

接下来看看使用消息总线,即 RabbitMQ。 这些充当大型数据流的缓冲区,您可以批量导入到数据库中,而不是实时导入。随着应用的扩展,这些东西将变得越来越必要。