Нужен совет. Как справиться с множественными подключениями к БД

Discussion in 'PHP' started by dima.london, 23 Oct 2011.

  1. dima.london

    dima.london New Member

    Joined:
    25 Jun 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Ребята, я знаю, тут собрались толковые программисты. Нужен совет.

    Заказали мне проект наподобие Твиттера. Программная часть почти готова, и 1 ноября я собирался запустить его в работу, но решил повременить с этим, т.к. думаю перекроить архитектуру БД, и разнести все основные сервисы по отдельным базам. То есть чтобы на каждый сервис (профили юзеров, фотоаватары юзеров, блоги юзеров, форумы юзеров, чаты юзеров, конференции юзеров) была своя база данных.

    Ни разу не пробовал реализовать это, вот советуюсь, как правильно это сделать. Все БД по идее будут располагаться на разных серверах, а пока денег нет на это - все будет на одном сервере. Насколько трудно для одного сервера будет, если на одной странице будет подключаться сразу 5-6 баз данных? Возможно, какие-то мануалы на русском языке почитать, или видео посмотреть какого-то умного докладчика...

    Заранее хочу уточнить, что данные я кеширую в мемкеш на очень длительный срок, и запросы на чтение (SELECT) производятся крайне редко. Нагрузка происходит только при записи/перезаписи данных. Меня интересует проблемность единовременного множественного подключения и, желательно, снижение нагрузки с записи/перезаписи посредством очередей запросов.

    Проект должен быть по дефолту крайне высоконагруженным. Работаю над подобным первый раз, поэтому по голове сильно не бейте.

    Разносить БД на несколько суб-БД я, наверное, буду в любом случае, ибо считаю, что если, к примеру, в данный момент, происходит большая нагрузка на сервис блогов (очень много пишут и голосуют), и БД этого сервиса дошла до критической нагрузки, я искусственно притормаживаю этот сервис "Мы перегружены, подождите пару минут", а все остальные сервисы, БД которых чувствуют себя нормально, должны функционировать в обычном режиме.

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

    К тому же, даже если ставить лимит запросов на сервере 200 тыс/мин, для шести сервисов, это очень и очень мало, даже с учетом горизонтальной масштабируемости (не более 1 млн записей в каждой таблице). А так выходит, по 200 тыс запросов в минуту на каждый из 6 сервисов, что в 6 раз снижает нагрузку.

    Это сугубо мое мнение. Я просто высказал свое видение реализации этого проекта. Поправьте меня.
     
    #1 dima.london, 23 Oct 2011
    Last edited: 23 Oct 2011
  2. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    1. Используй постоянное подключение к БД.
    2. Не важно, какую БД используешь - важно её правильно настроить.
    3. Если проект очень посещаемый, постарайся минимизировать работу с БД, сессиями. В некоторых случеях лучшим выбором будет воспользоваться прямым доступом к кукам.
    4. БД должна располагаться на отдельном компе, и ничего больше. Лучше воспользоваться минимальным ПО. FreeBSD будет лучшим вариантом.

    Возможно придётся использовать разные компы с БД.
     
  3. dima.london

    dima.london New Member

    Joined:
    25 Jun 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    и все же крайне важна для меня информация, как организовать очередность запросов в случае перегрузки основного сервера БД?