движок mysql для таблицы чата (куча / память против innodb) - PullRequest
1 голос
/ 11 октября 2019

При создании временной таблицы для сообщений чата (т.е. в таблице не будет сообщений старше 60 секунд, так как они удаляются раз в минуту запланированным событием) ,Есть ли примечательный прирост производительности при использовании HEAP / Memory вместо InnoDB?

1 Ответ

1 голос
/ 11 октября 2019

Попробуйте: откройте два окна с сеансами клиента MySQL.

В первом сеансе создайте тестовую таблицу с механизмом 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';

Ввторое окно, попробуйте обновить строку. Я добавляю другое выражение, используя сон, чтобы имитировать время.

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

Снова в первом окне, пока второе окно все еще спит, попробуйте прочитать данные:

mysql> select * from chat;

Обратите внимание, что оно зависает!

Памятьтаблицы поддерживают только блокировку на уровне таблицы. Ваши операции выбора, вставки, обновления и периодического удаления будут стоять в очереди друг против друга, даже если они работают в разных строках.

Это может создать впечатление, что у вас плохая производительность, потому что все запросы к таблице должны выполняться последовательно. Вы не получаете параллелизма.

Таблицы не имеют производительности;запросы имеют производительность. Вы не описали ни одного вопроса в своем вопросе. Чтобы определить, какой механизм хранения лучше всего подходит для вашего приложения, вы должны учитывать, какие запросы вы собираетесь выполнять с данными, а также частоту запросов, параллелизм и т. Д.

...