Есть система у которой есть клиенты, клиенты могут регистрироваться в системе и активно пользоваться или бросать ее нафиг. Когда клиент оплачивает подписку он становиться активным на несколько месяцев, когда подписка заканчивается если ее не продлевать он становиться не активным.
Со временем думаю одни буду приходить другие уходить, количество активных клиентов будет постепенно расти, но количество не активных будет вероятно на порядки больше. Каждый клиент имеет уникальный id, по нему система понимает на каком сервере лежат данные о клиенте. Данные лежат в одной таблице.
Вопрос: стоит ли разделить таблицу на две - для активных и не активных? С одной стороны перенос из таблицы в таблицу это деградация индексов и лишнее время (перенос относительно редкий), с другой работа сервера идет только с активными клиентами и значит если и активные и не активные будут в одной таблице - работа будет линейно замедляться. Под работой понимается update (перерасчет данных) всех активных клиентов. Update редкий - несколько раз в сутки и относительно быстрый для отдельного клиента. Работа ведется с помощью очереди задач. В очередь помещаются диапазоны идентификаторов клиентов (сейчас это по 1000 клиентов в задаче), а воркеры выгребают данные клиентов из этих диапазонов и меняют данные. Соответственно если таблица будет одна то часто будут попадаться те клиенты для которых ничего делать не нужно, но выборка их данных уже будет сделана - соответсвенно время работы будет расти...
Что выбрали бы вы?