Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.19.56.45] |
|
Сообщ.
#1
,
|
|
|
Вот возник вопрос. Есть веб-приложение, с БД. В БД 100 000 записей. В приложении есть форма поиска по этим записям - фильтр по 10 полям, в каждом из полей либо "Все", либо конкретное значение. Вывод результата постраничный.
Вот придёт на сайт 100 человек и одновременно нажмут поиск - проект ляжет. Что делать? Ведь поиск по 100 000 записям имхо не очень легкая задача, и закешировать тут не очень понятно что. Но ведь люди то как-то справляются Может задача на самом деле легкая и грамотный запрос сможет выполниться 100 раз за секунду? Или для всех, кроме меня, очевидно что тут можно закешировать? |
Сообщ.
#2
,
|
|
|
Это несложная задача на самом деле. Многое еще зависит от движка БД.
Как вариант: сделать 1 текстовое поле и туда через пробел заносить все атрибуты (которых 10 штук). А потом полнотекстовый индекс по этому полю + поиск. Кроме того, 100000 записей должны довольно нелсожно помещаться в ОЗУ. |
Сообщ.
#3
,
|
|
|
Цитата deil @ Sphinx без проблем обработает столько Может задача на самом деле легкая и грамотный запрос сможет выполниться 100 раз за секунду? Цитата Soul @ 100К записей - это не так уж и много. Возможно даже мускуль выдержит Это несложная задача на самом деле. Многое еще зависит от движка БД. |
Сообщ.
#4
,
|
|
|
Ты такой вариант с текстовым полем уже проворачивал? Со стороны звучит страшновато
|
Сообщ.
#5
,
|
|
|
Читал в книжке по оптимизации производительности для MySQL от ряда авторов, один из которых - Петр Зайцев - CEO Percona, и бывший разработчик MySQL как раз по производительности. Думаю, он знает толк в извращениях .
ЗЫ Писали они это в применении к Sphinx, в остальном - в точности твой случай. Только критериев побольше и база пообьемнее. Добавлено А вообще - перенесите эту тему в раздел по соответствующей БД. |
Сообщ.
#6
,
|
|
|
Цитата Soul @ кхм. а Sphinx тут каким боком? ЗЫ Писали они это в применении к Sphinx, в остальном - в точности твой случай. |
Сообщ.
#7
,
|
|
|
Таким, что в оригинале, поле с аттрибутами предлагалось индексировать сфинском. Это не говоря уже о том, что в нем есть целочисленные теги, которые тоже могут быть проиндексированы, но отдельно, если ничего не путаю.
|
Сообщ.
#8
,
|
|
|
Ясно... примерно...
Цитата Soul @ Ну как бы да, им можно проиндексировать мускульные поля и необязательно целочисленные... И потом выборки делать, даже не очень простые... Это не говоря уже о том, что в нем есть целочисленные теги, которые тоже могут быть проиндексированы, но отдельно, если ничего не путаю. |
Сообщ.
#9
,
|
|
|
Если не ясна идея, могу написать подробнее, только уже после НГ, наверное.
|
Сообщ.
#10
,
|
|
|
Кстати, дейл зрит в корень, т.к. заюзать поиск - это очень популярный способ DDOS атак
100 000 записей - это мало, возможно и специально оптимизировать ничего не нужно, и пользоваться тем, что из коробки. На больших объёмах задачу просто параллелят на несколько - она параллелится идеально. |
Сообщ.
#11
,
|
|
|
Цитата Soul @ Добавлено А вообще - перенесите эту тему в раздел по соответствующей БД. Нене. Тут нет конкретной БД и не только о ней разговор. Добавлено Цитата Бобёр @ Кстати, дейл зрит в корень, т.к. заюзать поиск - это очень популярный способ DDOS атак 100 000 записей - это мало, возможно и специально оптимизировать ничего не нужно, и пользоваться тем, что из коробки. На больших объёмах задачу просто параллелят на несколько - она параллелится идеально. Дык! Проблема то из жизни Как эта задача параллелится? Мне срочно нужна доза новой информации. |
Сообщ.
#12
,
|
|
|
Цитата deil @ Тебя практическое применение интересует или теоритически - как индекс строится, выборка делается, мержится и тп? Мне срочно нужна доза новой информации. |
Сообщ.
#13
,
|
|
|
Интересует теория для начала
|
Сообщ.
#14
,
|
|
|
Ну смотри, задача поиска строки по критерию в строках от 0-ой до 100 000-ой разбивается на две - поиск от 0 до 4999, и поиск от 50000 до 10000. Ну а дальше становится понятно - строки от 0-ой до 49999-ой выносятся на 1 сторадж, от 50 000 до 100000 - на другой. Поищи по ключевому слову "шардинг".
|
Сообщ.
#15
,
|
|
|
Аааа, в этом смысле..
|