|
|
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Я попробовал поискать по этой теме, но в основном сводилось к тому что "EAV плохо, потому что не сделать поиск" Я с этим не спорю, но у меня как раз проблема что к работающей базе прицепили EAV и мне нужно сделать по нему поиск. Вот дословные требования из ТЗ, противостоять этому я уже не могу(согласовывалось до меня): Поиск должен осуществляться как по одному, так и по группе заданных реквизитов/значений реквизитов, а также за заданный пользователем период времени. При этом должны применяться стандартные возможности фильтра: =, !=, >, <, содержит, не содержит, похоже, не похоже и т.д. Должна быть возможность задать список значений, а для реквизитов формата "число", "дата" - задать диапазон значений (период) Чтобы вы могли предложить (кроме сочувствия)? Может есть какие технологии, другие продукты? Как-то гугл с яндексом же ищут Таблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10. Селективность по значениям атрибутов невысокая, т.е. значений относительно немного и нужно как раз накладывать поиск по нескольким видам атрибутов. Oracle Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 18:19 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Постройте вьюху на ваш EAV, материализуйте и индексируйте ее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 18:44 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 18:44 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
проблема что это очень медленно работает мягко говоря индекс конечно есть SERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.как это поможет? возможно я не понял - какой должна быть вьюха? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 19:40 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSergSuperЧтобы вы могли предложить (кроме сочувствия)? А в чём проблема-то? Берёшь список критериев на входе из него формируешь портянку SQL кода по шаблону [src]WHERE (Реквизит=:Реквизит1 AND Значение <операция> :Значение1) OR (Реквизит=:Реквизит2 AND Значение <операция> :Значение2) GROUP BY id HAVING cunt(*) > :Порог нечёткости ORDER BY count(*) DESC[src] Естественно, в базе должен быть составной индекс на (Реквизит, Значение).да, похоже это именно то что мне надо завтра попробую спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 19:47 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuper какой должна быть вьюха? Скорее не вьюха а вьюхи. У вас есть сущности у них атрибуты: сущность - вьюха, атрибуты - поля, значения - строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 19:50 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
А как вы делаете поиск? Вьюх нет, значит запросы динамические. На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии. Разве это совсем медленнее предложенного варианта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 00:19 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
R7А как вы делаете поиск? Вьюх нет, значит запросы динамические. На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии. Разве это совсем медленнее предложенного варианта?да, динамический запрос, делается на клиенте если задан какой-то атрибут, то дописываю во where типа "and exists(...)" т.к. селективность значений невысокая, то получается что хотя бы один раз надо довольно много просканировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 00:43 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее.как это поможет? возможно я не понял - какой должна быть вьюха?Oracle, материализованные представления . Таблицу, в которой сохраняется результат, можно индексировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 03:05 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperЗаранее благодарен Таблица EAV Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ну и динамический SQL c exists или join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 09:39 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее. Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 09:46 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
vadiminfoSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее. Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.Это зависит от... В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 10:07 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
sphinx_mvЭто зависит от... В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту. А поскольку обновление в общем случае может занимать время, тем более если одновременно запустят несколько запросов вызывающих обновление мат вьюва, то может опять встать вопрос о производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 10:17 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
R7Вьюх нет, значит запросы динамические. На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.Селективность по отдельному атрибуту маленькая, так что в любом случае будет пересечение нескольких (по числу паараметров поиска) огромных множеств и по крайней мере один скан огромной таблицы. Так что только превращение EAV в классическую модель с помощью индексированных материализованных представлений, как уже предложил SERG1257 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 10:38 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
vadiminfoSERG1257Постройте вьюху на ваш EAV, материализуйте и индексируйте ее. Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.это не страшно, но я не понимаю как это может помочь сделать представление из 100 колонок и каждую проиндексировать? ну я как-то сомневаюсь что мне такое дадут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 10:41 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSupervadiminfoпропущено... Если речь о материализванном представлении, то возникнет вопрос про оперативность. Если, к примеру, мат представление обнавляли 10 минут назад, то в запрос не попадут данные знаесенные в БД 5 минут назад.это не страшно, но я не понимаю как это может помочь сделать представление из 100 колонок и каждую проиндексировать? ну я как-то сомневаюсь что мне такое дадут Если речь идет о том чтобы юзер быстро получал ответ на запрос, то, в общем случае, мат вьюв может помочь тем, что Вы какие-то вычисления могут быть произведены заранее (не в запросе юзера). Типа как тут писали, может быть, получить "классическую модель ". Или какие-то таблицы с почти готовым для юзера результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 10:55 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
а что значит классическая модель"? таблица со 100 колонками? в принципе я мог и сразу в такую таблицу писать, но не вижу как это бы мне помогло - неизвестно по каким атрибутам будут делаться запросы и соответственно по каким комбинациям полей делать индекс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:15 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_модSergSuperЗаранее благодарен Таблица EAV Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ну и динамический SQL c exists или joinспасибо, но у меня не настолько все плохо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:21 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
я может неправильно объяснил - вобщем-то у меня нет проблем составить запросы, да и структуры я делаю сам проблема в поиске если делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей надо какие-то нестандартные решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:33 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
vadiminfosphinx_mvЭто зависит от... В некоторых случаях (и с применением некторых техник) матвью обновляются по коммиту. А поскольку обновление в общем случае может занимать время, тем более если одновременно запустят несколько запросов вызывающих обновление мат вьюва, то может опять встать вопрос о производительности.Во-первых, не проверишь - не узнаешь. Во-вторых, у меня "есть обоснованные подозрения" (с), что матвью даже по коммиту обновляется в фоновом режиме... Ну, и в-третьих, разрешать пользователям в произвольном порядке выполнять обновление "агромадного" матвью "ручками" - очень нехорошая идея. Вместо этого настриваем интервал обновления - декларативно в DDL этой вьюхи или вызываем по расписанию процедуру обновления. Хоть вопросы веры здесь не обсуждаются, но я "не верю", что использование матвью создаст критические проблемы производительности оперативных изменений... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:50 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей надо какие-то нестандартные решенияДо использования "нестандартных решений" попробуйте то, что Вам предложили из "стандартного" - их вполне должно хватить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:53 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
alexeyvgR7Вьюх нет, значит запросы динамические. На выходе селект с псевдонимами из названий атрибутов. По атрибутам добавляете критерии.Селективность по отдельному атрибуту маленькая, так что в любом случае будет пересечение нескольких (по числу паараметров поиска) огромных множеств и по крайней мере один скан огромной таблицы. Так что только превращение EAV в классическую модель с помощью индексированных материализованных представлений, как уже предложил SERG1257 И чем этот подход лучше того, когда мы изначально имеем классическую модель без всяких EAV? Тем, что к каким-то сущностям чаще обращаются? Тут 2 варианта: либо кушать кактус, либо не кушать кактус. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 11:54 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
sphinx_mvВо-вторых, у меня "есть обоснованные подозрения" (с), что матвью даже по коммиту обновляется в фоновом режиме... ... Не имелось в виду "не фоновость". В общем случае обновление может требовать времени. И это время как бы должно быть в запросе. Иначе опять не оперативность, но теперь не заметная для юзера. Пользователь получил данные то быстро, но они не актуальны, поскольку последнее обновление еще не закончилось, хотя коммит был выполнен до запроса. Ну и есть риск, что примет не правильное решение, на основе этой инфы. А поскольку мы это знаем, то, возможно, опять столкнемся с производительностью, стремясь это разрулить. sphinx_mvНу, и в-третьих, разрешать пользователям в произвольном порядке выполнять обновление "агромадного" матвью "ручками" ...декларативно в DDL этой вьюхи или вызываем по расписанию процедуру обновления Про пользоватей и DDL тоже не имелось ввиду: есть "Джобы" задания по расписанию. Так или иначе для оперативных запросов, возможно, мат вьювы могут не всегда подойти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 12:42 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей Откуда множества порядка 1 млн записей ? Сколько типов сущностей ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 12:45 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperя может неправильно объяснил - вобщем-то у меня нет проблем составить запросы, да и структуры я делаю сам проблема в поиске если делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей надо какие-то нестандартные решения Поиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них. P.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 12:52 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38543437&tid=1540994]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 530ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...