存储器(HEAP)与读写环境中的InnoDB

时间:2010-05-04 16:53:37

标签: mysql memory heap locking innodb

我想使用MySQL编写实时应用程序。

它需要一个小表(少于10000行),它将在重读(扫描)和写(更新和一些插入/删除)负载下。我说的是每秒10000次更新或选择。这些语句只在少数(少于10个)打开的mysql连接上执行。

该表很小,不包含任何需要存储在磁盘上的数据。所以我问哪个更快:InnoDB或MEMORY(HEAP)?

我的想法是:

  1. 两个引擎都可能直接从内存中提供SELECT,因为即使InnoDB也会缓存整个表。 UPDATE怎么样? (的innodb_flush_log_at_trx_commit?)

  2. 我主要担心的是锁定行为:InnoDB行锁与MEMORY表锁。这是否会成为MEMORY实施的瓶颈?

  3. 感谢您的想法!

2 个答案:

答案 0 :(得分:5)

如果你真的需要那么多的并发更新,几乎可以肯定innodb会表现得更好,因为HEAP表只有表级锁,而不是像Innodb那样的行级锁。

如果您从头开始,我会调查使用MySQL 5.5或Percona的XtraDB,因为它们都比MySQL 5.1的库存包含许多可扩展性改进。

答案 1 :(得分:0)

这不仅仅是行锁的问题 - InnoDB还有MVCC http://en.wikipedia.org/wiki/Multiversion_concurrency_control,因此读者甚至不会阻止编写器。

但我认为您的问题缺少所有重要细节 - 您存储的是哪种数据?如果您需要能够恢复崩溃后MEMORY不是一个选项。

如果您不需要恢复发布崩溃,那么为什么要使用数据库?为什么不使用像memcached或redis这样的东西?