DOC.PROTOTYPES.RU

Равномерное распределение с помощью dblink

Задачи и концепция

Реализацию данного решения кластеризации базы данных будем осуществлять на примере фотохостинга (упрощенной функциональности).

Что у нас в наличии:

Начнем с таблицы фото, она самая широкая и длинная, основные выборки из нее будут относительно ID, альбома или пользователя, соотвественно, вертикальное разделение таблицы фото имеет смысл по пользователям, так же как и таблицы альбомов и пользователей, у пользователя есть уникальный логин, потому распределять будем по нему (MD5).

Теги сложнее, сама таблица тегов не особо большая и выборка из нее берется исключительно атомарно, резать ее смысла нет, а вот таблицу связей тег <-> фото - да. Но тут возникает вопрос, нам нужны будут все теги для определенного фото и все фото для определенного тега, то есть выборка в обоих направлениях. Это можно сделав двойную нарезку этой таблицы, как по фото так и по тегу, конечно, это вриведет к некоторой избыточности данных, но позволит делать выборку списка в пределах одного сервера базы данных.

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

Итого получается:

Рейтинг считаем от 1 до 5, с точностью до тысячных.

Так же, следует минимизировать обмен данными между серверами что бы не засорять трафик.

Сергей Томулевич aka Phoinix (01.12.2009 г.)
Copyright © 2011 Сергей Томулевич