powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / EAV с возможностью быстрой выборки по сложным условиям
25 сообщений из 109, страница 2 из 5
EAV с возможностью быстрой выборки по сложным условиям
    #37051617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 10.01.2011 20:22, Васисуалий Пупкинсон wrote:

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

Что-то не видно тут OR.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051620
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv> Они также специально предназначен именно для случаев, когда количество различных
> значений невелико. Тут подойдет даже рост, который имеет диапазон от 100 до 210.
Как критерии будем объединять ?
Вопроса не понял. Но все равно можно расслабиться - человеку бесплатно нужно
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051621
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 10.01.2011 20:27, Васисуалий Пупкинсон wrote:

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

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

В принципе можно добиться работы этого в любой субд, особым образом написав
запросы. Но это без OR и NOT IN. Про них я пока ничего не понял.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051763
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКак критерии будем объединять ?

Про star query что-нибудь когда-нибудь слышали?
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051782
MasterZivOn 10.01.2011 20:22, Васисуалий Пупкинсон wrote:

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

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


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

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

В принципе, если с реализацией OR возникнут проблемы, то без него можно и обойтись, прибегнув к данной тактике - превратив атрибуты, которые могут употребляться через OR в значения, объединенные каким-нибудь общим атрибутом.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051788
MasterZivПодозреваю, что ключевое умение СУБД тут -- возможность при запросе использовать
несколько индексов по одной таблице, делая merge join таблицы самой с собой
(каждая отобрана по условию с использованием индекса).

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


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

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

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

Естественно, на выходе нужно получить всего лишь десяток записей. Но этот десяток должен быть выбран из списка, отсортированного по времени регистрации пользователей. И никуда не деться от того, чтобы не проделать прежде все эти соединения.
Вот если бы СУБД умела соединять таблицы не последовательно (сначала полностью первую пару, потом к тому что получилось, полностью третью таблицу, и т.д.), а выбирать совпадающие записи из этих таблиц (отсортированных, конечно) по одной, пока не наберется количество, указанное в опции LIMIT (или TOP). Я даже пытался сделать сам такой велосипед посредством скрипта в Postgres. Но ничего путного из этого не вышло.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051789
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати там только поиск или изменения тоже?
Васисуалий Пупкинсон В принципе, можно конечно иметь в таблице несколько сотен колонок со всеми этими атрибутамиЯ бы начал с этого варианта не связываясь с EAV. Пустые значения хранится не должны, в блоке будет довольно много записей, для произвольных запросов полное сканирование таблицы - некое последнее средство. Соответсвенно хэш-партиционирование способ его ускорить. Плюс вложится в память, чтобы таблица залезла в буферный кэш и хорошую дисковую подсистему. Для новых признаков можно завести EAV с тем чтобы потом перетащить их в основную таблицу. Правда без простоев тут не получится.

Васисуалий Пупкинсон Да, насчет indexed view пожалуй неплохая мысль. А в PostgreSQL или в MySQL это можно реализовать? Если нет, то подскажите плиз какие-нить бесплатные решения,Технически это копия части таблицы, поддерживаемая например триггерами с наложенными условиями. Хитрость в том, чтобы оптимизатор догадался просканировать именно ее, а не базовую таблицу
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051790
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной?

тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051791
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть основная таблица хранит общие данные типа дата регистрации, логин, фио, дата рождения - имхо, это самый оптимальный путь
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051795
pilot911а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной?
тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте

Да, это я пробовал делать. Для каждого вида атрибута - отдельная таблица. Действительно, хорошая оптимизация. Но к сожалению, это не устраняет основного камня преткновения - ситуаций, когда нужно сделать много (5 - 10, а то и больше) связываний таблиц, где каждое связывание - по нескольку десятков тысяч записей. Естественно, такие ситуации будут встречаться не на каждом шагу. И может быть даже придется с этим смириться. Но хотелось бы прежде испробовать все возможности найти решение, которое позволило бы с приемлемой скоростью обрабатывать даже такие вот неудобные запросы.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051798
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васисуалий Пупкинсон,

надеюсь, в проведенных тестах ваш запрос выглядел INNER JOIN a ON a.id=b.id AND a.have_boroda=1 AND a.have_girl=1
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051799
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если так - то запрос должен выполняться очень быстро даже на миллионах записей
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051812
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.

Как-то мутно это... Вообще, когда вижу такой подход к делу (типа цену озвучивают только при личном общении), как-то сразу интерес снижается. Навевает что-то вроде
"Скажите, сколько стоит ваша пищевая добавка? - Это зависит от множества факторов! Для начала скажите, пожалуйста, какой марки Ваш автомобиль?".
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051813
Вдогон к предыдущему посту - в общем, написал я им вопрос, сколько стоит эта радость для использования на веб-сайте. Посмотрим, что скажут.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051814
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васисуалий Пупкинсон пока не наберется количество, указанное в опции LIMIT (или TOP).То есть вам нужно время отклика до первых limit записей. Тогда сам бог велел разбить таблицу на две - м и ж, кластеризовать по дате регистрации и читать последовательно.

Васисуалий Пупкинсон Почитал, хорошее дело.
Таки да битмап индекс самый эффективный по io способ. Правда как оно реализовано в Каше не знаю, а Oracle EE вам не подходит.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051815
pilot911Васисуалий Пупкинсон,

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

Да, принцип именно такой. И действительно, даже на миллионах записей выполняется очень быстро, если количество джойнов не превышает примерно 5 штук. Если больше, и при этом джойнится большое количество строк каждый раз, то вот тогда уже появляются тормоза.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051824
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать?

и каше плохо работает на миллионах записей, я вам не советую, хотя ради интереса можете потестировать
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051873
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 - как раз на эту тему. Но я, как говорится, за что купил, за то продал, судить не берусь.

Насчет "плохо работает на миллионах записей" - тоже конечно судить не берусь, т.к. не юзал, но вообще просто интересно - как же тогда они на этом строят учетные системы государственного масштаба?
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051875
Фотография pilot911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васисуалий Пупкинсон,

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

Справедливости ради, замечу, что под SQL Server, к примеру, такое сделать можно - через extended stored proc, но чтобы ее поставить и заактивировать, надо встать раком и почесать левой пяткой за правым ухом, хотя, номинально это вполне легко. Другое дело, что я бы не стал такую хрень делать на СУБД, а написал бы отдельный сервис для сборки данных (что и придется делать в скором времени, чует мое седалище*).
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051894
pilot911Васисуалий Пупкинсон,

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

Да, пожалуй, с госмаштабом я возможно погорячился :). Просто когда их сайт просматривал, то создалось впечатление, что национальная система здравоохранения это дело использует. Но при ближайшем рассмотрении - просто отдельные госпитали.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051936
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pilot911я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать?

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

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

Ещё
На недавнем Симпозиуме я даже встречался с некоторыми из разработчиков Пенсионного Фонда РФ.
Посмотрите одну из презентаций с этого мероприятия.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37051995
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды
может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты?
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37052047
ikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ikk
Гость
Храните аттрибуты в MongoDB. А остальные данные в текущей базе.
...
Рейтинг: 0 / 0
EAV с возможностью быстрой выборки по сложным условиям
    #37052090
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperвобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды
может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты?
Вот блин, только хотел спросить, сколько занимает фуллскан по денормализованной базе )))))))

Кстати, темка вполне актуальна для NoSQL БД. Как раз ТС не помещается в прокрустово ложе SQLя
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 2 из 5
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / EAV с возможностью быстрой выборки по сложным условиям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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