我有一个场景,我无法找出正确处理的最佳方式。我有一个mysql数据库,其中包含许多表,用于存储世界各地许多设备的配置信息。有一个频繁运行的脚本可以查找更改,跟踪状态以及与这些设备相关的各种其他内容。
数据驱动用于管理所述设备的前端应用程序。我的问题是如何正确处理数据库的更新。因此,目前我将所有数据写入临时表,然后将/ select *截断为活动表。
我知道这绝对是可怕的,它会导致许多不同的问题,这是一个真正的痛苦。我确信必须有一个更好的方法,但我找不到一个。任何人都可以提出更高效的建议。这些表格相对较小,所以我可以使用上述方法。 (每个表不到2k行)
如果我能弄清楚如何只更新已经改变的东西和任何新的东西,那将是多么好的。我只是想弄清楚如何摆动那一个。任何建议都将不胜感激。
mysql版本: mysql Ver 14.14 Distrib 5.1.67 MyISAM(可能不应该使用它......?)
我是否有某种方法可以尝试使用时间戳或类似的东西......
更新: 我没有在这里提供足够的数据,所以我的错。让我试着提供一些更好的细节。
我有一个简单的表,可以存储以下字段:(大大简化了这里)
主机名,IP,状态,策略位置。
我有一个大约每10分钟运行一次的脚本来捕获所有这些以及更多内容以转储到mysql中。问题是,当我截断时,有时用户可能正在尝试使用前端应用程序并且表尚未填充。我想找到一个更好的方法来解决这个问题。
答案 0 :(得分:0)
两件事:MyISAM可能不是你桌子的最佳选择。写入MyIASM将锁定整个表。像InnoDB这样的引擎将允许行级锁定,因此在UPDATES和INSERTS期间只会锁定受影响的行。当然,切换到这可能并不简单。 MyIASM有其用途。它的快速,低开销,通常非常适合数据仓库。
接下来研究使用消息总线,即RabbitMQ。它们充当大型数据流的缓冲区,您可以批量导入数据库,而不是实时。随着您的应用扩展,这些事情将变得越来越必要。