|
|
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Last_AlienКак Вы относитесь к оптимальным бинарным деревьям поиска и построению системы на их основе?Деревья - это хорошо. :) Last_AlienДля примера пересечения 2млн.записей с атрибутом 1 и 10тыс.записей с атрибутом 2 и их пересечением в 100 записей, можно реализовать систему, поднимающую с диска максимум 122 записи при условии хранения значений атрибутов в самих записях. Увеличение кол-ва записей с атрибутами при том же их пересечении в 100 раз приведет к росту необходимой выборки до 138 записей.Учитываете ли Вы тот факт, что по условиям задачи у нас не два атрибута, заранее известных, для которых мы можем построить одно дерево (или два пересекающихся дерева), а 1000 атрибутов, и мы не знаем заранее, какие именно из них потребуются пользователю в запросе... Один пользователь возьмет из этой тысячи своих два атрибута, другой - два, три или сразу пять других. Поэтому просто обычное дерево или тривиальное решение под два конкретных атрибута нам не подходит. Я не в курсе - возможно у Вас есть решение, не завязанное на количество атрибутов, но из Вашего объяснения это не ясно. Вы слышали о такой структуре данных: k-d Tree? Она на каждом шаге построения дерева делит пространство по какому-то одному измерению. И это позволяет быстро локализоваться в пространстве, даже если оно многомерное. Однако, эта структура перестает эффективно работать при очень большой размерности пространства и она очень плохо работает с бинарными атрибутами, ведь их можно поделить только один раз. И главное - я не видел ни одного адаптивного и при этом гарантировано логарифмического варианта структуры данных, основанной на идее k-d дерева. :( А динамическое добавление (изменение) информации требуется по условиям задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:11 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНа практике это "переменное количество" на счет "раз" сворачивается в фиксированное, а данные уплотняются. Ну и дальше, как и сказал Последний Алиен, в ход идут оптимальные деревья и битовые маски.Снижение размерности - хорошая идея, которую часто обсуждают в статьях, но здесь нужно локальное снижение размерности, так как в разных областях общего 1000-мерного пространства есть свои и совсем разные гиперкубы, в которые упакованы не все, но многие точки этой области. Уверяю Вас, если именно для ВСЕХ записей как-то попытаться снизить размерность одним общим способом сразу с 1000 и до разумно маленькой величины - то это породит кучу очень медленных поисков на пользовательских запросах. Данные неоднородны, хотя они и не случайны (поэтому говорить о снижении размерности как о методе можно). Если у Вас есть идеи именно по адаптивному алгоритму, который бы сам снижал размерность для разных групп точек, делая это по-разному в разных областях простанства - что же, буду рад услышать, если согласны поделится идеями. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:23 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
sysprgТак же интересно, есть ли люди, которым приходилось решать конкретно задачу многокритериального поиска в сильно разряженной таблице с тысячами "столбцов" по сотням миллионов записей. Пусть и не с таким рейтом запросов...Привет, мне приходилось. Моя СУБД с таким работает, вот только решение несколько неадекватное, я отказался от таблиц. Моя субд - сетевая. Однако для вашей цели не подойдет - однопользовательская. ИМХО следует серьезно обдумать вариант реализации собственного движка под свою задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:30 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Привет, shuklin! Ты пишешь: shuklins> Привет, мне приходилось.урааааа!!! шуклин живой! я переживал. честно. -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:31 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
antandПожалуйста, ну очень Вас прошу, приведите хотя бы краткую постановку задачи с примерами и подайте ее людям для обсуждения. Ну, если не хотите ваших страшных тайн открывать, на которых Вы деньги будете зарабатывать на миллионах пользователей, приведите пример из другой области.Еще раз привожу пример. ---------------------------------------------------------------------- Для начала у нас есть база данных, в которой каждая запись содержит всего три атрибута - "тип товара", "язык" и "город". Тип товара может быть, например, "книга", "фильм", "песня" или, например, "атомобиль". Для медиа-продукции второй атрибут, "язык", говорит нам, на каком языке издана книга, какой язык в переводе фильма и т.п. Третий атрибут - это город, где этот товар выставлен на продажу. У нас есть 100 миллионов записей о товарах. Из них: - 2 миллиона записей относятся к городу "Нью-Йорк", - 100 тысяч разных записей имеют отношение к русскому языку, - 10 тысяч записей имеют тип "книга". Но всего-навсего 100 книг на русском языке продаются в Нью-Йорке, а остальные - нет. Их и хочет найти наш пользователь. Задача тривиальная, если мы заранее, зная специфику пользовательских запросов специально возьмем и построим в какой-нибудь существующей системе индекс по сочетанию полей {"тип товара", "язык", "город"}. А теперь переходим к полной постановке задачи - снимаем ограничение на количество атрибутов. Этих атрибутов - около тысячи. Причем они добавляются в процессе работы системы, время от времени. И мы не знаем заранее, КАКИЕ именно запросы будут интересны пользователю. У нас очень много пользователей с разными интересами и каждый из них ищет что-то свое, выбирая произвольные атрибуты из 1000 доступных... ---------------------------------------------------------------------- Что нам предлагают коммерческие СУБД в такой ситуации? В лучшем случае они нам предлагают построить индексы по каждому из атрибутов в отдельности (или индекс по паре {ID атрибута, значение}). И затем они будут оъединять списки или битовые маски, выполняя сложный запрос, включающий больше одного атрибута. В данном примере они возьмут самый короткий список - список книг (10 тысяч идентификаторов записей в базе) и начнут проверять, присутствуют ли эти же ID записей в списке русскоязычных товаров (100 тысяч элементов) и в списке продающихся в Нью-Йорке (2 миллиона элементов). Как именно это делается - слиянием ли списков, или пересечением битмапов - не важно. В любом случае это очень-очень медленная работа ПО СРАВНЕНИЮ С ИТОГАМИ - со 100 результирующими записями. Так происходит потому, что не зная заранее, по каким сочетаниям атрибутов будет искать пользователь, они вынуждены плясать от ОТДЕЛЬНЫХ атрибутов. ---------------------------------------------------------------------- Нужен же "пространственный" индекс, который даже в 1000-мерном пространстве быстро найдет пересечение и поднимет в память не намного больше данных, чем 100 результирующих записей. Он считает больше - чудес же не бывает, но не намного... Однако "стандартные" виды таких индексов 1). отсутствуют практически во всех коммерческих СУБД (кроме Postgress?) 2). не рассчитаны на пространства большой размерности 3). не рассчитаны на некоторые виды атрибутов, например, на бинарные. И как я понял за последние 5 лет никаких сдвигов в этой области в коммерческих СУБД не произошло и не наметилось. Значит нужно искать свое решение. Не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:48 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийа она всё не стоит и не стоит...Мимопроходящий, когда же ты наконец пройдешь мимо? Или сложности с выбором направления движения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:52 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
miksoft sysprgИ не предлагайте решения по сведению 1000-мерного пространства к двумерному через тривиальную укладку в две таблицы.А вы предлагаете хранить Терабайты пустоты?Нет, даже если хранить по столбцам, как предлагают в Sybase IQ, то этого не будет. Только индексации пространственной у них все равно при этом нет, к сожалению - поэтому решив проблему не хранения пустоты и динамического добавления столбцов, они увы не решают проблему быстроты поиска (хотя делают ad hoc поиск быстрее обычных СУБД, как они утверждают иногда в десятки и сотни раз быстрее). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 19:56 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий шуклин живой!Та куда ж я денусь. ))) Ващето лето было продуктивным. Несколько версий СУБД Cerebrum, Медовый месяц в симферополе под традиционными взрывами Украинских складов ... ))) А на самом деле просто время на флейм нету ((( Если чего - лучче меня почтой пинать. Всегда объясню как Cerebrum внутре устроен и зачем там неонки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:01 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Привет, sysprg! Ты пишешь: sysprgs> Мимопроходящий, когда же ты наконец пройдешь мимо? s> Или сложности с выбором направления движения?гюльчатай, открой личико, а?! (С) вдруг я тебя полюблю. с разбегу. -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:01 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
sysprg miksoft sysprgИ не предлагайте решения по сведению 1000-мерного пространства к двумерному через тривиальную укладку в две таблицы.А вы предлагаете хранить Терабайты пустоты?НетТаки объясните, пожалуйста, чем именно не нравится такой метод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:03 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
miksoftТаки объясните, пожалуйста, чем именно не нравится такой метод?"Физикой" процесса выполнения запроса. Возьмем мой пример, который приводился здесь. Выполняя поиск в предложенной Вами базе, ядро классической СУБД построит сначала список записей по "самому короткому" значению - список всех книг (10 тысяч элементов). Это компактная маленькая структура. Но затем они объединят его уже с более крупным и менее компактным списком записей, для которых "язык" = "русский" (100 тысяч элементов). Как именно они это сделают - не важно. Тут уже много работы, но это еще не самое страшное. У них останется, скажем, 1000 идентификаторов записей (книг на русском языке). Условно так скажем целых чисел, равномерно размазанных по числовой оси на интервале [0; 10^8]. И вот теперь они возьмут последний список из 2 миллионов элементов и начнут его сливать с этим коротким из 1000... Тут-то все и накроется (по быстродействию). А у нас в параллель идут десятки тысяч и сотни тысяч таких запросов (если Вам не нравится моя цифра в миллион). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:22 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
sysprg И вот теперь они возьмут последний список из 2 миллионов элементов , увидят что многовато будет (для этого ведется статистика) и сделают full scan по 1000 записей. Ващето ваша задача решается за O(1) но это O в практических случаях скорее всего окажеться больше чем обычные O(NlnN) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:28 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
miksoft sysprgИ не предлагайте решения по сведению 1000-мерного пространства к двумерному через тривиальную укладку в две таблицы. А вы предлагаете хранить Терабайты пустоты? В силу своей архитектуры Sybase IQ не хранит пустоту, очень быстро обрабатывает ad-hoc запросы, в том числе звездообразные, допускает несколько индексов на одну колонку и поддерживает до 45,000 колонок в таблице ("There may be performance penalties with more than 10,000 columns in a table"). Позволяет работать в кластере с shared disk архитектурой. Достаточно неплохое решение для данной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:56 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
sysprg Чернышев Андрей ЛеонидовичА почему Вы, sysprg, говорите про "индекс по одному упорядоченному набору полей" ? И не уточняете - сколько в среднем "атрибутов" имеют не пустые значения в каждой Вашей "динамической записи" ? Может всего 5 (5!=120). Проведите простейший эксперимент по поддержке n! сочетаний при индексировании "динамических записей", где n - число непустых атрибутов. Очень мало атрибутов (единицы) присутствуют именно в каждой записи. Однако многие атрибуты заполнены у большинства записей - таких около двух десятков. Не вижу между ними разницы с точки зрения ускорения поиска (атрибут заполнен у большинства записей или он заполнен строго у всех записей). А еще есть несколько десятков атрибутов, заполненных более чем у одного процента записей. Однако, при ста миллионах записей (прогнозируемое наполнение базы уже в первые годы работы) это означает, что несколько десятков атрибутов заданы для 1-5 миллионов записей. Остальные же атрибуты действительно "мало популярны" - им соответствует сотня, тысяча или десятки тысяч записей (из 100 миллионов). Если смотреть на значения атрибутов, то увы - есть такие значения, для которых объем выборки - миллионы или даже десятки миллионов записей. И эти значения будут часто фигурировать в запросах. Однако их пересечения могут быть удивительно компактны. В качестве иллюстрации я привел вымышленный пример базы товаров для какого-нибудь "ebay" - когда, например, есть 100 тысяч медиа-товаров, в атрибутах которых значится "русский язык", есть 10 тысяч товаров, которые классифицированы как "книга" (не важно, на каком языке) и 2 миллиона товаров выставлены на продажу в городе "Нью-Йорк". Однако в Нью-Йорке выставлены на продажу всего-навсего 100 русскоязычных книг... Но мы не знаем заранее, что заинтересует пользователя - и у нас нет заранее построенного индекса для свертки "город" * "язык" * "тип товара". Разных пользователей интересуют разные срезы... Чернышев Андрей ЛеонидовичЧто касается "добавления атрибутов в процессе работы", то это ничего не усложняет, если всегда индексируются все сочетания. Можно подумать об "интеллекте", основанном на простых статистиках, и не индексировать "маловостребованные" сочетания (при необходимости проиндексировать). И если уж распределять нагрузку, то именно по индексированию сочетаний.Да, возможно, что динамическая и при этом автоматическая (от статистики запросов) генерация нужных индексов - это хорошая идея. Но это не панацея - запросов будет много и они разнообразны - поэтому нужна и базисная структура, которая бы в любом случае неплохо справлялась с задачей БЕЗ дополнительных "частных" индексов. Если просто динамически строить индексы (и даже уничтожать старые по какому-нибудь LRU), то из-за разнообразия пользовательских запросов все время уйдет на генерацию этих самых индексов. И никакой памяти под них не хватит. Денормализация - вот что вас спасет. Сколько может быть атрибутов у одного товара ? ну десять, ну двадцать, ну тысяча. Заведите таблицу товаров, с тысячей полей для аттрибутов, и специальную таблицу переполнения для того 0.00001 % товаров с более чем 1000 атрибутов. У клиентов хранится описатель товаров, в котором для каждого товара прописаны возможные аттрибуты и колонки, в которых их искать - чтобы не было запросов вида "col100=12345 OR col101 = 12345 OR ..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:17 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Привет, Выбегалло! Ты пишешь: ВыбегаллоВ> Денормализация - вот что вас спасет. зуб даёшь, что аффтар знаком с нормализацией, как таковой вааще? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:21 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
guest_20040621> А вы у нас, стало быть, столичная штучка. Комплексуете? Бросьте. Зато, видимо, Вы первый, кому социальные службы по работе с умственно отсталыми нашли работу dba. > "пикобайтным" хранилищем Дружище, "пико" - это 10^-12. Оптимисты работают в этой социальной службе. И работодатель Ваш - оптимист. Ах, пардон, обшибся. Всего лишь петабайтное хранилище. Ну откройте же мне, отсталому дба из мухосранска - что сказал вам знакомый провайдер по поводу бэкапов на ленту ? типа business contingency план у него имеется ? и это хороший план, забористый ? позволяет влехкую восстановить его петабайтный варехауз буквально за пару минут, пользуясь парой стримеров и дисководом для пятидюймовых дискет ? Не томите, проковыряйте шашкой своей мудрости дырку в черной завесе моего невежества, дабы яркий свет сокровенного знания бэкапов озарил убогий ландшафт социальных служащих ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:31 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий Привет, Выбегалло! Ты пишешь: ВыбегаллоВ> Денормализация - вот что вас спасет. зуб даёшь, что аффтар знаком с нормализацией, как таковой вааще? -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ну, на гугле ж его не забанили ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:32 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
shuklin sysprg И вот теперь они возьмут последний список из 2 миллионов элементов , увидят что многовато будет (для этого ведется статистика) и сделают full scan по 1000 записей.Да, согласен - может быть и так. И так как именно пространственную локализацию при хранении записей они не учитывают (записи упорядочены в лучшем случае по первичному ключу), то эти 1000 записей окажутся равномерно раскиданными по всем нодам кластера (или по всему диску на одной машине) и эта выборка будет очень медленной. shuklinВащето ваша задача решается за O(1) но это O в практических случаях скорее всего окажеться больше чем обычные O(NlnN)Каким образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:52 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
ВыбегаллоВ силу своей архитектуры Sybase IQ не хранит пустоту, очень быстро обрабатывает ad-hoc запросы, в том числе звездообразные, допускает несколько индексов на одну колонку и поддерживает до 45,000 колонок в таблице ("There may be performance penalties with more than 10,000 columns in a table"). Позволяет работать в кластере с shared disk архитектурой. Достаточно неплохое решение для данной задачи.Согласен, что возможно это лучшее решение из стандартных (судя по описаниям на сайте). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 21:56 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
ВыбегаллоДенормализация - вот что вас спасет. Сколько может быть атрибутов у одного товара? ну десять, ну двадцать, ну тысяча.Если говорить об этом примере с товарами - то у каждого конкретного товара действительно будет мало атрибутов - обычно два-три десятка, ну пара сотен от силы... Только у разных товаров - эти атрибуты разные. Зачастую они разные даже в одной группе по классификации, из-за многообразия мира и из-за неполноты информации. И многие из атрибутов (не все, конечно) характерны для разных групп товаров - они общие семантически. А значит, пользователь может захотеть поискать по ним. Это я к тому, что выделить особенно важные характеристики (кроме нескольких общих) или предсказать заранее основные варианты поиска в общем случае не удастся, как и сократить число атрибутов. ВыбегаллоЗаведите таблицу товаров, с тысячей полей для аттрибутов, и специальную таблицу переполнения для того 0.00001 % товаров с более чем 1000 атрибутов. У клиентов хранится описатель товаров, в котором для каждого товара прописаны возможные аттрибуты и колонки, в которых их искать - чтобы не было запросов вида "col100=12345 OR col101 = 12345 OR ..."Что это даст-то мне с точки зрения более умной индексации? Все равно дальше будут построены индексы только по отдельным колонкам и еще по паре десятков самых типовых сочетаний, которые я угадаю заранее, логически поразмыслив над проблемной областью задачи. Но затем многие пользователи начнут свою работу по добыче полезных для себя редких сочетаний данных подавая заранее не предсказанные мной запросы (часто простые, но не продуманные заранее - это невозможно) и база данных начнет объединять списки перелопачивая "весь диск" или все ноды в кластере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 22:13 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
> откройте ;) Расслабьтесь. Выдохните. Дискуссии с Вами меня перестали развлекать. Очень обяжете, если сделаете вид, что мы не знакомы, - сэкономите мне кучу времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 22:33 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Я вам еще раз настоятельно рекомендую освежить в памяти принципы работы bitmap индексов в Оракле или EVT индексов у DB2. Индексируйте таким образом все колонки с атрибутами и тогла БД сможет просто применяя битовые операции быстро найти необходимые пересечения. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 22:34 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
sysprg ВыбегаллоДенормализация - вот что вас спасет. Сколько может быть атрибутов у одного товара? ну десять, ну двадцать, ну тысяча.Если говорить об этом примере с товарами - то у каждого конкретного товара действительно будет мало атрибутов - обычно два-три десятка, ну пара сотен от силы... Только у разных товаров - эти атрибуты разные. Зачастую они разные даже в одной группе по классификации, из-за многообразия мира и из-за неполноты информации. И многие из атрибутов (не все, конечно) характерны для разных групп товаров - они общие семантически. А значит, пользователь может захотеть поискать по ним. Это я к тому, что выделить особенно важные характеристики (кроме нескольких общих) или предсказать заранее основные варианты поиска в общем случае не удастся, как и сократить число атрибутов. ВыбегаллоЗаведите таблицу товаров, с тысячей полей для аттрибутов, и специальную таблицу переполнения для того 0.00001 % товаров с более чем 1000 атрибутов. У клиентов хранится описатель товаров, в котором для каждого товара прописаны возможные аттрибуты и колонки, в которых их искать - чтобы не было запросов вида "col100=12345 OR col101 = 12345 OR ..."Что это даст-то мне с точки зрения более умной индексации? Все равно дальше будут построены индексы только по отдельным колонкам и еще по паре десятков самых типовых сочетаний, которые я угадаю заранее, логически поразмыслив над проблемной областью задачи. Но затем многие пользователи начнут свою работу по добыче полезных для себя редких сочетаний данных подавая заранее не предсказанные мной запросы (часто простые, но не продуманные заранее - это невозможно) и база данных начнет объединять списки перелопачивая "весь диск" или все ноды в кластере. Еще раз : 1. заводите классификатор товаров. каждому товару приписываете атрибут. Атрибут имеет уникальный ключ, отличный от всех других атрибутов, и номер столбца в таблице фактов. Классификатор выдается каждому юзеру в локальное пользование (вытягивается клиентским приложением) 2. пользователь запрашивает товар с атрибутами 1, 10 и 121. Допустим, эти атрибуты могут храниться в колонках 1, 20 и 54. При формировании запроса приложение учитывает, в каких колонках эти атрибуты имеются, и создает SELECT * from tovar where col1 = 1 and col20 = 10 and col54=121. Уверяю вас, данный запрос при наличии индекса на каждую колонку (и up to date статистики по этому индексу) будет летать - сначала выберется наиболее избирательный индекс, затем выберется сотня строк, потом , если СУБД не позволяет использовать одновременно 2 индекса, банально проверятся значения в остальных колонках - короче, совершенно стандартная ситуация, давно и прочно отработанная. Проблема как раз в неуникальности атрибутов для нескольких товаров - необходимо следить, чтобы атрибуты одного товара не попадали в одни и те же колонки, но эта проблема разрешима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 22:46 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
guest_20040621> откройте ;) Расслабьтесь. Выдохните. Дискуссии с Вами меня перестали развлекать. Очень обяжете, если сделаете вид, что мы не знакомы, - сэкономите мне кучу времени. СЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 22:47 |
|
||
|
Многокритериальный поиск в очень-очень большой базе
|
|||
|---|---|---|---|
|
#18+
Random_GoodmanИ последнее: вы меня тока не бейте, но у меня почему-то очень сильное подозрение, что если взять идею дорогого аффтора, стереть нафиг его проектирование, почесать репу и сделать свое, то в результате получится не миллион, а сто и не кластер а комп а может и вообще на WinXp Home Edition+ mySQL запашет прекрасно... Честно говоря, у меня тоже такая мысль бродит. Ну да ладно. Что мне показалось неправильным. Разряженная таблица с тысячами полей. Кажется во всех базах есть ограничение на количество полей в таблице, следовательно реально заданую структуру можно сделать только на вариациях модели Тенцера. И уж совсем меня привело в шок требование добавления полей в таблицу Ну да ладно-2. Если это действительно клевая идея, то вмешаются факторы политические и экономические. Конкуренты создадут аналогичный продукт и будет не 1 млн запросов в секунду, а тысяч 5-10. А Китай запретит ее использование на своей территории ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 23:54 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33959851&tid=1545033]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 488ms |

| 0 / 0 |
