[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по MySQL кешированию
radiante
Узкое место - работа с БД, сервер держит 20 тыс однотипных запросов к разным строкам БД в секунду, если больше то сервер не справляется, и

обычно используют кеширование вместо наращивания железа. Я представляю себе 2 вида такого кеширования:
1. если строки в БД не менялись, то значения берутся из кеша (обычно оперативки)
2. если считать что первый вариант не прокатит, потому что поля меняются или еще почему-то, и нужно все запросы реально направлять на MySQL

сервер, то в этом случае можно собирать запросы в куски и делать меньше запросов select к БД, т.к. они выполняются быстрее чем много мелких.

Вопрос такой: где уже реализовано кеширование второго типа (может оно уже встроено в memcashed или что то другое надо юзать, подскажите) ?



Спустя 1 час, 27 минут, 27 секунд (6.09.2011 - 22:18) kirik написал(а):
Цитата (radiante @ 6.09.2011 - 13:50)
1. если строки в БД не менялись, то значения берутся из кеша (обычно оперативки)

Именно так и поступает сам MySQL.

Цитата (radiante @ 6.09.2011 - 13:50)
если больше то сервер не справляется, и обычно используют кеширование вместо наращивания железа.

Обычно используется то, что дешевле во внедрении и обслуживании. И чаще всего это железо smile.gif

Какой движок БД используете?

Спустя 9 часов, 37 минут, 28 секунд (7.09.2011 - 07:55) linker написал(а):
Дешевле будет оптимизировать запросы и вообще попытаться сократить их количество. Ну и саму базу тоже по оптимизировать, индексы там, настройки самого мускула.

Спустя 4 часа, 17 минут, 40 секунд (7.09.2011 - 12:13) VELIK505 написал(а):
Цитата (radiante @ 6.09.2011 - 17:50)
Вопрос такой: где уже реализовано кеширование второго типа (может оно уже встроено в memcashed или что то другое надо юзать, подскажите) ?


Нету такого memcashed есть memcached и memcache Ставиться на сервер выделяеться оперативная память и в него ложаться sql запросы которые уже выполнялись по хеш ключу.
Снижает нагрузку таки раз в 15 если правильно использовать.

Спустя 25 минут, 20 секунд (7.09.2011 - 12:38) radiante написал(а):
Цитата (VELIK505 @ 7.09.2011 - 09:13)
Цитата (radiante @ 6.09.2011 - 17:50)
Вопрос такой: где уже реализовано кеширование второго типа (может оно уже встроено в memcashed или что то другое надо юзать, подскажите) ?


Нету такого memcashed есть memcached и memcache Ставиться на сервер выделяеться оперативная память и в него ложаться sql запросы которые уже выполнялись по хеш ключу.
Снижает нагрузку таки раз в 15 если правильно использовать.

ну опечатался просто)

приведу пример, чтобы было понятнее, опять же с учетом что узкое место БД (все цифры условные и показывают только суть): на сайте при пике одновременно сидит миллион человек на одной и той же php странице, каждая копия этого скрипа переодически по запросу пользователя делает выборку из БД, и скажем выходит 100 тыс уникальных незакешированных через memcached запросов в секунду, в итого сервер БД реально должен обрабатывать 100 тыс мелких запросов в сек, железо же тянет только 20 тыс таких запросов или 10 тыс более крупных подобных запросов где делается выборка сразу 10-и строк за один запрос (или тянет 5 тыс запросов по 100 строк). Решение: запросы к БД сначала обрабатывает промежуточный прокси сервер (да хоть самописный php скрипт куда передаются SQL запросы), собирая и склеивая запросы в один, и как только их число достигнет 10 (или 100) делается реальный SQL запрос в БД, а ответ снова разбивает на части и раздает нужные части ожидающим копиям той php страницы которая запросила данные. В итого при склеивании 10 запросов в один, страницы у пользователей будут открываться всего на 0,001 сек медленее, но зато теперь тоже железо потянет миллион юзеров онлайн, т.е. станет в 5 раз производительнее. При склейке 100 запросов, на 0,02 сек медленнее, но при том же пике сервер БД разгрузится в 5 раз, т.е. станет в 25 раз производительнее.

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

Спустя 2 часа, 25 минут, 59 секунд (7.09.2011 - 15:04) VELIK505 написал(а):
Тебе это пока рано и не зачем знать. Миллион человек у тебя сидит на 1 странице одновременно. Ты случайно не Павел Дуров?
Люди у которых сидит на 1ой странице Милион человек никогда не спросят как кешировать базу это во первых а во вторых где такая нагрузка там почти не используеться не mysql ни php.

Спустя 5 часов, 44 минуты, 4 секунды (7.09.2011 - 20:48) kirik написал(а):
Цитата (radiante @ 7.09.2011 - 05:38)
запросы к БД сначала обрабатывает промежуточный прокси сервер (да хоть самописный php скрипт куда передаются SQL запросы)

гы wink.gif Ага, а наш мега-пхп-скрипт конечно с удовольствием будет щёлкать миллионы запросов в секунду smile.gif

Кто вам вообще сказал что "склеенные" запросы будут выполняться быстрее?

Тут скорее нужно стремиться к тому, чтобы открывать небольшое количество постоянных подключений к СУБД и гонять запросы через них. С помощью php это сделать не выйдет (не говорите ничего про mysql_pconnect)..

Вообще чего вы к этому мемкэшу и mysql'ю привязались. Есть ведь redis, memcacheDB - их вполне можно юзать как быстрые постоянные хранилища.

