Mysql 读写环境中的内存(堆)与InnoDB

Mysql 读写环境中的内存(堆)与InnoDB,mysql,memory,heap,locking,innodb,Mysql,Memory,Heap,Locking,Innodb,我想用MySQL编写一个实时应用程序 它需要一个小表(少于10000行),该表将承受大量的读(扫描)和写(更新和一些插入/删除)负载。我说的是每秒10000次更新或选择。这些语句将仅在少数(少于10个)打开的mysql连接上执行 该表很小,不包含任何需要存储在磁盘上的数据。所以我问哪个更快:InnoDB还是内存(堆) 我的想法是: 这两个引擎都可能直接从内存中进行选择,因为即使InnoDB也会缓存整个表。更新怎么样?(innodb在trx提交时刷新日志?) 我主要关心的是锁定行为:InnoDB行

我想用MySQL编写一个实时应用程序

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

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

我的想法是:

  • 这两个引擎都可能直接从内存中进行选择,因为即使InnoDB也会缓存整个表。更新怎么样?(innodb在trx提交时刷新日志?)

  • 我主要关心的是锁定行为:InnoDB行锁与内存表锁。这是否会成为内存实现中的瓶颈


  • 谢谢你的想法

    如果您真的需要有那么多并发更新,几乎可以肯定innodb的性能会更好,因为堆表只有表级锁,而不像innodb那样有行级锁


    如果你是从零开始,我会研究使用MySQL 5.5或Percona的XtraDB,因为它们都比现有的MySQL 5.1有许多可伸缩性改进。

    这不仅仅是行锁的问题-InnoDB也有MVCC,因此读者甚至不会阻止写入程序

    但我认为你的问题遗漏了最重要的细节——你存储的是什么样的数据?如果您需要能够恢复崩溃后的内存,则不能选择


    如果不需要在崩溃后恢复,那么为什么要使用数据库?为什么不使用memcached或redis之类的工具?

    谢谢!您认为MySQL 5.5有哪些改进?它只是在相同的表定义上表现得更好,还是设计必须有很大的不同。如果是,我如何找出5.5中哪些部分应以不同方式实施。与5.1相比?任何方向它都应该在相同的定义上表现得更好,这得益于各种内部innodb结构中更细粒度的锁定,以及更智能的自适应算法。在多核设备上,无论是IO还是CPU负载,都应该注意到加速。相信坚如磐石的实现不是一个坏主意。知道需要在复杂的数据结构上执行操作,就很难在缓存数据上实现多个操作(创建子集合、排序等)(甚至不计算可能的错误和所需的测试)。数据库在这类东西上做得很好,因此使用它们对开发人员来说将是一个巨大的解脱。顺便说一句,您的解决方案在理论上是合乎逻辑的,如果您提到用于执行操作的工具(我说过数据库很好)会更好。