我正在使用高速数据流并执行以下步骤将数据存储在 MySQL 数据库中。对于每件新到货的商品。
- (1) 解析传入项。
- (2)执行几次“INSERT ... ON DUPLICATE KEY UPDATE”
我用过插入...重复密钥更新 http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html以消除与数据库的一次额外往返。
在尝试提高整体性能的同时,我考虑过通过以下方式进行批量更新:
- (1) 解析传入项。
- (2) 生成带有“INSERT ... ON DUPLICATE KEY UPDATE”的 SQL 语句并附加到文件。
定期将文件中的 SQL 语句刷新到数据库。
两个问题:
- (1) 这会对数据库负载产生积极影响吗?
- (2) 我应该如何将语句刷新到数据库,以便仅在完全刷新后重建索引? (使用交易?)
更新:我正在使用 Perl DBI + MySQL MyISAM。
预先感谢您的任何评论。
如果您的数据不需要立即进入数据库,您可以将插入数据缓存在某处,然后发出一个更大的插入语句,例如
在重复更新时插入 table_name (x, y, z) 值 (x1, y1, z1), (x2, y2, z2), ... (xN, yN, zN) ...;
需要明确的是,我将维护一个待处理插入的列表。在本例中是 (x,z,y) 三元组的列表。然后,一旦您的列表超过某个阈值 (N),您就生成插入语句并发出它。
我没有准确的计时数字,但与单独插入每一行相比,这将性能提高了大约 10 倍。
我也没有玩过 N 的值,但我发现 1000 可以很好地工作。我预计最佳值会受到硬件和数据库设置的影响。
希望这会有所帮助(我也在使用 MyIsam)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)