SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.11.2013 00:49:38

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Создание производительной БД при поиске

Привествую всех форумчан и Администраторов замечательного форума!
Хотел бы получить от вас советы, подсказки, а может и конкретные предложене касательно создания БД, которая обеспечила б надежное хранение данных, а самое главное, предоставила быстрый поиск данных.
Задум следующего характера:
Предположем, есть огромная база данных, по которой нужно произвдить поиск нужной информации.
Эта база данных постоянно будет разрастаться. К примеру, в нее будут загружаться прайсы товаров или ж другими способами пополняться данные (к примеру те самые краулеры, которые собирают информацию из web). Так вот, необходимо правильно спроэктировать БД, чтобы затем построить эффективный алгоритм поиска.
Здесь я не в даюсь в детали, просто хочеться услышать мнение более опытных разработчиков которые работали с терабайтными массивами данных и производили по них поиск.
Разумеется, здесь можно применить много методик (секционирование, или построение индексов и т.д...)
Так вот, что посоветуете: какой движок выбрать, как обеспечить максимальную производительность при поиске информации в огромных массивах данных - тоисть все сводиться к тому, чтобы изначально правильно спроэктировать такое хранилище.
Я понимаю, мои вопросы имеет более абстрактный подход, но все таки хочеться услышать мнение других - чтобы затем двинаться в правильном русле...
Да здравствует великий Google, который сумел создать мировое хранилище всей информации  smile ведь они смогли это сделать...

Спасибо!!!

Неактивен

 

#2 30.11.2013 15:36:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Создание производительной БД при поиске

yuriy, Вы задали очень много вопросов, даже сразу не понятно сколько именно. Вопрос о надежности хранения решается дублированием информации и бэкапом (все зависит от базового решения). Как гугл и другие достигли эффекта - быстрее всего понять из докладов конференции Highload (если будете приобретать доступ к онлайн-просмотрам, используйте код Rty10, который дает скидку 10% - он работал во время конференции и, надеюсь, еще работает). Хотел сказать, что это не реклама, но это реклама, так как мы сотрудничаем с Highload, но все равно там наиболее развернутый ответ на вопрос об архитектуре высоконагруженных систем.

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

Неактивен

 

#3 30.11.2013 19:22:26

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание производительной БД при поиске

Скажите, пожалуйста, что вы думаете касательно создания кластирных индексов?
Читал, что они позволяют во многом ускорить чтение данных при больших объемах.
И еще, подскажите, какую лучше использовать СУБД для работы с большими объемами данных. MySQL не самый лучший вариант построение архитектуры... куда копать?
Спасибо!

Неактивен

 

#4 30.11.2013 19:41:12

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Создание производительной БД при поиске

Сравниваете производительность для конкретной задачи. Кластерные индексы (в Innodb), если грубо, то ускоряют, если работаете с первичным ключом и данные большие (в каждой записи).
Вы не сказали какая задача, а спрашиваете про решение. MySQL подходит и для больших объемов и для больших нагрузок, например, см. мой доклад http://sqlinfo.ru/a/i/rubtsov_xtables.ppt
другие базы также можно использовать. Опять не реклама, но советую посмотреть труды хайлоад, там представлены разные работающие решения.

Неактивен

 

#5 30.11.2013 22:00:18

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание производительной БД при поиске

Планируется создать базу данных для загрузки прайсов, размеры которых будут большими. Соотвественно, перед тем как начинать разработку хотелось сначала определиться какую из СУБД выбрать. Если вы говорите что MySQL вполне справиться с терабайтными данными, - это обнадеживает. Тогда вопрос: Таблица содержит сотни миллионов записей. Производить поиск по определенному полю табл. (даже если использвть индексы с использованием опретора LIKE %), наверное очень напряжно будет? Здесь, навреное нужен определенный алгоритм поиска (поиск на по саммым данным, а по хешу, как вариант)...

Неактивен

 

#6 01.12.2013 00:52:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Создание производительной БД при поиске

поиск по внутреннему (объемному) содержимому прайсов или по каким-то метаданным?

Неактивен

 

#7 01.12.2013 01:27:36

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание производительной БД при поиске

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

Отредактированно yuriy (01.12.2013 01:28:54)

Неактивен

 

#8 01.12.2013 01:48:53

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Создание производительной БД при поиске

То есть поиск идет по данным, которые не занимают большой объем, а больший объем занимают некие данные, в которых искать нельзя? В этом случае миллионы строк - это не много. Какой объем тех данных, в которых нужно будет искать?

Неактивен

 

#9 01.12.2013 01:59:45

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание производительной БД при поиске

Ситуация в следующем: есть табл. к примеру 6-тью полями. Поиск планируется производить по 2-ум полям (это название товара и его код - артикул). Пользователь вбивает запрос, система должна выдать релевантный ответ (учитывая поиск по 2 полям).
Остальные  поля - это скажем дополнительная информция по которой поиск не будет проводиться она будет выводиться уже при результатах поиска.
Сколько будут занимать данные, не готов вам сказать - но учитывая то, что в 1 прайсе может содеражться порядка сотен тысяч позицый умноженое на десятки тысяч пользователей - цифра получается не малая... так вот, если в расчет брать БД MySQL - движок myisam + не использовать никаких объединений + индексы, то при штатном поиске с помощью оператора LIKE % - трудно сказать, что поиск будет быстрым... не знаю, правда, нужно безусловно тестировать, - но это как мне кажеться не совсем хорош подход для построения модели...((( для этого используется навреное другой подход, но вот какой, пока не знаю еще...

Отредактированно yuriy (01.12.2013 02:01:22)

Неактивен

 

#10 01.12.2013 15:21:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Создание производительной БД при поиске

Прошел год, но добавить что-то конструктивное к этому обсуждению сложно
http://sqlinfo.ru/forum/viewtopic.php?id=6178

Неактивен

 

#11 01.12.2013 20:05:54

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Создание производительной БД при поиске

Уже добавили)))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson