powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск по EAV
25 сообщений из 53, страница 2 из 3
Поиск по EAV
    #38543521
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинПоиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них.гугл же как-то за доли секунд ищет

Кот МатроскинP.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато.какбы эти множества уже результат выборки по индексу, дальше они не индексированы
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543532
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модSergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей
Откуда множества порядка 1 млн записей ?
Сколько типов сущностей ?порядка ста, вариантов значений в зависимости от атрибута от двух до тысяч
ну так вот я прикинул очень на глаз
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543534
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинПоиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них.
P.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато.
У ТС 100 атр. в среднем. В запросе до 10. (на практике до 5). Т.е. чтение макс 1-10 строк по полному индексу - д.б. мгновенно.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543571
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод,

Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк?
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543600
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк?
Это если заданному условию соотв. одна сущность. Иначе надо умножать на число найденных. Как-то так.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543609
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperа что значит классическая модель"? таблица со 100 колонками?
в принципе я мог и сразу в такую таблицу писать, но не вижу как это бы мне помогло - неизвестно по каким атрибутам будут делаться запросы и соответственно по каким комбинациям полей делать индекс
кроме прямой классики (на которую непонятно какие инды вешать), рассмотрите дуплеты, триплеты (...октоплеты) еав.

скажем, в обозначения _мод
E
A1
V1
A2
V2
[AiVi]
с индексами
(E,A1,A2,V1,V2)
(E,A1,A2,V2,V1)
если поиски только по точному совпадению,
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543627
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
случайно постнул недописав
продолжаю,
..если поиски по точному совпадению, то с 1-м индексом и точным ограничением A1<A2[<A3[....AN]] на атрибуты

но если где-то поиск по диапазонам, и велью не атомарные [=> диапазон не описывается списокм IN(...)], а сплошные -- то все перестановки Vi (т.е. очень много-плеты индексировать по всем перестановкам не получится i! индексов - таки многовато, уже при i=4)
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543634
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модКот Матроскин Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк?
Это если заданному условию соотв. одна сущность. Иначе надо умножать на число найденных. Как-то так.

ээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 1981 году в городе Смоленск и служившего в 14 Армии.
Даже если "условию соответствует одна сущность" - прочитать придется порядочно (поскольку, конечно, нет индекса, начинающегося с пола, года рождения, местоа рождения, имени и места службы в армии).
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543642
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqкроме прямой классики (на которую непонятно какие инды вешать), рассмотрите дуплеты, триплеты (...октоплеты) еав.
C(100, 2) = 4950
C(100, 3) = 161700

столько индексов мне не позволят сделать))
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543672
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 1981 году в городе Смоленск и служившего в 14 Армии.вот кстати примерно так и есть
только атрибуты привязаны к платежным документам, некоторые дублируют существующие поля
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543698
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскинээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 1981 году в городе Смоленск и служившего в 14 Армии.
Даже если "условию соответствует одна сущность" - прочитать придется порядочно (поскольку, конечно, нет индекса, начинающегося с пола, года рождения, местоа рождения, имени и места службы в армии).
select * from eav where e='person' and a='name' and v='Сергей' -- пусть будет 1000 строк - поиск по индексу e+a+v
select * from eav where e='person' and a='year_b' and v='1981' -- пусть будет 1000 строк - поиск по индексу e+a+v
select * from eav where e='person' and a='place_b' and v='Смоленск' -- пусть будет 1000 строк - поиск по индексу e+a+v
select * from eav where e='person' and a='srok_a' and v='14' -- пусть будет 1000 строк - поиск по индексу e+a+v
находим пересечение 5х1000 и вуаля - результат
(ессно все объед. в один запрос)
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543708
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperтолько атрибуты привязаны к платежным документам, некоторые дублируют существующие поля
Если сущности - это платежные документы, то подход м.б. не чистый EAV.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543726
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модSergSuperтолько атрибуты привязаны к платежным документам, некоторые дублируют существующие поля
Если сущности - это платежные документы, то подход м.б. не чистый EAV.может, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543743
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperqwwqкроме прямой классики (на которую непонятно какие инды вешать), рассмотрите дуплеты, триплеты (...октоплеты) еав.
C(100, 2) = 4950
C(100, 3) = 161700

столько индексов мне не позволят сделать))
стреляйтеся

или мигрируйте на постгрес, суйте весь еав в array-и (как вариант в hstore) и обвязывайтесь gist-индексами.


PS
зачем вам c(100,2) ?
"вы не поняли" (ненавижу это вводные, но оно тут к месту) не C(100,2) на таблице со 100 полями, а 1 (или 2, если диапазонные поиски) индекс на таблице с 5-ю полями (дуплеты) [структуру см выше]. Записей там будет, правда, много. D:o] Много больше, чем объедков (E), и даже много больше, чем значений одиночных атрибутов[EAV]. Прикинуть конечно можно, там те самые C(100,2) прорежутся, при условии правда, что многие комбинации выколоты.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543776
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_моднаходим пересечение 5х1000 и вуаля - результат
(ессно все объед. в один запрос)

