powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск по EAV
25 сообщений из 53, страница 1 из 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
25 сообщений из 53, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск по EAV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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