|
|
|
Поиск по 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 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинПоиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них.гугл же как-то за доли секунд ищет Кот МатроскинP.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато.какбы эти множества уже результат выборки по индексу, дальше они не индексированы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 13:17 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_модSergSuperесли делать в лоб, то ищется десятки минут - получается что нужно сделать пересечение из нескольких множеств порядка 1 млн записей Откуда множества порядка 1 млн записей ? Сколько типов сущностей ?порядка ста, вариантов значений в зависимости от атрибута от двух до тысяч ну так вот я прикинул очень на глаз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 13:20 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинПоиск по произвольному подмножесnву 100 атрибутов не будет быстрее table scan-а - хоть с "нестандартными решениями", хоть без них. P.S. Десятки минут для "пересечения из нескольких множеств порядка 1 млн записей" - это многовато. У ТС 100 атр. в среднем. В запросе до 10. (на практике до 5). Т.е. чтение макс 1-10 строк по полному индексу - д.б. мгновенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 13:21 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_мод, Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 13:39 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк? Это если заданному условию соотв. одна сущность. Иначе надо умножать на число найденных. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 13:54 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperа что значит классическая модель"? таблица со 100 колонками? в принципе я мог и сразу в такую таблицу писать, но не вижу как это бы мне помогло - неизвестно по каким атрибутам будут делаться запросы и соответственно по каким комбинациям полей делать индекс кроме прямой классики (на которую непонятно какие инды вешать), рассмотрите дуплеты, триплеты (...октоплеты) еав. скажем, в обозначения _мод E A1 V1 A2 V2 [AiVi] с индексами (E,A1,A2,V1,V2) (E,A1,A2,V2,V1) если поиски только по точному совпадению, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:00 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
случайно постнул недописав продолжаю, ..если поиски по точному совпадению, то с 1-м индексом и точным ограничением A1<A2[<A3[....AN]] на атрибуты но если где-то поиск по диапазонам, и велью не атомарные [=> диапазон не описывается списокм IN(...)], а сплошные -- то все перестановки Vi (т.е. очень много-плеты индексировать по всем перестановкам не получится i! индексов - таки многовато, уже при i=4) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:05 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_модКот Матроскин Как это Вы перешли от количества атрибутов в поиске к количеству результирующих строк? Это если заданному условию соотв. одна сущность. Иначе надо умножать на число найденных. Как-то так. ээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 1981 году в городе Смоленск и служившего в 14 Армии. Даже если "условию соответствует одна сущность" - прочитать придется порядочно (поскольку, конечно, нет индекса, начинающегося с пола, года рождения, местоа рождения, имени и места службы в армии). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:09 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
qwwqкроме прямой классики (на которую непонятно какие инды вешать), рассмотрите дуплеты, триплеты (...октоплеты) еав. C(100, 2) = 4950 C(100, 3) = 161700 столько индексов мне не позволят сделать)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:17 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 1981 году в городе Смоленск и служившего в 14 Армии.вот кстати примерно так и есть только атрибуты привязаны к платежным документам, некоторые дублируют существующие поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:32 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинээ, вот возьмем пример - ищем мужчину по имени Сергей, родившегося в 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 и вуаля - результат (ессно все объед. в один запрос) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:49 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperтолько атрибуты привязаны к платежным документам, некоторые дублируют существующие поля Если сущности - это платежные документы, то подход м.б. не чистый EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:51 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_модSergSuperтолько атрибуты привязаны к платежным документам, некоторые дублируют существующие поля Если сущности - это платежные документы, то подход м.б. не чистый EAV.может, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 14:59 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
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) прорежутся, при условии правда, что многие комбинации выколоты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 15:10 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_моднаходим пересечение 5х1000 и вуаля - результат (ессно все объед. в один запрос) Ну ТС про это и говорит - "пересечение нескольких множеств порядка 1 млн записей". Это, конечно, совсем не " д.б.мгновенно" :) Но и оценки в десятки минут мне кажутся завышенными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 15:24 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperможет, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня платежные документы - это операции. Главный признак (и индекс) - дата. Тем самым поиск можно резко ограничить периодом. А все поля можно храниить в clob через разделитель с тегами. Поиск внутри периода полным перебором будет быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 16:24 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинНу ТС про это и говорит - "пересечение нескольких множеств порядка 1 млн записей". Порядка тысяч - это не много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 16:25 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10. Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд? SergSuper спасибо, но у меня не настолько все плохо) А насколько? Покажите наконец Вашу структуру таблиц, индексы, текст и план запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 16:53 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Чтото задача все больше пахнет хранилищем. Можно ли потребовать что источник только для чтения? иными словами что пользователи не увидят последних изменений? Если так, то жизнь становится гораздо легче. Огласите вашу СУБД (версии редакции) У Oracle bitmap индексы в аккурат под ваши условия. Суть: делаем индекс на каждое искабельное поле. Он маленький т.к. содержит данные - на поле "имя": Сергей - отсюда и досюда, на поле "год" 1984 отсюда и до сюда и т.д. То бишь сервер перед выполнением запроса легко прочитает их все, и перемножит в памяти оставив список id результирующей выборки. Но такие индексы очень хреново обновляются. Далее: полное сканирование получившейся таблицы (или матвьюхи неважно), особенно если она сжата никак не должно занимать десятки минут, на приличном железе. Хотя мгновенным и не назовешь. При отсутсвии требований к оперативному обновлению, создавать индексы вам помешает только совесть и дефицит места на диске. Тут требуется работа с пользователями - человек создание шаблонное. Проанализируйте пользовательские запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 17:43 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
DirksDRSergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10. Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд? SergSuper спасибо, но у меня не настолько все плохо) А насколько? Покажите наконец Вашу структуру таблиц, индексы, текст и план запроса.а , ну вот в среднем 10^9 значений в EAV; 10^10 дублетов, 10^11 триплетов. если вам нравится 10^12 - можете добраться до квадруплетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 20:19 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
DirksDRSergSuperТаблица сущностей (т.е. к чему атрибуты относятся) порядка 100млн записей, где-то около 100 видов атрибутов, одновременно используется в среднем 10. Если таблица сущностей 100млн, то таблица значений атрибутов - 1млрд? SergSuperспасибо, но у меня не настолько все плохо) А насколько? да я как бы лет 20 БД занимаюсь, таблички делать научился)DirksDRПокажите наконец Вашу структуру таблиц, индексы, текст и план запроса.убыл в командировку "в поля", под рукой нет средств чтоб показать план, через неделю так что структура самая примитивная - ссылка на документ, ссылка на счет (т.е. привязываются либо к счетам, либо к документам), ссылка на код атрибута, ну и сами сами значения в виде числа, даты, строки и ссылки на некий справочник, значение строкой считается всегда счетов около 20 млн, документов за сотню структура постепенно наполняется, сейчас думаю млрд еще нету, наверное и сотни млн тоже, запустил count(*) - сегмент отката переполнился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 20:49 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
_модSergSuperможет, да и должен быть, но гуппа товарищей хочет видеть только атрибуты, мне это не объяснить, аналитики согласовывали и обещали без меня платежные документы - это операции. Главный признак (и индекс) - дата. Тем самым поиск можно резко ограничить периодом. А все поля можно храниить в clob через разделитель с тегами. Поиск внутри периода полным перебором будет быстрым.ну как бы есть задачи выбрать нужные документы за год, а в день порядка миллиона документов ну и со счетами не получится я вот думал - если хранить в clob через разделитель с тегами - нельзя ли как-то будет полнотекстовым поиском пользоваться? я просто с ним никогда дела не имел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 20:55 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SERG1257Чтото задача все больше пахнет хранилищем.Если хранилище - это некий отдельный продукт, который надо покупать - буду очень благодарен если назовете какой-нибудь, желательно с ценой, желательно подороже - проще будет отмазаться )) сильная актуальность не нужна, возможно ночное обновление, собственно большинство атрибутов будет рассчитываться ночью версия 11.2.0.2.0 железяка AIX RISC System/6000 (но я в них не разбираюсь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 21:08 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuper Если хранилище - это некий отдельный продукт, который надо покупатьЗа продуктами в соседний форум. http://www.sql.ru/forum/olap-dwh SergSuper сильная актуальность не нужна, возможно ночное обновлениеТо бишь вместо вьюх (будя возникнут какие нибудь ограничения) можно сделать обычные таблицы, удобные для запросов, заполняемые ночью. И ваш EAV, в данном случае - просто источник данных читаемый всего раз. Все не так плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 21:26 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
Раз значения малоселективные, значит, сканирование таблицы значений начинает выглядеть сравнительно привлекательным вариантом. Чтобы не мурыжить миллиард записей, я бы в первую очередь подумал над партиционированием таблицы значений по id атрибута. Далее, возникает вопрос того, что некоторые операции типа like могут выполняться куда дольше, чем фильтрация по id записи (полученной из другого фильтра). На глаз при разумном количестве критериев оптимизатор должен справиться с построением хорошего плана, то есть я бы в первую очередь попробовал запрос типа Код: plsql 1. 2. 3. 4. Если без партиционирования, то следующий взгляд в сторону индекса или кластерного ключа по (id атрибута, id записи, значение) В три часа ночи делать тестовый пример и исследовать, честно говоря, не хочется. Может быть, завтра :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 02:30 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли без партиционирования, то следующий взгляд в сторону индекса или кластерного ключа по (id атрибута, id записи, значение) Поддерживаю предложенный Вами запрос, собирался предложить подобное, для чего запросил структуру таблиц. Вы красиво обошлись без этого. Однако, смущает предлагаемый Вами индекс "(id атрибута, id записи, значение)". Может (id атрибута, значение, id записи)? Раз критерии запросов выглядят: where v.attribute_id = <реквизит> and v.value <операция> <значение>) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 08:35 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
SergSuperну как бы есть задачи выбрать нужные документы за год, а в день порядка миллиона документов ну и со счетами не получится я вот думал - если хранить в clob через разделитель с тегами - нельзя ли как-то будет полнотекстовым поиском пользоваться? я просто с ним никогда дела не имел Найти нужные документы за весь год - это скорее для отчета, время выполнения не критично. Полный перебор 300 млн. строк - не вопрос. Про счета не понял, почему не получится ? Полнотекстовым поиском не пользовался. Думаю, смысла нет, все равно полный перебор с выделением значений атрибутов из clob. Само выделение мгновенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 10:04 |
|
||
|
Поиск по EAV
|
|||
|---|---|---|---|
|
#18+
DirksDRОднако, смущает предлагаемый Вами индекс "(id атрибута, id записи, значение)". Может (id атрибута, значение, id записи)? В принципе, надо мерять. На пальцах я несколько сомневаюсь в том, что перемещение значения на второе место даст заметный выигрыш в поиске; полагаю, возможность фильтровать по записям до проверки значения даст оптимизатору лучшие перспективы. Но это уже надо просто смотреть, а прежде всего - проверить принцип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 16:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540994]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 520ms |

| 0 / 0 |

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