Примеры (можно также посмотреть тесты):
Создание и конфигурирование адаптера:
$db = new Core_Db_Adapter_Scale(array(
//список таблиц с которыми работает адаптер
"tables" => array(
"users" => array(
"scale"=> array(
// по какому полю ведется скайлинг
"field" => "id",
// какую стратегию использовать
"strategy" => "Core_Db_Adapter_Scale_Strategy",
),
"primary" => array(
// примари ключ
"field"=>"id",
// включить эмуляцию автоинкремента
"autogenerate" => true,
// стратегия генерации автонреметного ключа
"strategy" => "Core_Db_Adapter_Scale_Primary_Generate_Strategy"
)
),
),
// список шардов (соединений к БД в которых располагаются данные)
"shards" => array(
0 => Zend_Db::factory(
"Pdo_Mysql",
array(
"host" => "127.0.0.1",
"username" => "root",
"password" => "",
"dbname" => "test1",
)
),
1 => Zend_Db::factory(
"Pdo_Mysql",
array(
"host" => "127.0.0.1",
"username" => "root",
"password" => "",
"dbname" => "test2",
)
),
)));
Пример работы с стандартным ОРМ:
class Users extends Zend_Db_Table_Abstract {}
$Users = new Users($db);
$Users->insert(array("name"=>"joseph"));
$UsersRowset = $Users->find(1);
$User = $UsersRowset->current();
$User->name = "peter";
$User->save();
Тоесть никаких отличий для приложения нет. что используется стандарный один адаптер, что используется Core_Db_Adapter_Scale. Что позволяет гибко внедрять туда где он нужен без переписывания большой чати приложения.
Бонусы:
- Возможность хранить в таблице неограниченое количество строк милиарды и более
- Возможность хранить в таблице неограниченое количесво данных Тб и более
- Возможность гибко размазывать нагрузку по всем шардам
- Возможность задать неграниченое количество частей разбиения
- Адаптер не зависит от БД, в качестве шардом может использоваться любая БД
- Возможность задания пользовательского алгоритма выбора шарда
- Эмуляция автоикрементного поля
- Интерфейс Zend_Db_Adapter
Ограничения:
- Во всех запросах требутся использовать поле по которому идет скайлинг.
- Не возможность выборки всех данных из таблицы
- Не возможность JOIN
Исходные коды: #svn/trunk/Vendor/Core/Db/Adapter
Глосарий
Горизонтальная масштабируемость
Разбиение системы на более мелкие структурные компоненты и разнесение их по отдельным физическим машинам (или их группам) и/или увеличение количества серверов параллельно выполняющих одну и ту же функцию. Подробнее ...
Горизонтальная масштабируемость
Разбиение системы на более мелкие структурные компоненты и разнесение их по отдельным физическим машинам (или их группам) и/или увеличение количества серверов параллельно выполняющих одну и ту же функцию. Подробнее ...
