|
|
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
On 10.01.2011 20:22, Васисуалий Пупкинсон wrote: > Типовой запрос с AND и OR например такой: > > женщина > И > город - С.Петербург > И > не замужем > И > цель знакомства - (брак ИЛИ романтические отношения ИЛИ дружба) > И > цвет волос - блондинка И > NOT курит Что-то не видно тут OR. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2011, 22:27 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
MasterZiv> Они также специально предназначен именно для случаев, когда количество различных > значений невелико. Тут подойдет даже рост, который имеет диапазон от 100 до 210. Как критерии будем объединять ? Вопроса не понял. Но все равно можно расслабиться - человеку бесплатно нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2011, 22:29 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
On 10.01.2011 20:27, Васисуалий Пупкинсон wrote: > Ох, попробую конечно, если больше никаких вариантов не будет. Просто очень уж не > хочется с Ораклом связываться. При всем уважении, конечно. Если бы это > корпоративный софт был, за который есть кому хорошо заплатить, тогда без > вопросов, но тут ситуация несколько другая... Бюджет довольно-таки ограничен, увы. Подозреваю, что ключевое умение СУБД тут -- возможность при запросе использовать несколько индексов по одной таблице, делая merge join таблицы самой с собой (каждая отобрана по условию с использованием индекса). В принципе можно добиться работы этого в любой субд, особым образом написав запросы. Но это без OR и NOT IN. Про них я пока ничего не понял. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2011, 22:30 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
MasterZivКак критерии будем объединять ? Про star query что-нибудь когда-нибудь слышали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 01:43 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 10.01.2011 20:22, Васисуалий Пупкинсон wrote: > Типовой запрос с AND и OR например такой: > > женщина > И > город - С.Петербург > И > не замужем > И > цель знакомства - (брак ИЛИ романтические отношения ИЛИ дружба) > И > цвет волос - блондинка И > NOT курит Что-то не видно тут OR. Да, и правда, то что я имел в виду под OR - это не что иное как IN для значений. Тогда правильный пример будет таким: женщина И город - С.Петербург И не замужем И цель знакомства IN (брак, романтические отношения, дружба) И цвет волос - блондинка И NOT курит В принципе, если с реализацией OR возникнут проблемы, то без него можно и обойтись, прибегнув к данной тактике - превратив атрибуты, которые могут употребляться через OR в значения, объединенные каким-нибудь общим атрибутом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 02:21 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
MasterZivПодозреваю, что ключевое умение СУБД тут -- возможность при запросе использовать несколько индексов по одной таблице, делая merge join таблицы самой с собой (каждая отобрана по условию с использованием индекса). В принципе можно добиться работы этого в любой субд, особым образом написав запросы. Со способом, использующим соединение таблиц, есть проблема, если в условии поиска заданы не очень селективные атрибуты. Например, условия поиска такие: Страна: Россия или Украина (допустим, есть 300 тыс. записей с таким атрибутом). Пол: мужской (есть 170 тыс. записей) Семейное положение: холост (есть 100 тыс. записей) Цель знакомства: брак (есть 80 тыс. записей) Цвет волос: брюнет (70 тыс. записей) Возраст: от 25 до 45 (50 тыс. записей) Таким образом, в лучшем случае (если планировщик выберет правильный порядок соединения) будет сделано как минимум 5 соединений по 50 тыс. записей. И хорошо еще если только 5 и только по 50 тысяч - что, в принципе, отрабатывает за приемлемое время при разогретом кеше. Но если кеш холодный, то время отклика уже не лезет ни в какие ворота (более 10 секунд). А если будет не очень селективный запрос с бОльшим числом параметров, то у пользователя определенно все зависнет. Естественно, на выходе нужно получить всего лишь десяток записей. Но этот десяток должен быть выбран из списка, отсортированного по времени регистрации пользователей. И никуда не деться от того, чтобы не проделать прежде все эти соединения. Вот если бы СУБД умела соединять таблицы не последовательно (сначала полностью первую пару, потом к тому что получилось, полностью третью таблицу, и т.д.), а выбирать совпадающие записи из этих таблиц (отсортированных, конечно) по одной, пока не наберется количество, указанное в опции LIMIT (или TOP). Я даже пытался сделать сам такой велосипед посредством скрипта в Postgres. Но ничего путного из этого не вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 03:07 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Кстати там только поиск или изменения тоже? Васисуалий Пупкинсон В принципе, можно конечно иметь в таблице несколько сотен колонок со всеми этими атрибутамиЯ бы начал с этого варианта не связываясь с EAV. Пустые значения хранится не должны, в блоке будет довольно много записей, для произвольных запросов полное сканирование таблицы - некое последнее средство. Соответсвенно хэш-партиционирование способ его ускорить. Плюс вложится в память, чтобы таблица залезла в буферный кэш и хорошую дисковую подсистему. Для новых признаков можно завести EAV с тем чтобы потом перетащить их в основную таблицу. Правда без простоев тут не получится. Васисуалий Пупкинсон Да, насчет indexed view пожалуй неплохая мысль. А в PostgreSQL или в MySQL это можно реализовать? Если нет, то подскажите плиз какие-нить бесплатные решения,Технически это копия части таблицы, поддерживаемая например триггерами с наложенными условиями. Хитрость в том, чтобы оптимизатор догадался просканировать именно ее, а не базовую таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 03:11 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной? тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 03:15 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
пусть основная таблица хранит общие данные типа дата регистрации, логин, фио, дата рождения - имхо, это самый оптимальный путь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 03:17 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
pilot911а что мешает разбить аттрибуты на группы и хранить их в разных таблицах, связываемых с основной? тогда сможете хранить аттрибуты с множественными значеними и производительность будет на высоте Да, это я пробовал делать. Для каждого вида атрибута - отдельная таблица. Действительно, хорошая оптимизация. Но к сожалению, это не устраняет основного камня преткновения - ситуаций, когда нужно сделать много (5 - 10, а то и больше) связываний таблиц, где каждое связывание - по нескольку десятков тысяч записей. Естественно, такие ситуации будут встречаться не на каждом шагу. И может быть даже придется с этим смириться. Но хотелось бы прежде испробовать все возможности найти решение, которое позволило бы с приемлемой скоростью обрабатывать даже такие вот неудобные запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 03:54 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Васисуалий Пупкинсон, надеюсь, в проведенных тестах ваш запрос выглядел INNER JOIN a ON a.id=b.id AND a.have_boroda=1 AND a.have_girl=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 04:15 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
если так - то запрос должен выполняться очень быстро даже на миллионах записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 04:16 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
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.01.2011, 05:25 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Вдогон к предыдущему посту - в общем, написал я им вопрос, сколько стоит эта радость для использования на веб-сайте. Посмотрим, что скажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 05:37 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Васисуалий Пупкинсон пока не наберется количество, указанное в опции LIMIT (или TOP).То есть вам нужно время отклика до первых limit записей. Тогда сам бог велел разбить таблицу на две - м и ж, кластеризовать по дате регистрации и читать последовательно. Васисуалий Пупкинсон Почитал, хорошее дело. Таки да битмап индекс самый эффективный по io способ. Правда как оно реализовано в Каше не знаю, а Oracle EE вам не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 05:37 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
pilot911Васисуалий Пупкинсон, надеюсь, в проведенных тестах ваш запрос выглядел INNER JOIN a ON a.id=b.id AND a.have_boroda=1 AND a.have_girl=1 если так - то запрос должен выполняться очень быстро даже на миллионах записей Да, принцип именно такой. И действительно, даже на миллионах записей выполняется очень быстро, если количество джойнов не превышает примерно 5 штук. Если больше, и при этом джойнится большое количество строк каждый раз, то вот тогда уже появляются тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 05:40 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать? и каше плохо работает на миллионах записей, я вам не советую, хотя ради интереса можете потестировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 06:08 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
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.01.2011, 08:21 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Васисуалий Пупкинсон, системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 08:33 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
В точку. Это основная причина (поддержка старья), мало кто больше хочет с таким чудом связываться (с трудом удерживаюсь от использования более крепких эпитетов). Тем не менее, такие чудаки есть - я уже говорил про них выше, те же деятели что написали ту delphi приладу. Я их спросил: ну почему, почему, почему, мать вашу, каша? Говорят, как с рекламки читают: "Быстро, секурно, не требует поддержки, совместимо на уровне SQL с Oracle / SS". Я чуть не заплакал, пока все это слушал... от умиления. Потом выяснилось, что, по странному совпадению, другими СУБД эти товарищи пользоваться не умеют. Единственное разумное обоснование, что я услышал: в каше легко писать полу-нативный код взаимодействующий по TCP/IP или последовательным/параллельным (RS232/LPT) портам с внешним оборудованием. То есть, хранимая процедура (или там рутина, я до сих пор путаюсь в кэшевской терминологии) может слазить за данными по TCP/IP и засунуть их в таблицу. А в условиях лабораторий это приходится делать очень часто при использовании 3-е стороннего оборудования. Справедливости ради, замечу, что под SQL Server, к примеру, такое сделать можно - через extended stored proc, но чтобы ее поставить и заактивировать, надо встать раком и почесать левой пяткой за правым ухом, хотя, номинально это вполне легко. Другое дело, что я бы не стал такую хрень делать на СУБД, а написал бы отдельный сервис для сборки данных (что и придется делать в скором времени, чует мое седалище*). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 08:38 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
pilot911Васисуалий Пупкинсон, системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь Да, пожалуй, с госмаштабом я возможно погорячился :). Просто когда их сайт просматривал, то создалось впечатление, что национальная система здравоохранения это дело использует. Но при ближайшем рассмотрении - просто отдельные госпитали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 09:01 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
pilot911я недавно оставил работу с каше, точнее с ее частью, так вот, бит индекс - не панацея в вашем варианте, поскольку позволяет искать точное совпадение, с диапазоном дат как вы битиндекс будете использовать? и каше плохо работает на миллионах записей, я вам не советую, хотя ради интереса можете потестировать Выше я приводил пример запроса для миллиона записей. Специальные Bitmap/Bitslice индексы активно используются в DeepSee (оперативная бизнес-аналитика на транзакционных данных без создания отдельного хранилища). pilot911системы госмасштаба на каше мне неизвестны, может вам известны? поделитесь Государственный сектор Ещё На недавнем Симпозиуме я даже встречался с некоторыми из разработчиков Пенсионного Фонда РФ. Посмотрите одну из презентаций с этого мероприятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 09:40 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
вобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 10:33 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
Храните аттрибуты в MongoDB. А остальные данные в текущей базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 11:00 |
|
||
|
EAV с возможностью быстрой выборки по сложным условиям
|
|||
|---|---|---|---|
|
#18+
SergSuperвобще странно, мне кажется что для 100 тыч записей полное сканирование должно занимать доли секунды может имеет смысл наиболее селективные атрибуты записывать в одну таблицу, делать простейший запрос, а потом проверять дополнительные атрибуты? Вот блин, только хотел спросить, сколько занимает фуллскан по денормализованной базе ))))))) Кстати, темка вполне актуальна для NoSQL БД. Как раз ТС не помещается в прокрустово ложе SQLя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2011, 11:26 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=37051873&tid=1552724]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 404ms |

| 0 / 0 |
