[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по масштабированию
maximka787
Недавно получил заказ на систему, но предупредили, что она будет развиваться и расширяться.
Я нигде толком не мог прочитать как реализовать и решил сделать это на php+mysql
а решил я так. Посоветуйте, правильно ли.
Суть такая. Пишу вкратце:
connect_db($id); // функция подключения к бд. ставиться вначале кода.

function connect_db($id){

if($id<1000){
@ db = mysql_connect(хост1, $user, $pass);
mysql_select_db(первая база);
}else{
@ db = mysql_connect(хост2, $user, $pass);
mysql_select_db(вторая база);
}
}

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

_____________
..Работает - не трогай!
sharki
Можно использовать одновременно 2 базы, при соединении
mysql_connect(хост1, $user, $pass); ставь у каждого свой идентификатор т.е

$db1 = mysql_connect(хост1, $user, $pass);
$db2 = mysql_connect(хост2, $user, $pass);

а дальше при выборке или выборе БД 4тым или 3им параметром ставь свой идентификатор.
maximka787
Ну а вообще это верная идея? разграничивать базы данных?

Я приведу опять же пример:
1. Сервер php. Находится в одном месте всегда и к нему ведут множество каналов
2. Дальше написан механизм выбора БД описанный в этой теме выше, $db1 $db2
$db1 $db2 находятся на разных серверах

получается масштабируется только БД. Но как делать это с php. ведь все равно должен быть один единственный сервер распределения ресурсов и вывода информации?

Например, тот же гугл или другой гигант при получения запроса должен определить к какому серверу обратиться. Или там вообще полностью иной механизм реализации и php там не используется?

_____________
..Работает - не трогай!
sharki
Ну она будет верной наверное при соотношение 1:1 т.е комментарии это одна база фотографии это другая база и т.д...может у них стоит разветвление меж серверами, т.е как массив. О гугле я не знаю.


if($id<1000) Здесь подразумевается что если меньше 1000соединений то к этой и т.д...получается у тебя будет 2 базы с одинаковым содержимым?
Basili4
maximka787
подход в корне не верный
http://www.realcoding.net/articles/apache-...ttp-i-ajax.html

почитай что нибудь про кластер на mysql

_____________
Цитата
От постоянного сидения рядом с клавиатурой начинает болеть спина.


Делаю сайты, пишу скрипты php, js.
Basili4
maximka787
и еще срезу используй PDO ибо мускул это не идеал СУБД

_____________
Цитата
От постоянного сидения рядом с клавиатурой начинает болеть спина.


Делаю сайты, пишу скрипты php, js.
maximka787
Цитата (Basili4 @ 1.12.2010 - 11:29)
maximka787
и еще срезу используй PDO ибо мускул это не идеал СУБД

PDO, а это что? нужно использовать postgresql?

_____________
..Работает - не трогай!
maximka787
аа, я понял. работа будет проходить с одной БД, но в режиме класстеризации систему настроят один раз и информация будет бегать на разных серверах. По сути будет одна БД и можно использовать MYSQL.

_____________
..Работает - не трогай!
Basili4
maximka787
да. Но если будет переход на другую СУБД то устанешь вызовы mysql_ на другие менять лучше сразу PDO

_____________
Цитата
От постоянного сидения рядом с клавиатурой начинает болеть спина.


Делаю сайты, пишу скрипты php, js.
Dron19
можешь вообще второй идентификатор не подключать, а использовать функцию mysql_db_query(here your database, here your query);
задаешь параметр, первый с какой базой работаешь, а второй, строка запроса, обращение к таблицам и тд

_____________
PHP+MySQL - уже изучил, осталось всего лишь это:
C,C++,C#,JavaScript,Python,Ruby,Perl,OpenGl,DirectX,ASP.NET - Намерен учить все
kirik
Вообще класетризация mysql морока целая.. Проще прекрутить мемкэш или монгодб.
Тоесть сервер БД один, а кэширующих серверов много. Тогда не будет вопроса о синхронизации данных в разных базах. Это конечно тупое, но самое простое решение.
linker
Basili4
PDO всего лишь объектная настройка, для абстракции от используемого типа базы данных. Не путать жареное с вареным.

Лично у меня все запысано в шаблонах объектов и конфигах.

Для примера, допустим у меня есть шаблон MySQL-сервера, в котором создана база 'MainDatabase' и таблица 'MainTable'

servers.template.xml

<?xml cersion="1.0" encoding="utf-8"?>
<Templates>
<Template
Class="TMysqlServer"> <!-- Здесь указан объект какого класса -->
...
<Property Name="MainServer" />
...
<Template>
</Templates>

<?php

$Xml = TCore::apiCore()->apiCreate('TXml', array('Location' => 'servers.template.xml'));
$DataBase = $Xml->MainServer->MainDatabase;
$Objects = $DataBase->MainTable->apiSelect('TObject');

?>
Допустим решили перейти на MSSQL, меняем шаблон
servers.template.xml

<?xml cersion="1.0" encoding="utf-8"?>
<Templates>
<Template
Class="TMSSqlServer"> <!-- Здесь указан объект какого класса -->
...
<Property Name="MainServer" />
...
<Template>
</Templates>

а PHP-код остается тот же самый. Смысл и возможности я думаю очевидны.

_____________
Gear Framework
Gear Framework на Github
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.