Назад | Перейти на главную страницу

какой сервер (ы) я должен использовать для своего приложения? (MySQL DB и Sphinx 300 ГБ)

Возможный дубликат:
Можете ли вы помочь мне с планированием моей мощности?

Я написал приложение, которое использует MySQL и Sphinx для поиска и хранения информации.

приложение содержит базу данных размером 300 ГБ (в основном текст, средний текст и символы var). мой индекс сфинкса весит 30 ГБ.

Моя проблема была сформулирована, когда я планировал иметь 100 ГБ ~ БД, а теперь у меня есть 300 ГБ, которые нельзя загрузить в память (?).

Я ищу лучшую архитектуру, которая даст мне максимальную производительность.

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

Чтобы получить максимальную производительность, я использовал сервер Xeon i7 W3520 с 2 дисками SSD (оперативная память 24 ГБ) для MySQL, это не дешево, и мне не хватает места, и я не могу добавить больше дисков, поэтому мне нужен другой сервер.

Как вы думаете, сильно ли повлияет на производительность, если я буду использовать сервер с обычными дисками для mysql? Я знаю, что мне нужны быстрые диски для поиска сфинкса (это моя полнотекстовая поисковая система), я использую индексированное поле (ID) для выбора строк из БД без каких-либо сложных запросов, мне может потребоваться разместить БД на более дешевый сервер с достаточным объемом памяти.

ты можешь найти мое узкое место? Приложение .NET требует в основном ОЗУ и ЦП, БД требуется много места и / или ОЗУ, а сфинксу нужны быстрые диски и ОЗУ.

  1. можно ли загрузить индекс MySQL в ОЗУ?
  2. что я могу сделать, чтобы уменьшить размер БД, если 300 ГБ?
  3. будет ли сервер с более медленными дисками сильно влиять на производительность? (Я не могу протестировать его, не потратив сотни долларов на оборудование).
  4. имеет значение, использую ли я Linux или Windows для MySQL?

Я ищу лучшую архитектуру, которая даст мне максимальную производительность.

В чем тут вопрос? Не поймите меня неправильно, но есть только ОДИН способ сделать это - поместить базу данных на самый быстрый SSD, который вы можете получить.

Может ли это иметь смысл? Понятия не имею, но вам нужен не достаточно быстрый сценарий, а ВЫСОКАЯ производительность.

и теперь у меня есть 300 ГБ, который нельзя загрузить в память (?).

Вы знаете, это неправда. Сервер на 512 ГБ по сегодняшним меркам не очень большой.

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

Конечно, будет. Обычно IOPS - производительность ввода-вывода - является ограничивающим фактором для базы данных, когда база данных не загружена в RAM.

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

Определите «обычный диск». Массив дисков SAS 15k RPM является "обычным" для высокопроизводительной базы данных, каждый диск примерно в 3-4 раза больше IOPS, чем ваш обычный диск, но затем ... с такой МАЛЕНЬКОЙ базой данных поместите его в SSD 512 ГБ и получите 50 000 операций ввода-вывода в секунду вместо 500 или около того, которые дает диск SAS 15 КБ.

БД требуется много места и / или ОЗУ, а сфинксу нужны быстрые диски и ОЗУ.

ЛЮБАЯ база данных, которая не заполняет все данные из ОЗУ, обычно ограничена дисками, в основном потому, что диски ужасно МЕДЛЕННО МЕДЛЕННО МЕДЛЕННО. Самая быстрая дисковая подсистема является стандартной при установке больших баз данных, но у вас небольшая база данных, поэтому достаточно простого SSD. К сожалению, это ВСЕ ЕЩЕ намного меньше производительности, чем RAM.

что я могу сделать, чтобы уменьшить размер БД, если 300 ГБ?

Понимаете, это крошечный? У меня дома есть база данных на 850 ГБ, а моим последним проектом была база данных на 21000 ГБ. В зависимости от того, что я делаю с некоторыми данными, к которым у меня есть доступ сейчас, я получаю 44000 ГБ сильно сжатых данных, которые мне нужно будет обработать. 300gb - это мало для "получения памяти".

имеет значение, использую ли я Linux или Windows для MySQL?

Может быть, это так, но для ЭТОГО вопроса это совершенно неуместно. Windows может иметь - в зависимости от конфигурации - большие накладные расходы, но это не имеет значения. Когда вы имеете дело с подобными системами, жесткое указание дополнительных 128M накладных расходов не имеет никакого значения.

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

Может быть, вам поможет простое добавление правильной индексации данных?

возможно, ввод-вывод действительно является вашим пределом, но, возможно, у вас много свободных циклов ЦП, и простое сжатие больших двоичных объектов, хранящихся в базе данных, может увеличить коэффициент попадания в кеш-память за счет [де] сжатия на лету, что, вероятно, будет незаметно.

Я бы сказал, что запуск mysql / sphinx под Linux даст вам больше шансов увидеть и отследить, «что происходит внутри».