MySQL и реляционные базы данных: как справиться с разделением / разбиением на уровне приложения? - PullRequest
0 голосов
/ 07 июня 2010

Я немного подумал о разделении таблиц, поскольку разбиение не может быть выполнено с помощью внешних ключей в таблице MySQL. Может быть, есть возможность переключиться на другую реляционную базу данных, в которой есть и то и другое, но сейчас я не вижу такой возможности.

Итак, идея шардинга кажется довольно приличной. Но какой хороший подход сделать это на уровне приложения?

Я предполагаю, что точкой отсчета будет префикс таблиц с максимальным значением первичного ключа в каждой таблице. Что-то вроде products_4000000, products_8000000 и products_12000000. Тогда приложению придется проверить с помощью простого оператора if размер запрашиваемого идентификатора (PK) меньше четырех, восьми или двенадцати миллионов, прежде чем делать какие-либо реальные вызовы базы данных.

Итак, это шаг в правильном направлении или мы делаем что-то действительно глупое?

Обновление:
Последовательное хеширование также может быть идеей для разделения строк между несколькими таблицами на основе первичного ключа или аналогичного. Другим вариантом может быть введение шардинга на уровне базы данных. Я недостаточно знаю о триггерах / представлениях или о том, что используется для этого.

1 Ответ

1 голос
/ 14 декабря 2010

Последовательное хеширование, безусловно, является хорошим подходом во многих случаях. Возможно, вы также захотите ознакомиться с этой статьей, посвященной шардингу с учетом приложений.

http://www.dbshards.com/blog/2010/09/black-box-vs-application-aware-sharding/

...