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

Вот дословные требования из ТЗ, противостоять этому я уже не могу(согласовывалось до меня):
Поиск должен осуществляться как по одному, так и по группе заданных реквизитов/значений реквизитов, а также за заданный пользователем период времени. При этом должны применяться стандартные возможности фильтра: =, !=, >, <, содержит, не содержит, похоже, не похоже и т.д. Должна быть возможность задать список значений, а для реквизитов формата "число", "дата" - задать диапазон значений (период)

Чтобы вы могли предложить (кроме сочувствия)? Может есть какие технологии, другие продукты? Как-то гугл с яндексом же ищут

Таблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10.
Селективность по значениям атрибутов невысокая, т.е. значений относительно немного и нужно как раз накладывать поиск по нескольким видам атрибутов.
Oracle

Заранее благодарен
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542634
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542635
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperЧтобы вы могли предложить (кроме сочувствия)?
А в чём проблема-то? Берёшь список критериев на входе из него формируешь портянку SQL кода
по шаблону
[src]WHERE (Реквизит=:Реквизит1 AND Значение <операция> :Значение1)
OR
(Реквизит=:Реквизит2 AND Значение <операция> :Значение2)
GROUP BY id
HAVING cunt(*) > :Порог нечёткости
ORDER BY count(*) DESC[src]
Естественно, в базе должен быть составной индекс на (Реквизит, Значение).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542688
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема что это очень медленно работает
мягко говоря
индекс конечно есть
SERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.как это поможет? возможно я не понял - какой должна быть вьюха?
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542694
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergSuperЧтобы вы могли предложить (кроме сочувствия)?
А в чём проблема-то? Берёшь список критериев на входе из него формируешь портянку SQL кода
по шаблону
[src]WHERE (Реквизит=:Реквизит1 AND Значение <операция> :Значение1)
OR
(Реквизит=:Реквизит2 AND Значение <операция> :Значение2)
GROUP BY id
HAVING cunt(*) > :Порог нечёткости
ORDER BY count(*) DESC[src]
Естественно, в базе должен быть составной индекс на (Реквизит, Значение).да, похоже это именно то что мне надо
завтра попробую
спасибо
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542701
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper какой должна быть вьюха? Скорее не вьюха а вьюхи. У вас есть сущности у них атрибуты: сущность - вьюха, атрибуты - поля, значения - строки.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542939
R7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
R7
Гость
А как вы делаете поиск?
Вьюх нет, значит запросы динамические.
На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.
Разве это совсем медленнее предложенного варианта?
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542947
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R7А как вы делаете поиск?
Вьюх нет, значит запросы динамические.
На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.
Разве это совсем медленнее предложенного варианта?да, динамический запрос, делается на клиенте
если задан какой-то атрибут, то дописываю во where типа "and exists(...)"
т.к. селективность значений невысокая, то получается что хотя бы один раз надо довольно много просканировать
...
Рейтинг: 0 / 0
Поиск по EAV
    #38542979
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.как это поможет? возможно я не понял - какой должна быть вьюха?Oracle, материализованные представления .
Таблицу, в которой сохраняется результат, можно индексировать.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543100
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperЗаранее благодарен
Таблица EAV
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
E      varchar2(100)
id_E  varchar2(100)
A      varchar2(100)
V       varchar2(2000)
index E (E,A,id_E)
index V (E,A,V)

--поиск значения по id_E:
select * from EAV where E='E1' and A='A1' and id_E='id_E1'

--поиск по значению:
select * from EAV where E='E1' and A='A1' and V='V1'


ну и динамический SQL c exists или join
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543103
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.
Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543127
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.
Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.Это зависит от...
В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543143
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvЭто зависит от...
В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту.
А поскольку обновление в общем случае может занимать время, тем более если одновременно запустят несколько запросов вызывающих обновление мат вьюва, то может опять встать вопрос о производительности.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543185
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R7Вьюх нет, значит запросы динамические.
На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.Селективность по отдельному атрибуту маленькая, так что в любом случае будет пересечение нескольких (по числу паараметров поиска) огромных множеств и по крайней мере один скан огромной таблицы.

Так что только превращение EAV в классическую модель с помощью индексированных материализованных представлений, как уже предложил SERG1257
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543187
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.
Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.это не страшно, но я не понимаю как это может помочь
сделать представление из 100 колонок и каждую проиндексировать? ну я как-то сомневаюсь что мне такое дадут
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543216
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSupervadiminfoпропущено...

Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.это не страшно, но я не понимаю как это может помочь
сделать представление из 100 колонок и каждую проиндексировать? ну я как-то сомневаюсь что мне такое дадут
Если речь идет о том чтобы юзер быстро получал ответ на запрос, то, в общем случае, мат вьюв может помочь тем, что Вы какие-то вычисления могут быть произведены заранее (не в запросе юзера). Типа как тут писали, может быть, получить "классическую модель ". Или какие-то таблицы с почти готовым для юзера результатом.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543259
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что значит классическая модель"? таблица со 100 колонками?
в принципе я мог и сразу в такую таблицу писать, но не вижу как это бы мне помогло - неизвестно по каким атрибутам будут делаться запросы и соответственно по каким комбинациям полей делать индекс
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543268
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модSergSuperЗаранее благодарен
Таблица EAV
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
E      varchar2(100)
id_E  varchar2(100)
A      varchar2(100)
V       varchar2(2000)
index E (E,A,id_E)
index V (E,A,V)

