|
|
|
| Здравствуйте.
вопрос чисто концептуальный
интересует как строятся базы данных в которых очень много информации и к которым очень часто идут запросы
например взять MySQL то там есть четкое ограничение по количеству одновременных запросов
но ведь все таки как-то такие проблемы решаются
в контакте же есть поиск среди 150 миллионов человек по фильтрам
очевидно надо думать в сторону создания не одной БД а нескольких
чтобы при увеличении количества информации и запросов кидать запросы на разные серверы
чтобы не так абстрактно говорить допустим есть задача когда есть оч много пользователей и сообщений между ними (аналог почтовика)
у каждого есть входящие и исходящие сообщения
если все это хранить в одной БД на одном сервере, то при определенном количестве сообщений и запросов к базе она не выдерживает нагрузки
а если баз данных много то как быть с общей статистикой - количество входящих сообщений, количество исходящих, сортировкой по дате и т.д. | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(09.03.2011 в 17:52)
| | Есть разные решения, одно из них заключается в использовании репликации, когда вы ставите один сервер на запись, причем снабжая его таблицы типом вроде Archive, для которого INSERT срабатывает очень быстро (минус все ключи, что тоже ускоряет добавление данных), а с этого сервера данные реплицируются на пул других серверов, с типом таблиц для быстрого выполнения SELECT-запросов, например, MyISAM (плюс все ключи, что тоже ускоряет выборку). Таких серверов может быть десятки, они соединяются с персональными Web-серверами, которых тоже может быть десятки. Т.е. многие пользователи разбросаны по многим серверам, да таблицы объемные, но к серверу обращаются не так много посетителей и сервер заточен как раз под эти операции. Такая архитектура позволяет убрать противоречие в оптимизации INSERT и SELECT-запросов. | |
|
|
|
|
|
|
|
для: cheops
(09.03.2011 в 18:21)
| | спасибо за ответ
теперь хоть понятно по каким ключевым словам гуглить | |
|
|
|
|
|
|
|
для: cheops
(09.03.2011 в 18:21)
| | Если использовать репликации то станет вопрос с передачей информации между сайтом и репликой
на первый взгляд проще всего использовать прямое соединение сайта с БД реплики, так ли это? есть ли другие варианты? | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(10.04.2011 в 15:01)
| | В высоконагруженных системах у вас Web-сервера всегда стоят на одном/одних сервере, а базы данных на другом/других. Иначе просто нельзя будет настроить сервер на эффективную работу и базы данных и Web-сервера.
PS Там даже не вопрос передачи возникнет, как правило, результат запросов не очень большой, чтобы вызывать перегрузку сети. Может возникать запаздывание развертывания информации на слейв-серверах, если они менее мощные, чем мастер-сервер (особенно в версиях ниже 5.1, где нет построчной репликации, только позапросная). | |
|
|
|
|
|
|
|
для: cheops
(10.04.2011 в 16:16)
| | я правильно понимаю в скриптах к которым обращается пользователь делать прямой коннект к одной из БД и селект запросы (для реплик)?
а в случае с основным серевером инсерт и апдейт запросы?
или же используются другие механизмы? | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(10.04.2011 в 16:51)
| | Да, все верно. | |
|
|
|