Спустя 11 часов, 14 минут, 10 секунд (8.09.2011 - 08:03) linker написал(а):
MongoDB забыли исчо. А исчо есть HandlerSocket.

Спустя 7 минут, 47 секунд (8.09.2011 - 08:10) kirik написал(а):
У MongoDB был лимит в 2ГБ и максимальный размер объекта 4МБ, не знаю как сейчас, но меня в своё время это остановило smile.gif

Спустя 24 минуты, 19 секунд (8.09.2011 - 08:35) linker написал(а):
kirik
Сейчас всё более слаще.

Спустя 23 часа, 26 минут, 53 секунды (9.09.2011 - 08:02) radiante написал(а):
Цитата (VELIK505 @ 7.09.2011 - 12:04)
Тебе это пока рано и не зачем знать. Миллион человек у тебя сидит на 1 странице одновременно. Ты случайно не Павел Дуров?
Люди у которых сидит на 1ой странице Милион человек никогда не спросят как кешировать базу это во первых а во вторых где такая нагрузка там почти не используеться не mysql ни php.

во первых, что мне надо знать а чего не надо я решу сам.

во вторых, у павла дурова не сидит миллион человек, ибо он не владелец контакта.

в третьих facebook и многие другие крупные сайты написаны на php

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

и наконец, что за привычка обсуждать успех других в свете, да не может быть, не получиться, ты к ним точно не относишься. уровень разный просто, я раньше был программистом, сейчас у меня другие заботы, но я привык понимать все детали, открой сначала бизнес в сша, придумай оригинальную идею, заработать хоть миллион, тогда поговорим. и не тупи, я сразу написал "все цифры условные" !!! реально миллион не сидит, переделка делается на вырост в след году. а подобные темы на форумах как ни странно бывают наталкивают на интересные идеи или помогают найти людей которые не говорят "не бывает" а просто делают, таких людей и берут на работу крупные компании.

а вообще решение найдено, даже несколько. всем спасибо за участие!

Спустя 2 минуты, 15 секунд (9.09.2011 - 08:04) kirik написал(а):
Цитата (radiante @ 9.09.2011 - 01:02)
а вообще решение найдено, даже несколько. всем спасибо за участие!

Поделиться не хотите?

Спустя 1 час, 9 минут, 53 секунды (9.09.2011 - 09:14) radiante написал(а):
Цитата (kirik @ 9.09.2011 - 05:04)
Цитата (radiante @ 9.09.2011 - 01:02)
а вообще решение найдено, даже несколько. всем спасибо за участие!

Поделиться не хотите?

Даже мои глупые фантазии уже реализовали, и склейку запросов тоже)

ГОТОВОЕ РЕШЕНИЕ - http://lib.custis.ru/%D0%A3%D0%B2%D0%B5%D0...B2,_ADD-2011%29

Фантазия всегда приводит к лучшим решениям! Даже если все вокруг считают ее бредом)))

Упрощенное теоретическое описание подобного решения NoSQL:

Несколько серверов соединены в локальную сеть, на них раскидана БД случайным образом. Каждый запрос от пользователя проверяется, если ответ не в кеше, тогда большой склеенный запрос уже идет в БД. Делается это так: идет запрос php-страницы от пользователя, она запрашивает данные у особой прокси-функции, причем передаются только ключи с номерами процессов запущенных php-скриптов (просто пары чисел), прокси-функция собирает ключи в отдельные списки, исходя их таблицы ключей в оперативке. Собираются по два списка для каждого физ.сервера: список ключей, строки которого в кеше этого сервера и списки ключей по которым надо запрашивать БД. Таблица: ключ = адрес в памяти + смещение, по этому адресу записан номер физ. сервера где и находится нужная строка, а также кеш-бит определяющий в кеше ли данная строка по этому ключу или нет. Собираемые списки также хранятся в оперативке. По истечению заранее установленного некритичного для пользователя времени ожидания или при достижении заранее установленной макс.длинны списка, очередной собранный список (пары чисел ключ-процесс, а также один параметр кеш-бит для всего списка) асинхронно отсылается на нужный физ.сервер по сети, там и делается крупный запрос в БД и потом добавляются данные в кеш БД этого сервера, это конечно если запросили данные не из кеша, иначе сервер сразу отсылает нужные данные назад по сети (асинхронно, т.е. пока ждем ответ собираем новый список для этого физ.сервера), полученный второй прокси-функцией ответ из сети, парсится, помечается кеш-бит для каждого ключа в таблице (если на удаленном сервере данные были добавлены в кеш), и раздает ожидающим процессам по их номерам. Чем больше нагрузка тем эффективнее система. Также снижается нагрузка на сокеты и сетевой канал в распределенной системе.

Спустя 22 минуты, 20 секунд (9.09.2011 - 09:36) kirik написал(а):
radiante
спасибо за ответ!

Цитата (radiante @ 9.09.2011 - 02:14)
ГОТОВОЕ РЕШЕНИЕ

Так это не есть то о чём вы спрашивали. "склейки" тут не видать. Да и заголовок какой-то "жёлтый" smile.gif Нет, я не могу сказать ничего плохого (и хорошего) по поводу HandlerSocket (бо не юзал), но в любом случае узким местом будет дисковая подсистема.

Спустя 38 минут, 38 секунд (9.09.2011 - 10:15) linker написал(а):
Ну так я где-то выше говорил про HandlerSocket.
Быстрый ответ:

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