--поиск значения по id_E:
select * from EAV where E='E1' and A='A1' and id_E='id_E1'

--поиск по значению:
select * from EAV where E='E1' and A='A1' and V='V1'



ну и динамический SQL c exists или joinспасибо, но у меня не настолько все плохо)
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543286
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я может неправильно объяснил - вобщем-то у меня нет проблем составить запросы, да и структуры я делаю сам
проблема в поиске
если делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей
надо какие-то нестандартные решения
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543315
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfosphinx_mvЭто зависит от...
В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту.
А поскольку обновление в общем случае может занимать время, тем более если одновременно запустят несколько запросов вызывающих обновление мат вьюва, то может опять встать вопрос о производительности.Во-первых, не проверишь - не узнаешь.
Во-вторых, у меня "есть обоснованные подозрения" (с), что матвью даже по коммиту обновляется в фоновом режиме...
Ну, и в-третьих, разрешать пользователям в произвольном порядке выполнять обновление "агромадного" матвью "ручками" - очень нехорошая идея. Вместо этого настриваем интервал обновления - декларативно в DDL этой вьюхи или вызываем по расписанию процедуру обновления.
Хоть вопросы веры здесь не обсуждаются, но я "не верю", что использование матвью создаст критические проблемы производительности оперативных изменений...
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543322
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей
надо какие-то нестандартные решенияДо использования "нестандартных решений" попробуйте то, что Вам предложили из "стандартного" - их вполне должно хватить...
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543323
R7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
R7
Гость
alexeyvgR7Вьюх нет, значит запросы динамические.
На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.Селективность по отдельному атрибуту маленькая, так что в любом случае будет пересечение нескольких (по числу паараметров поиска) огромных множеств и по крайней мере один скан огромной таблицы.

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

Тут 2 варианта: либо кушать кактус, либо не кушать кактус.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543411
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvВо-вторых, у меня "есть обоснованные подозрения" (с), что матвью даже по коммиту обновляется в фоновом режиме... ...
Не имелось в виду "не фоновость". В общем случае обновление может требовать времени.
И это время как бы должно быть в запросе. Иначе опять не оперативность, но теперь не заметная для юзера. Пользователь получил данные то быстро, но они не актуальны, поскольку последнее обновление еще не закончилось, хотя коммит был выполнен до запроса. Ну и есть риск, что примет не правильное решение, на основе этой инфы. А поскольку мы это знаем, то, возможно, опять столкнемся с производительностью, стремясь это разрулить.

sphinx_mvНу, и в-третьих, разрешать пользователям в произвольном порядке выполнять обновление "агромадного" матвью "ручками"
...декларативно в DDL этой вьюхи или вызываем по расписанию процедуру обновления
Про пользоватей и DDL тоже не имелось ввиду: есть "Джобы" задания по расписанию.

Так или иначе для оперативных запросов, возможно, мат вьювы могут не всегда подойти.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543420
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей
Откуда множества порядка 1 млн записей ?
Сколько типов сущностей ?
...
Рейтинг: 0 / 0
Поиск по EAV
    #38543437
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperя может неправильно объяснил - вобщем-то у меня нет проблем составить запросы, да и структуры я делаю сам
проблема в поиске
если делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей
надо какие-то нестандартные решения

Поиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них.

P.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато.
...
Рейтинг: 0 / 0
Поиск по 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
Поиск по EAV
    #38544480
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли без партиционирования, то следующий взгляд в сторону индекса или кластерного ключа по (id атрибута, id записи, значение)

Поддерживаю предложенный Вами запрос, собирался предложить подобное, для чего запросил структуру таблиц. Вы красиво обошлись без этого.

Однако, смущает предлагаемый Вами индекс "(id атрибута, id записи, значение)".
Может (id атрибута, значение, id записи)?
Раз критерии запросов выглядят:
where v.attribute_id = <реквизит> and v.value <операция> <значение>)
...
Рейтинг: 0 / 0
Поиск по EAV
    #38544582
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperну как бы есть задачи выбрать нужные документы за год, а в день порядка миллиона документов
ну и со счетами не получится
я вот думал - если хранить в clob через разделитель с тегами - нельзя ли как-то будет полнотекстовым поиском пользоваться? я просто с ним никогда дела не имел
Найти нужные документы за весь год - это скорее для отчета, время выполнения не критично. Полный перебор 300 млн. строк - не вопрос.
Про счета не понял, почему не получится ?
Полнотекстовым поиском не пользовался. Думаю, смысла нет, все равно полный перебор с выделением значений атрибутов из clob.
Само выделение мгновенно.
...
Рейтинг: 0 / 0
Поиск по EAV
    #38545404
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRОднако, смущает предлагаемый Вами индекс "(id атрибута, id записи, значение)".
Может (id атрибута, значение, id записи)?
В принципе, надо мерять. На пальцах я несколько сомневаюсь в том, что перемещение значения на второе место даст заметный выигрыш в поиске; полагаю, возможность фильтровать по записям до проверки значения даст оптимизатору лучшие перспективы. Но это уже надо просто смотреть, а прежде всего - проверить принцип.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск по EAV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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