Какой сервер (ы) я должен использовать для моего приложения? (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 требуется в основном ОЗУ и ЦП, БД требует много места и / или ОЗУ, а сфинкс требует быстрых дисков и ОЗУ.
- Можно ли загрузить индекс MySQL в ОЗУ?
- Что я могу сделать, чтобы уменьшить размер базы данных, если 300 ГБ?
- сильно повлияет сервер с более медленными дисками на производительность? (Я не могу оценить его, не потратив сотни долларов на оборудование).
- имеет ли значение, если я использую 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 даст вам больше шансов увидеть и отследить "что происходит внутри".