Как работать с большими БД для web-проектов?

Qest
На сайте с 21.10.2010
Offline
40
725

Вебсайт, имеются несколько больших БД по 10~20 миллионов записей. Использую связку php-mysql

В таком случае если нужно сделать выборку SELECT хотябы из одной базы то это занимает до нескольких минут.

Поставил Sphinx, с поиском все замечательно, вот только нет live update, а мне нужно чтобы когда вноситься новая информация или изменяется старая то это сразу было в работе. То есть как на тут к примеру когда я создаю новую тему или новое сообщение я сразу могу его/ее видеть, а у сфинса нужно обновлять индексы для этого.

То есть как имея миллионы записей на том же серче все так быстро индексируется?

Подскажите пожалуйста инструменты, способы работы с большими БД. То есть мне нужно сдлеать максимальную скорость выборки SELECT (INSERT, UPDATE тоже нужно, но второстепенно), причем чтобы ДБ был live, то есть если вноситься информация то она сразу может быть использована. Может быть другие БД использовать не mysql…

И еще, можно ли хотябы примерно сказать зависимость обработки подобных запросов от наличия ОЗУ. То есть грубо говоря 2ГБ RAM — 2 минуты, 4ГБ RAM — 1 минута. Интересует хотябы примерная зависимость.

N
На сайте с 06.05.2007
Offline
419
#1

Qest, точно так же как и с маленькими, только думать придется чаще.

И на самом деле обновление информации есть даже в sphinx. Но не обязательно нужно бросаться реализовывать это, когда можно продумать структуру обычной бд mysql.

Кнопка вызова админа ()
TF-Studio
На сайте с 17.08.2010
Offline
334
#2

10-20кк - это не большая база.

Скорее трабл в архитектуре базы и приложения.

select на минуту...

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
E
На сайте с 21.09.2009
Offline
283
#3

Qest, была база правда малюсенькая по сравнению с Вашей всего 600к записей. Тормозила когда переписал в mysql. Оказалось не было первичных ключей. Тоесть mysql как объяснили в подобной ситуации при селекте сначала высчитывает первичные ключи а потом уже выборку делает. Может у Вас так?

IL
На сайте с 20.04.2007
Offline
435
#4
Qest:
Поставил Sphinx, с поиском все замечательно, вот только нет live update, а мне нужно чтобы когда вноситься новая информация или изменяется старая то это сразу было в работе. То есть как на тут к примеру когда я создаю новую тему или новое сообщение я сразу могу его/ее видеть, а у сфинса нужно обновлять индексы для этого.

Хранить время построения индексов у сфинкса и дополнительно к уже имеющемуся поиску, в _базе_ искать данные, которые сохранены после.

То есть мне нужно сдлеать максимальную скорость выборки SELECT

Если в этой выборке нет километровых JOIN-ов без индексов и поиск по индексу, несколько млн записей вполне нормально отрабатывают. И да.. у MySQL настройки "из коробки"? К примеру, индексы в памяти умещаются? В любом случае - включать slow_log, про EXPLAIN вроде Вы в курсе..

И еще, можно ли хотябы примерно сказать зависимость обработки подобных запросов от наличия ОЗУ. То есть грубо говоря 2ГБ RAM — 2 минуты, 4ГБ RAM — 1 минута. Интересует хотябы примерная зависимость.

"подобных" чему? Вообще, корректнее говорить про ресурсы, выделенные именно для MySQL.. и именно для нужд запроса.. Скорее всего, нужные для запроса индексы уместятся и в 1Гб ))

p.s. Ну не.. конечно, если получится всю базу в памяти разместить - конечно, будет быстрее

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S5
На сайте с 04.01.2010
Offline
77
#5

innoDB + праймари кеи + мускул на отдельную машину

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий