Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

On 10.01.2011 20:22, Васисуалий Пупкинсон wrote:

> Типовой запрос с AND и OR например такой:
>
> женщина
> И
> город - С.Петербург
> И
> не замужем
> И
> цель знакомства - (брак ИЛИ романтические отношения ИЛИ дружба)
> И
> цвет волос - блондинка
И
> NOT курит

Что-то не видно тут OR.

Posted via ActualForum NNTP Server 1.4

10 янв 11, 22:27    [10050429]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4919
Блог
MasterZiv
> Они также специально предназначен именно для случаев, когда количество различных
> значений невелико. Тут подойдет даже рост, который имеет диапазон от 100 до 210.
Как критерии будем объединять ?
Вопроса не понял. Но все равно можно расслабиться - человеку бесплатно нужно
10 янв 11, 22:29    [10050436]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34709

On 10.01.2011 20:27, Васисуалий Пупкинсон wrote:

> Ох, попробую конечно, если больше никаких вариантов не будет. Просто очень уж не
> хочется с Ораклом связываться. При всем уважении, конечно. Если бы это
> корпоративный софт был, за который есть кому хорошо заплатить, тогда без
> вопросов, но тут ситуация несколько другая... Бюджет довольно-таки ограничен, увы.

Подозреваю, что ключевое умение СУБД тут -- возможность при запросе использовать
несколько индексов по одной таблице, делая merge join таблицы самой с собой
(каждая отобрана по условию с использованием индекса).

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

Posted via ActualForum NNTP Server 1.4

10 янв 11, 22:30    [10050437]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
MasterZiv
Как критерии будем объединять ?

Про star query что-нибудь когда-нибудь слышали?
11 янв 11, 01:43    [10050857]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
MasterZiv
On 10.01.2011 20:22, Васисуалий Пупкинсон wrote:

> Типовой запрос с AND и OR например такой:
>
> женщина
> И
> город - С.Петербург
> И
> не замужем
> И
> цель знакомства - (брак ИЛИ романтические отношения ИЛИ дружба)
> И
> цвет волос - блондинка
И
> NOT курит

Что-то не видно тут OR.


Да, и правда, то что я имел в виду под OR - это не что иное как IN для значений.
Тогда правильный пример будет таким:

женщина
И
город - С.Петербург
И
не замужем
И
цель знакомства IN (брак, романтические отношения, дружба)
И
цвет волос - блондинка
И
NOT курит

В принципе, если с реализацией OR возникнут проблемы, то без него можно и обойтись, прибегнув к данной тактике - превратив атрибуты, которые могут употребляться через OR в значения, объединенные каким-нибудь общим атрибутом.
11 янв 11, 02:21    [10050895]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
MasterZiv
Подозреваю, что ключевое умение СУБД тут -- возможность при запросе использовать
несколько индексов по одной таблице, делая merge join таблицы самой с собой
(каждая отобрана по условию с использованием индекса).

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


Со способом, использующим соединение таблиц, есть проблема, если в условии поиска заданы не очень селективные атрибуты. Например, условия поиска такие:

Страна: Россия или Украина (допустим, есть 300 тыс. записей с таким атрибутом).
Пол: мужской (есть 170 тыс. записей)
Семейное положение: холост (есть 100 тыс. записей)
Цель знакомства: брак (есть 80 тыс. записей)
Цвет волос: брюнет (70 тыс. записей)
Возраст: от 25 до 45 (50 тыс. записей)

Таким образом, в лучшем случае (если планировщик выберет правильный порядок соединения) будет сделано как минимум 5 соединений по 50 тыс. записей. И хорошо еще если только 5 и только по 50 тысяч - что, в принципе, отрабатывает за приемлемое время при разогретом кеше. Но если кеш холодный, то время отклика уже не лезет ни в какие ворота (более 10 секунд). А если будет не очень селективный запрос с бОльшим числом параметров, то у пользователя определенно все зависнет.

Естественно, на выходе нужно получить всего лишь десяток записей. Но этот десяток должен быть выбран из списка, отсортированного по времени регистрации пользователей. И никуда не деться от того, чтобы не проделать прежде все эти соединения.
Вот если бы СУБД умела соединять таблицы не последовательно (сначала полностью первую пару, потом к тому что получилось, полностью третью таблицу, и т.д.), а выбирать совпадающие записи из этих таблиц (отсортированных, конечно) по одной, пока не наберется количество, указанное в опции LIMIT (или TOP). Я даже пытался сделать сам такой велосипед посредством скрипта в Postgres. Но ничего путного из этого не вышло.
11 янв 11, 03:07    [10050915]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
SERG1257
Member

