Попробуйте: откройте два окна с сеансами клиента 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;
Обратите внимание, что оно зависает!
Памятьтаблицы поддерживают только блокировку на уровне таблицы. Ваши операции выбора, вставки, обновления и периодического удаления будут стоять в очереди друг против друга, даже если они работают в разных строках.
Это может создать впечатление, что у вас плохая производительность, потому что все запросы к таблице должны выполняться последовательно. Вы не получаете параллелизма.
Таблицы не имеют производительности;запросы имеют производительность. Вы не описали ни одного вопроса в своем вопросе. Чтобы определить, какой механизм хранения лучше всего подходит для вашего приложения, вы должны учитывать, какие запросы вы собираетесь выполнять с данными, а также частоту запросов, параллелизм и т. Д.