Показ дописів із міткою zf. Показати всі дописи
Показ дописів із міткою zf. Показати всі дописи

2009-07-20

ZF + Горизонтальная масштабируемость

Написал адапnер для ZF предоставляющий функционал горизотального маштабирования данных бд. Основной зарачей горизотального маштабирования является возможно разнесения бд, путем разрезания таблиц с данными на части. Таким образом появляется возможность гибко маштабировать операции записи, выборки из больших таблиц содержащих свыше 10 млн. записей или размером свыше 5 Гб.

Примеры (можно также посмотреть тесты):
Создание и конфигурирование адаптера:



$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. Что позволяет гибко внедрять туда где он нужен без переписывания большой чати приложения.

Бонусы:
  1. Возможность хранить в таблице неограниченое количество строк милиарды и более
  2. Возможность хранить в таблице неограниченое количесво данных Тб и более
  3. Возможность гибко размазывать нагрузку по всем шардам
  4. Возможность задать неграниченое количество частей разбиения
  5. Адаптер не зависит от БД, в качестве шардом может использоваться любая БД
  6. Возможность задания пользовательского алгоритма выбора шарда
  7. Эмуляция автоикрементного поля
  8. Интерфейс Zend_Db_Adapter

Ограничения:
  1. Во всех запросах требутся использовать поле по которому идет скайлинг.
  2. Не возможность выборки всех данных из таблицы
  3. Не возможность JOIN

Исходные коды: #svn/trunk/Vendor/Core/Db/Adapter

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