繁体   English   中英

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

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

我有一种情况,我想不出正确处理的最佳方法。 我有一个包含许多表的mysql数据库,该表存储世界各地许多设备的配置信息。 有一个脚本会频繁运行,以查找更改,跟踪状态以及与这些设备相关的各种其他内容。

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

我知道这绝对是可怕的,并且会引起很多不同的问题,这是一个真正的痛苦。 我确信肯定有更好的方法,但是我找不到。 任何人都可以提出一些更有效率的建议。 这些表相对较小,因此我可以摆脱上述方法。 (每个表少于2k行)

如果我能弄清楚如何仅更新已更改的内容和新内容,那将是很好的选择。 我只是想不出如何摆动那个。 任何建议将不胜感激。

mysql版本:mysql Ver 14.14 Distrib 5.1.67 MyISAM(可能也不应该使用它吗??)

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

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

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

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

我有一个脚本,大约每10分钟运行一次,以捕获所有这些脚本,还有更多脚本要转储到mysql中。 问题是,当我截断时,有时用户可能正在尝试使用前端应用程序,而表尚未填充。 我正在尝试提出一种更好的方法来处理此问题。

两件事:MyISAM可能不是您餐桌上的最佳选择。 写入MyIASM将锁定整个表。 像InnoDB这样的引擎将允许行级锁定,因此只有受影响的行才会在UPDATES和INSERTS期间被锁定。 当然,切换到该位置可能并不容易。 MyIASM有其用途。 它的快速,开销低,通常对于数据仓库来说相当不错。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM