Текущая ситуация:
Моя структура MySQL состоит из 2000 баз данных, по одной на каждого клиента, все таблицы InnoDB.
Клиенты, использующие мое приложение более или менее 500 000 пользователей.
Я начинаю проект, в котором мне нужно в режиме реального времени записывать все изменения, которые клиенты вносят в некоторые объекты своих данных.
Все эти изменения затем отправляются через файл json в конечную точку с помощью curl.
Я думаю создать на отдельной БД таблицу InnoDB, куда я собираюсь чтобы указать все эти INSERT, одну уникальную и общую таблицу.
Таблица:
CREATE TABLE IF NOT EXISTS `delta_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_tab` int(11) NOT NULL,
`op` enum('save','delete') NOT NULL,
`data` datetime NOT NULL,
`id_customer` int(11) NOT NULL,
`processed` enum('no','yes') NOT NULL DEFAULT 'no',
PRIMARY KEY (`id`),
KEY `id_customer` (`id_customer`),
KEY `processed` (`processed`)
) ENGINE=InnoDB;
Это запросы для обработки службы реального времени:
INSERT INTO `db_example`.`delta_table`(`id_tab`, `op`, `data`, `id_customer`, `processed`)
VALUES (32321, 'save', NOW(), 1000, 'no');
INSERT INTO `db_example`.`delta_table`(`id_tab`, `op`, `data`, `id_customer`, `processed`)
VALUES (32322, 'delete', NOW(), 1000, 'no');
Каждая в минуту, когда задача cron берет эти данные и составляет файл json для последней операции отправки.
Задача cron выполняет обновление (или удаление), чтобы пометить запись как «отправленную»:
UPDATE `db_example`.`delta_table` SET processed = 'yes' WHERE id = '32';
Как вы думаете, это правильный способ управления ситуацией?
Есть ли у вас какие-либо предложения?
Боюсь, что огромное количество INSERT поступает от клиентов, потенциально каждый секунд, может вызвать некоторую тупиковую ситуацию, я прав?