Ну ТС про это и говорит - "пересечение нескольких множеств порядка 1 млн записей". Это, конечно, совсем не " д.б.мгновенно" :) Но и оценки в десятки минут мне кажутся завышенными.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543870
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperможет, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня
платежные документы - это операции. Главный признак (и индекс) - дата. Тем самым поиск можно резко ограничить периодом.
А все поля можно храниить в clob через разделитель с тегами. Поиск внутри периода полным перебором будет быстрым.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543874
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинНу ТС про это и говорит - "пересечение нескольких множеств порядка 1 млн записей".
Порядка тысяч - это не много
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543925
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10.

Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд?
SergSuper спасибо, но у меня не настолько все плохо)
А насколько?
Покажите наконец Вашу структуру таблиц, индексы, текст и план запроса.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544003
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтото задача все больше пахнет хранилищем.
Можно ли потребовать что источник только для чтения? иными словами что пользователи не увидят последних изменений?
Если так, то жизнь становится гораздо легче.

Огласите вашу СУБД (версии редакции)
У Oracle bitmap индексы в аккурат под ваши условия. Суть: делаем индекс на каждое искабельное поле. Он маленький т.к. содержит данные - на поле "имя": Сергей - отсюда и досюда, на поле "год" 1984 отсюда и до сюда и т.д. То бишь сервер перед выполнением запроса легко прочитает их все, и перемножит в памяти оставив список id результирующей выборки. Но такие индексы очень хреново обновляются.
Далее: полное сканирование получившейся таблицы (или матвьюхи неважно), особенно если она сжата никак не должно занимать десятки минут, на приличном железе. Хотя мгновенным и не назовешь.
При отсутсвии требований к оперативному обновлению, создавать индексы вам помешает только совесть и дефицит места на диске.
Тут требуется работа с пользователями - человек создание шаблонное. Проанализируйте пользовательские запросы.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544215
йццй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DirksDRSergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10.

Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд?
SergSuper спасибо, но у меня не настолько все плохо)
А насколько?
Покажите наконец Вашу структуру таблиц, индексы, текст и план запроса.а , ну вот
в среднем 10^9 значений в EAV; 10^10 дублетов, 10^11 триплетов.
если вам нравится 10^12 - можете добраться до квадруплетов.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544241
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRSergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10.

Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд?
SergSuperспасибо, но у меня не настолько все плохо)
А насколько? да я как бы лет 20 БД занимаюсь, таблички делать научился)DirksDRПокажите наконец Вашу структуру таблиц, индексы, текст и план запроса.убыл в командировку "в поля", под рукой нет средств чтоб показать план, через неделю так что
структура самая примитивная - ссылка на документ, ссылка на счет (т.е. привязываются либо к счетам, либо к документам), ссылка на код атрибута, ну и сами сами значения в виде числа, даты, строки и ссылки на некий справочник, значение строкой считается всегда
счетов около 20 млн, документов за сотню
структура постепенно наполняется, сейчас думаю млрд еще нету, наверное и сотни млн тоже, запустил count(*) - сегмент отката переполнился
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544243
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модSergSuperможет, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня
платежные документы - это операции. Главный признак (и индекс) - дата. Тем самым поиск можно резко ограничить периодом.
А все поля можно храниить в clob через разделитель с тегами. Поиск внутри периода полным перебором будет быстрым.ну как бы есть задачи выбрать нужные документы за год, а в день порядка миллиона документов
ну и со счетами не получится

я вот думал - если хранить в clob через разделитель с тегами - нельзя ли как-то будет полнотекстовым поиском пользоваться? я просто с ним никогда дела не имел
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544253
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Чтото задача все больше пахнет хранилищем.Если хранилище - это некий отдельный продукт, который надо покупать - буду очень благодарен если назовете какой-нибудь, желательно с ценой, желательно подороже - проще будет отмазаться ))

сильная актуальность не нужна, возможно ночное обновление, собственно большинство атрибутов будет рассчитываться ночью

версия 11.2.0.2.0
железяка AIX RISC System/6000 (но я в них не разбираюсь)
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544263
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper Если хранилище - это некий отдельный продукт, который надо покупатьЗа продуктами в соседний форум.
http://www.sql.ru/forum/olap-dwh
SergSuper сильная актуальность не нужна, возможно ночное обновлениеТо бишь вместо вьюх (будя возникнут какие нибудь ограничения) можно сделать обычные таблицы, удобные для запросов, заполняемые ночью.
И ваш EAV, в данном случае - просто источник данных читаемый всего раз.
Все не так плохо.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544403
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз значения малоселективные, значит, сканирование таблицы значений начинает выглядеть сравнительно привлекательным вариантом. Чтобы не мурыжить миллиард записей, я бы в первую очередь подумал над партиционированием таблицы значений по id атрибута. Далее, возникает вопрос того, что некоторые операции типа like могут выполняться куда дольше, чем фильтрация по id записи (полученной из другого фильтра). На глаз при разумном количестве критериев оптимизатор должен справиться с построением хорошего плана, то есть я бы в первую очередь попробовал запрос типа

Код: plsql
1.
2.
3.
4.
select t.*
from table t
join (select v.record_id from values v where v.attribute_id = <реквизит> and v.value <операция> <значение>) f1 on (t.record_id = f1.record_id)
join ...



Если без партиционирования, то следующий взгляд в сторону индекса или кластерного ключа по (id атрибута, id записи, значение)

В три часа ночи делать тестовый пример и исследовать, честно говоря, не хочется. Может быть, завтра :)
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск по EAV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]