Связать кучу бд MySQL

Discussion in 'PHP' started by BeasTeHbIw, 17 Apr 2017.

  1. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток!
    Возможно-ли связать кучу Баз Данных, чтобы любой из сайтов беря данные из одной бд, имел данных из всех других бд, которые как-то связаны между собой?
     
  2. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    т.е. сделать некую оптимизацию.
    Например, тысяче сайтов нужно иметь из бд таблицу bd_table, в ней нужные данные для всех серверов, соответственно, чтобы тысяча сайтов не коннектилась к одной бд, брать данные из одной бд, но которая связана с другими базами, которые вместе с собой.
     
    #2 BeasTeHbIw, 17 Apr 2017
    Last edited: 17 Apr 2017
  3. censored!

    censored! Green member

    Joined:
    2 Nov 2004
    Messages:
    1,160
    Likes Received:
    299
    Reputations:
    156
    Как вы эту "центральную" БД организуете - так все и будет. И каждый сайт будет или на прямую обращаться к этой удаленной БД (только надо разрешить удаленные подключения), либо будет работать через какой-нить промежуточный скрипт-шлюз (но будет задержка).
     
    _________________________
  4. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Расскажите подробнее, коем образом будет работать скрипт, соответственно как приблизительно вычислить задержку? (ведь сайтов может быть тысячи)

    Я, всё же спрашиваю немного о другом. Возможно ли связать между собой БД? Допустим тем же скриптом, но уже который будет нести нагрузку на цп, которым он обрабатывается. Т.е., есть у меня 3 сайта(а их может быть 3 тысячи, может и 3 миллиона...) и всем им нужна таблица bd_table, но чтобы не обращаться к одной бд и не нагружать её кучей запросов, возможно-ли как-то связать все таблицы между собой, но при этом каждый сайт будет обращаться к своей бд, но иметь общие данные с таблицами bd_table из всех бд?

    Т.е. в одной бд в bd_table три "данных", во второй еще три и в третей четыре, и чтобы каждый сайт имел в общей сложности 10 "данных", но при этом каждый обращается к разным бд.
     
  5. censored!

    censored! Green member

    Joined:
    2 Nov 2004
    Messages:
    1,160
    Likes Received:
    299
    Reputations:
    156
    На сервере где БД - лежит скрипт. Его задача принять какие-нить параметры, разобрать, сделать выборку, вернуть результат.
    Если сайт-клиент (который будет обращаться к этому скрипту-шлюзу) находится на другом хостинге - то задержка как раз в этой передаче данных.
    Чтобы в этой связке ускорить отображение информации - то на сайтах-клиентах надо кэшировать данные. Но тут надо смотреть на количество страниц которое у вас будет на каждом из 1000000 сайтов. Ибо может получиться, что тупо не хватит места. В этом случае вывод "на лету", но задержка.
    ...
    Самое простое (чтобы потом не запутаться и найти косяк если по какой-то причине что-то рухнет) - условно разделить сайты на десятки/сотни/тысячи (ну, или, по первой (двум, трем) буквам домена). Каждую порцию сажаете на свою БД. А общие таблицы на всем таком множестве БД обновляете через n-ый промежуток времени.
    ...
    Про связь разных таблиц тут: https://folkprog.net/sozdanie-svyazey-phpmyadmin/
    Но лучше держать все отдельно и общие обновлять. Т.к. простое всегда проще и стабильнее. Надежней. Особенно если где-то что-то отвалиться или надо подправить.
     
    _________________________
    BeasTeHbIw likes this.
  6. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Статью почитал, вроде понял, в ближайшее время возьмусь пробовать. :)
    Не понял про "лучше"?
    Моя мысль и есть держать отдельно, но иметь общие данные
     
  7. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    в zf2 из коробки есть возможность делать несколько адаптеров для разных баз. если пишете с 0 и еще не начали то можете посмотреть подходит ли вам. суть в том что можно работать с любым количеством баз из одного проекта создавая для них в конфиге отдельные адаптеры
    добовляешь в конфиге сколько надо адаптеров

    'adapter' => array('
    userfiles' => array(
    'driver' => 'Mysqli','database' => 'networks',
    'username' => 'root',
    'password' => 'root',
    'options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', PDO::MYSQL_ATTR_INIT_COMMAND => 'SET CHARACTER SET \'UTF8\''),

    и потом в модуле в модели
    public function getAdapter(){
    $config = new \Zend\Config\Config(include CONFIG_DIR . '/global.php');
    $adapter = new \Zend\Db\Adapter\Adapter (array('driver' =>
    $config->adapter["userfiles"]->driver,'database' =>
    config->adapter["userfiles"]->database,'username' =>
    $config->adapter["userfiles"]->username,'password' =>
    $config->adapter["userfiles"]->password, ));return $adapter;
    }

    и можешь работать таким обзаром с разными базами.
     
    #7 barnaki, 24 Apr 2017
    Last edited: 24 Apr 2017
Loading...
Similar Threads - Связать кучу MySQL
  1. GAiN
    Replies:
    3
    Views:
    7,637