Откуда:
Сообщений: 2933
Кстати там только поиск или изменения тоже?
Васисуалий Пупкинсон
В принципе, можно конечно иметь в таблице несколько сотен колонок со всеми этими атрибутами
Я бы начал с этого варианта не связываясь с EAV. Пустые значения хранится не должны, в блоке будет довольно много записей, для произвольных запросов полное сканирование таблицы - некое последнее средство. Соответсвенно хэш-партиционирование способ его ускорить. Плюс вложится в память, чтобы таблица залезла в буферный кэш и хорошую дисковую подсистему. Для новых признаков можно завести EAV с тем чтобы потом перетащить их в основную таблицу. Правда без простоев тут не получится.

Васисуалий Пупкинсон
Да, насчет indexed view пожалуй неплохая мысль. А в PostgreSQL или в MySQL это можно реализовать? Если нет, то подскажите плиз какие-нить бесплатные решения,
Технически это копия части таблицы, поддерживаемая например триггерами с наложенными условиями. Хитрость в том, чтобы оптимизатор догадался просканировать именно ее, а не базовую таблицу
11 янв 11, 03:11    [10050919]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной?

тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте
11 янв 11, 03:15    [10050921]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
пусть основная таблица хранит общие данные типа дата регистрации, логин, фио, дата рождения - имхо, это самый оптимальный путь
11 янв 11, 03:17    [10050922]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
pilot911
а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной?
тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте


Да, это я пробовал делать. Для каждого вида атрибута - отдельная таблица. Действительно, хорошая оптимизация. Но к сожалению, это не устраняет основного камня преткновения - ситуаций, когда нужно сделать много (5 - 10, а то и больше) связываний таблиц, где каждое связывание - по нескольку десятков тысяч записей. Естественно, такие ситуации будут встречаться не на каждом шагу. И может быть даже придется с этим смириться. Но хотелось бы прежде испробовать все возможности найти решение, которое позволило бы с приемлемой скоростью обрабатывать даже такие вот неудобные запросы.
11 янв 11, 03:54    [10050933]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
Васисуалий Пупкинсон,

надеюсь, в проведенных тестах ваш запрос выглядел INNER JOIN a ON a.id=b.id AND a.have_boroda=1 AND a.have_girl=1
11 янв 11, 04:15    [10050938]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
если так - то запрос должен выполняться очень быстро даже на миллионах записей
11 янв 11, 04:16    [10050939]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
servit
Bitmap-индексы в СУБД Caché.


Почитал, хорошее дело. Вот правда, непонятно, сколько стоит лицензия. На сайте указано только
автор
I love Caché! How can I purchase a license?
We offer a variety of license types – one of them is sure to be right for you. Please call us toll-free at +1.800.753.2571, or contact your local InterSystems office to discuss your needs.


Как-то мутно это... Вообще, когда вижу такой подход к делу (типа цену озвучивают только при личном общении), как-то сразу интерес снижается. Навевает что-то вроде
"Скажите, сколько стоит ваша пищевая добавка? - Это зависит от множества факторов! Для начала скажите, пожалуйста, какой марки Ваш автомобиль?".
11 янв 11, 05:25    [10050956]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
Вдогон к предыдущему посту - в общем, написал я им вопрос, сколько стоит эта радость для использования на веб-сайте. Посмотрим, что скажут.
11 янв 11, 05:37    [10050958]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
SERG1257
Member

Откуда:
Сообщений: 2933
Васисуалий Пупкинсон
пока не наберется количество, указанное в опции LIMIT (или TOP).
То есть вам нужно время отклика до первых limit записей. Тогда сам бог велел разбить таблицу на две - м и ж, кластеризовать по дате регистрации и читать последовательно.

Васисуалий Пупкинсон
Почитал, хорошее дело.

Таки да битмап индекс самый эффективный по io способ. Правда как оно реализовано в Каше не знаю, а Oracle EE вам не подходит.
11 янв 11, 05:37    [10050959]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
pilot911
Васисуалий Пупкинсон,

надеюсь, в проведенных тестах ваш запрос выглядел INNER JOIN a ON a.id=b.id AND a.have_boroda=1 AND a.have_girl=1
если так - то запрос должен выполняться очень быстро даже на миллионах записей


Да, принцип именно такой. И действительно, даже на миллионах записей выполняется очень быстро, если количество джойнов не превышает примерно 5 штук. Если больше, и при этом джойнится большое количество строк каждый раз, то вот тогда уже появляются тормоза.
11 янв 11, 05:40    [10050960]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать?

