Я немного подумал о разделении таблиц, поскольку разбиение не может быть выполнено с помощью внешних ключей в таблице MySQL. Может быть, есть возможность переключиться на другую реляционную базу данных, в которой есть и то и другое, но сейчас я не вижу такой возможности.
Итак, идея шардинга кажется довольно приличной. Но какой хороший подход сделать это на уровне приложения?
Я предполагаю, что точкой отсчета будет префикс таблиц с максимальным значением первичного ключа в каждой таблице. Что-то вроде products_4000000
, products_8000000
и products_12000000
. Тогда приложению придется проверить с помощью простого оператора if размер запрашиваемого идентификатора (PK) меньше четырех, восьми или двенадцати миллионов, прежде чем делать какие-либо реальные вызовы базы данных.
Итак, это шаг в правильном направлении или мы делаем что-то действительно глупое?
Обновление:
Последовательное хеширование также может быть идеей для разделения строк между несколькими таблицами на основе первичного ключа или аналогичного.
Другим вариантом может быть введение шардинга на уровне базы данных. Я недостаточно знаю о триггерах / представлениях или о том, что используется для этого.