繁体   English   中英

用于聊天表的 mysql 引擎(堆/内存与 innodb)

[英]mysql engine for chat table (heap/memory vs innodb)

在为聊天消息创建半临时表时(即表中不会有任何超过 60 秒的消息,因为它们每分钟被预定事件删除一次) ,使用 HEAP/ 是否有任何值得注意的性能提升?内存而不是 InnoDB?

试试这个:使用 MySQL 客户端会话打开两个 windows。

在第一个 session 中,使用 MEMORY 引擎创建一个测试表并给它几行。

mysql> use test;
mysql> create table chat ( 
  id serial primary key, 
  msg text, 
  likes int default 0, 
  created_at datetime default current_timestamp
) ENGINE=MEMORY;
mysql>  insert into chat set msg = 'sup';
mysql>  insert into chat set msg = 'sup';
mysql>  insert into chat set msg = 'sup';

在第二个 window 中,尝试更新一行。 我使用 sleep 加入另一个表达式来模拟花费一些时间。

mysql> use test;
mysql> update chat set likes = likes + sleep(60) where id = 1;

再次在第一个 window 中,而第二个 window 仍在休眠,尝试读取数据:

mysql> select * from chat;

注意它挂起!

Memory 表仅支持表级锁定。 您的选择、插入、更新和定期删除都将相互排队,即使它们在不同的行上工作。

这可能会使您看起来性能不佳,因为对表的所有查询都必须连续完成。 你没有并发。

表没有性能; 查询有性能。 您没有在问题中描述任何查询。 您必须考虑要针对数据运行哪些查询、查询速率和并发性等,以评估哪种存储引擎最适合您的应用程序。

暂无
暂无

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

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