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

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

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

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

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

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

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Определите "обычный диск". Массив диска SAS со скоростью 15k RPM является "обычным" для высокопроизводительной базы данных, каждый диск в 3-4 раза больше IOPS, чем ваш обычный диск, но затем... с такой маленькой базой данных поместите ее в SSD на 512 ГБ и получите 50000 IOPS вместо 500 или около того, дает вам диск SAS 15k.

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

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

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

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

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

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

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

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

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

я бы сказал, что запуск mysql/sphinx под linux даст вам больше шансов увидеть и отследить "что происходит внутри".

Другие вопросы по тегам