Кто поверх SQL делал миграцию данных / шардов online (наживую) поделитесь плиз идеями!
как я понимаю нужно завести справочник/функцию который говорит на каком сервере лежит конкретный ключ (запись с конкретным идентификатором). далее процесс миграции должен монопольно захватывать ключи на сервере «A» (select for update), атомарно прятать ключи в скрытую таблицу и не атомарно перемещать на сервер «B» в скрытую таблицу, где атомарно их делать доступными и менять в справочнике местоположение ключей с сервера «A» на сервер «B». Скрытая таблица по идее нужна потому как перемещение ключей между серверами не атомарно и может случится так что в какой-то момент на сервере «B» будет только часть ключей (если мы перемещаем не просто единичный ключ, а множество ключей - виртуальный шард).
как быть если в то время когда началась миграция клиент уже пришел на сервер «A» и не нашел данные? тупо долбится то в справочник то на сервер «A» пока в справочнике не обновится адрес сервера и клиент не зайдет на новый сервер «B»? Может придумать тут какую-то нотификацию вместо поллинга? Как ее сделать?
Как вы строите справочник с соответствием ключа серверу либо ключа виртуальному шарду а виртуального шарда серверу? По какому алгоритму и с помощью каких инструментов?
Читал в частности историю где люди ушли от виртуальных шардов просто к соответствию ключа серверу, в чем это соответствие хранить?
Заранее спасибо за идеи и ответы!