и каше плохо работает на миллионах записей, я вам не советую, хотя ради интереса можете потестировать
11 янв 11, 06:08    [10050974]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
pilot911
я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать?
и каше плохо работает на миллионах записей, я вам не советую, хотя ради интереса можете потестировать


Насчет диапазонов - на их сайте написано вот это:

автор
The SQL Engine can use bitmap indices for the following operations:
* ANDing of multiple conditions on a given table.
* ORing of multiple conditions on a given table.
* RANGE conditions on a given table.
* COUNT operations on a given table.


вроде бы, пункт про RANGE - как раз на эту тему. Но я, как говорится, за что купил, за то продал, судить не берусь.

Насчет "плохо работает на миллионах записей" - тоже конечно судить не берусь, т.к. не юзал, но вообще просто интересно - как же тогда они на этом строят учетные системы государственного масштаба?
11 янв 11, 08:21    [10051067]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
Васисуалий Пупкинсон,

системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь
11 янв 11, 08:33    [10051084]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
pilot911
Member [заблокирован]

Откуда: Москва
Сообщений: 3906
В точку. Это основная причина (поддержка старья), мало кто больше хочет с таким чудом связываться (с трудом удерживаюсь от использования более крепких эпитетов). Тем не менее, такие чудаки есть - я уже говорил про них выше, те же деятели что написали ту delphi приладу. Я их спросил: ну почему, почему, почему, мать вашу, каша? Говорят, как с рекламки читают: "Быстро, секурно, не требует поддержки, совместимо на уровне SQL с Oracle / SS". Я чуть не заплакал, пока все это слушал... от умиления. Потом выяснилось, что, по странному совпадению, другими СУБД эти товарищи пользоваться не умеют. Единственное разумное обоснование, что я услышал: в каше легко писать полу-нативный код взаимодействующий по TCP/IP или последовательным/параллельным (RS232/LPT) портам с внешним оборудованием. То есть, хранимая процедура (или там рутина, я до сих пор путаюсь в кэшевской терминологии) может слазить за данными по TCP/IP и засунуть их в таблицу. А в условиях лабораторий это приходится делать очень часто при использовании 3-е стороннего оборудования.

Справедливости ради, замечу, что под SQL Server, к примеру, такое сделать можно - через extended stored proc, но чтобы ее поставить и заактивировать, надо встать раком и почесать левой пяткой за правым ухом, хотя, номинально это вполне легко. Другое дело, что я бы не стал такую хрень делать на СУБД, а написал бы отдельный сервис для сборки данных (что и придется делать в скором времени, чует мое седалище*).
11 янв 11, 08:38    [10051095]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
Васисуалий Пупкинсон
Member

Откуда: Москва
Сообщений: 23
pilot911
Васисуалий Пупкинсон,

системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь


Да, пожалуй, с госмаштабом я возможно погорячился :). Просто когда их сайт просматривал, то создалось впечатление, что национальная система здравоохранения это дело использует. Но при ближайшем рассмотрении - просто отдельные госпитали.
11 янв 11, 09:01    [10051136]     Ответить | Цитировать Сообщить модератору
 Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
pilot911
я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать?

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

Выше я приводил пример запроса для миллиона записей.
Специальные Bitmap/Bitslice индексы активно используются в DeepSee (оперативная бизнес-аналитика на транзакционных данных без создания отдельного хранилища).

pilot911
системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь

  • Государственный сектор
  • Ещё
    На недавнем Симпозиуме я даже встречался с некоторыми из разработчиков Пенсионного Фонда РФ.
    Посмотрите одну из презентаций с этого мероприятия.
  • 11 янв 11, 09:40    [10051230]     Ответить | Цитировать Сообщить модератору
     Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    вобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды
    может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты?
    11 янв 11, 10:33    [10051450]     Ответить | Цитировать Сообщить модератору
     Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
    ikk
    Guest
    Храните аттрибуты в MongoDB. А остальные данные в текущей базе.
    11 янв 11, 11:00    [10051644]     Ответить | Цитировать Сообщить модератору
     Re: EAV с возможностью быстрой выборки по сложным условиям  [new]
    Siemargl
    Member

    Откуда: 010100
    Сообщений: 6641
    SergSuper
    вобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды
    может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты?

    Вот блин, только хотел спросить, сколько занимает фуллскан по денормализованной базе )))))))

    Кстати, темка вполне актуальна для NoSQL БД. Как раз ТС не помещается в прокрустово ложе SQLя
    11 янв 11, 11:26    [10051830]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
    Все форумы / Сравнение СУБД Ответить