powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / самый эффективный способ посчитать позиции в битмапе?
25 сообщений из 85, страница 2 из 4
самый эффективный способ посчитать позиции в битмапе?
    #39852558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте обсудим недостатки решения которое приведено в статье https://habr.com/ru/post/261137/
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852570
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНапомнило мой топик https://www.sql.ru/forum/1242903/tyapnichnyy-poisk-tovarov-po-naboru-atributov
ну так эта тема про решение твоей проблемы

а советы фронтендеров с фреймворками для меня имеют нулевую ценность, поэтому у меня в их разделе 0 тем
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852572
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте обсудим недостатки решения которое приведено в статье https://habr.com/ru/post/261137/
если что не устраивает, есть ещё монга и эластик
но как по мне решение идеальное
на самом деле тут редис то вроде и не нужен (надо тестить)
в постгре можно ф-ю держать, она также в памяти отработает
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852575
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постгрес никогда не считался быстрой системой. Такова его архитектура. Поэтому. Есть у меня сомнения.

По поводу редиски я не против но нужен внятный механизм расширения бизнес модели этих фасетов
и классификаторов.

Вангую что девочка-контент-менеджер магазина просто ушатает эту систему постоянно (2-3) раза в час
закидывая туда новые типы товаров и их атрибутов поиска.

Если механика расширения (на ходу!) изначально заложена то гуд. Если нет - то система будет постоянно
ребилдится и как следствие недоступна.

Вангую также что девочка закинет туда 100500 классов (из Экцеля ага) просто так на всякий случай.
на будущее. И эти пустые атрибуты навсегда займут место в битовой маске. И не будет никакой
возможности в будущем их утрамбовать обратно.

К каким последствиям приведет пустое неиспользованое захватывание бит в маске вы можете
посчитать. Это память сервера Redis. А память обычно очень быстро кончается.

Вот теперь давайте обсуждать эти поинты. И если эти сценарии невозможны - то почему.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852576
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПостгрес никогда не считался быстрой системой. Такова его архитектураон упорно гнет решение расширить постгри и в его оперативке решать задачи.

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

Я где-то в глубине души даже готов согласиться. Но почему за более чем 20 лет эволюции, Postgres
не предоставил нам коробочного решения для фасетного поиска?

Варианты. 1) Это не работает в Postgresql. 2) Гибридные решения с Redis работают эффективнее.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852598
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВарианты. 1) Это не работает в Postgresql. 2) Гибридные решения с Redis работают эффективнее.
3. Фасетный поиск это не задача реляционных БД.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852606
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpmaytonВарианты. 1) Это не работает в Postgresql. 2) Гибридные решения с Redis работают эффективнее.
3. Фасетный поиск это не задача реляционных БД.
А полнотекстовый? А ГИС?
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852610
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ГИС это отдельные картриджи в сиквел, оракле и постгри.
Полнотекстовый насколько помню в java используют не саму Рсубд.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852619
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может полудух хочет кардтридж под Постргрес. Чем его идея тогда хуже оракловой?
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852633
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожет полудух хочет кардтридж под Постргрес. Чем его идея тогда хуже оракловой?может. Пусть делает.
Мы обсудили почему за 20 лет нет этого до сих пор.
Это есть но не в бд.
Когда что то пишешь с нуля, надо понимать - зачем.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852657
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что поиск в БД по списку денормализованных атрибутов - не согласуется с чистой теорией.
Это даже не 1НФ. Но есть потребности бизнеса в том чтобы искать какую-то хрень например

SELECT * from TOVAR where contains(hashtags,'Samsung','HDMI',......и еще штук 20 атрибутов)

и искать быстро. На предельной скорости. Полнотекстовые движки это решают фильтром Блума + точной проверкой после
предварительной выборки.

Это даже инкапсулировано в некоторые файловые форматы бигдаты такие как Apache ORC.

Кстати в одном из семинаров по постргресу главный постгресщик рассказывал историю возникновения JSONB.
До этого был другой подход. Просто в хранении списка ключевых слов и в текстовом индексировании. Я думаю
что это может быть то что нужно полудуху. Пускай он погуглит по легаси-плагинам. Или опять-же JSONB+index.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852668
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSELECT * from TOVAR where contains(hashtags,'Samsung','HDMI',......и еще штук 20 атрибутов)надо еще доказать что это долго.
Пример
https://www.booking.com/searchresults.ru.html?aid=315714&label=hotel-17190-cy-BYwqOZylBAFd_pFvFJS5*QS261061452601:pl:ta:p1:p2:ac:ap1t1:neg:fi:tikwd-45059702856:lp9040992:li:det:dm&sid=e86994e98710d3de6b5454fa3f600536&sb=1&src=searchresults&src_elem=sb&error_url=https://www.booking.com/searchresults.ru.html?aid=315714;label=hotel-17190-cy-BYwqOZylBAFd_pFvFJS5%2AQS261061452601%3Apl%3Ata%3Ap1%3Ap2%3Aac%3Aap1t1%3Aneg%3Afi%3Atikwd-45059702856%3Alp9040992%3Ali%3Adet%3Adm;sid=e86994e98710d3de6b5454fa3f600536;tmpl=searchresults;checkin_month=9;checkin_monthday=28;checkin_year=2019;checkout_month=10;checkout_monthday=3;checkout_year=2019;city=-2738120;class_interval=1;dest_id=-2738120;dest_type=city;dtdisc=0;from_sf=1;group_adults=2;group_children=0;highlighted_hotels=17190;inac=0;index_postcard=0;label_click=undef;nflt=pri%3D2%3Bhr_24%3D8%3Bht_id%3D204%3Breview_score%3D80%3B;no_rooms=1;offset=0;postcard=0;room1=A%2CA;sb_price_type=total;shw_aparth=1;slp_r_match=0;src=searchresults;src_elem=sb;srpvid=0da65b5061f1016b;ss=%D0%90%D0%B9%D0%B8%D1%8F-%D0%9D%D0%B0%D0%BF%D0%B0;ss_all=0;ssb=empty;sshis=0;ssne=%D0%90%D0%B9%D0%B8%D1%8F-%D0%9D%D0%B0%D0%BF%D0%B0;ssne_untouched=%D0%90%D0%B9%D0%B8%D1%8F-%D0%9D%D0%B0%D0%BF%D0%B0&;&highlighted_hotels=17190&ss=Айия-Напа&is_ski_area=0&ssne=Айия-Напа&ssne_untouched=Айия-Напа&city=-2738120&checkin_year=2019&checkin_month=9&checkin_monthday=29&checkout_year=2019&checkout_month=10&checkout_monthday=3&group_adults=2&group_children=0&no_rooms=1&from_sf=1&nflt=pri=2;hr_24=8;ht_id=204;review_score=80;
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852671
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, я не понял к чему эта ссылка.
Я с твоего позволения не буду на нее нажимать.
Можешь прояснить к чему она? Что там внутри?
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852694
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Формирование параметров вебмагазина букинга по товарам.
На форуме ссылок с вирусами нет.
Видно что параметров куча и все они не битовые маски.
Можно 20 парам поставить в where и все они отработают на ура.
То есть твоё число 20 имхо мало чтобы были проблемы.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852750
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПостгрес никогда не считался быстрой системой. Такова его архитектура. Поэтому. Есть у меня сомнения.

По поводу редиски я не против но нужен внятный механизм расширения бизнес модели этих фасетов
и классификаторов.

Вангую что девочка-контент-менеджер магазина просто ушатает эту систему постоянно (2-3) раза в час
закидывая туда новые типы товаров и их атрибутов поиска.

Если механика расширения (на ходу!) изначально заложена то гуд. Если нет - то система будет постоянно
ребилдится и как следствие недоступна.

Вангую также что девочка закинет туда 100500 классов (из Экцеля ага) просто так на всякий случай.
на будущее. И эти пустые атрибуты навсегда займут место в битовой маске. И не будет никакой
возможности в будущем их утрамбовать обратно.

К каким последствиям приведет пустое неиспользованое захватывание бит в маске вы можете
посчитать. Это память сервера Redis. А память обычно очень быстро кончается.

Вот теперь давайте обсуждать эти поинты. И если эти сценарии невозможны - то почему.
там есть один нюанс, которого в статье нет
нужна агрегация
потому что только агрегация даст последовательную цепочку ID, которым соответствуют позиции 01 в битмапе (они же последовательно идут)
иначе неизбежны пробелы.
с одной стороны доп.костыль, а с другой - нет никаких проблем с обновлением в любой точке
чё угодно можно выкинуть, чё угодно вставить
и никакие девки не страшны

лишние атрибуты конечно надо выкидывать, а как ещё
только вот атрибуты хранятся в справочнике и их можно автоматически включать в фильтр

памяти там 625 КБ
авторплюсы такого решения:
1) Жрёт мало памяти. У нас > 50000 товаров, около 100 значений фильтров, то есть 50000 * 100 = 5 000 000 бит = всего 625 килобайт памяти.
2) Очень быстро. Сложность побитовой операции O(N), тем не менее, строки у нас не миллионами байт измеряются, а перемножить пару-тройку битмапов ио 50000 бит — задача пары микросекунд для процессора. Overall, в худшем случае (перемножение всех фильтров), замеряя разницу времени в PHP до отправки команды в REDIS и после получения результата — 40мс (это с доп. функцией из п.3, далее). Вполне реалтаймовая генерация страницы, для веба пойдёт. Если кажется много — просьба кешируйте результат, но нас это удовлетворило вполне.
maytonПостгрес никогда не считался быстрой системой. Такова его архитектура. Поэтому. Есть у меня сомнения.
во1, это не так. Откуда такое заявление взялось?
во2, речь про операции в памяти. Мелкая таблица с атрибутами измеряется в килобайтах и будет в памяти всю дорогу. Накинуть на неё операцию AND - займёт, по идее, столько же, сколько и в редиске.
Вопрос только в алгоритмах, но там же стандартная библиотека должна быть.
maytonНо почему за более чем 20 лет эволюции, Postgres не предоставил нам коробочного решения для фасетного поиска?
ты же говорил, что любитель послушать лекции по постгре, так там Бартунов регулярно говорит, что людей мало, людей не хватает, люди вы где, ау?, люди, дайте людей!, вэлком люди, у нас куча задач, нужны люди, люди, ЛЮДИ11!
через одну повторяет

maytonКстати в одном из семинаров по постргресу главный постгресщик рассказывал историю возникновения JSONB.
До этого был другой подход. Просто в хранении списка ключевых слов и в текстовом индексировании. Я думаю
что это может быть то что нужно полудуху. Пускай он погуглит по легаси-плагинам. Или опять-же JSONB+index.
я про JSONB ещё года 2 назад всё изучил и тесты с монгой видел
JSONB не то.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852751
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpmaytonSELECT * from TOVAR where contains(hashtags,'Samsung','HDMI',......и еще штук 20 атрибутов)надо еще доказать что это долго.
Пример
(мусор удалён)
вы там с Димой один косяк на двоих чтоли курите

вот так фильтр выглядит: /?f=ap:5_3_5;bh:28_99_33;ck:7_9_22
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852757
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ думаю что поиск в БД по списку денормализованных атрибутов - не согласуется с чистой теорией.
Это даже не 1НФ. Но есть потребности бизнеса в том чтобы искать какую-то хрень например
денормализация и поиск по ID - это самый быстрый вариант что-то найти
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852762
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухнужна агрегация
потому что только агрегация даст последовательную цепочку ID, которым соответствуют позиции 01 в битмапе (они же последовательно идут)
иначе неизбежны пробелы.
с одной стороны доп.костыль, а с другой - нет никаких проблем с обновлением в любой точке
чё угодно можно выкинуть, чё угодно вставить
и никакие девки не страшны

лишние атрибуты конечно надо выкидывать, а как ещё
только вот атрибуты хранятся в справочнике и их можно автоматически включать в фильтр

Ничего не понял про агрегацию. Агрегация это применение формулы типа min, max, sum .e.t.c.
Приведи пример твоей агрегации.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852771
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухDima Tизбыточность в 256 раз
опять накурился

Я бы для начала поковырял откуда это недоразумение взялось и там бы порядок навел.
отсюда
порядок там не навести
можно кое-что улучшить, например, ф-ю в постгрю перенести, чтобы не гонять туда огромный список ID
ну и вроде всё.

если оттуда, то вы собрались пользоваться Редисом? если да, то там есть операции работы с множествами, битами и т.д.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852779
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухmaytonЯ думаю что поиск в БД по списку денормализованных атрибутов - не согласуется с чистой теорией.
Это даже не 1НФ. Но есть потребности бизнеса в том чтобы искать какую-то хрень например
денормализация и поиск по ID - это самый быстрый вариант что-то найтида. Но магазин плохо ложиться на данную модель. Отсюда костыли в виде EAV, xml, json,...
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852781
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во1, это не так. Откуда такое заявление взялось?
во2, речь про операции в памяти. Мелкая таблица с атрибутами измеряется в килобайтах и будет в памяти всю дорогу. Накинуть на неё операцию AND - займёт, по идее, столько же, сколько и в редиске.
Вопрос только в алгоритмах, но там же стандартная библиотека должна быть.
Это заявление появилось после многих лет наблюдений за Ораклом.
Потом я понаблюдал как работает PG. Поюзал его. Почитал про внутренне
устройство таблиц. И сдалал для себя выводы.
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852785
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухты же говорил, что любитель послушать лекции по постгре, так там Бартунов регулярно говорит, что людей мало, людей не хватает, люди вы где, ау?, люди, дайте людей!, вэлком люди, у нас куча задач, нужны люди, люди, ЛЮДИ11!

Да. Я слушал лекции Бартунова. Я сочувственно кивал.
Но какое это имеет отношение ко мне чьорт вась возьми, сударь!
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852786
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухя про JSONB ещё года 2 назад всё изучил и тесты с монгой видел
JSONB не то.
У тебя есть уже бенчмарк в котором твой магазин заходит атрибутами в JSONB?
...
Рейтинг: 0 / 0
самый эффективный способ посчитать позиции в битмапе?
    #39852787
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухвы там с Димой один косяк на двоих чтоли курите

вот так фильтр выглядит: /?f=ap:5_3_5;bh:28_99_33;ck:7_9_22не знаю никакого димы и твоих примеров)))). LOL
Это же не из моего урл?
Говори толком.
У меня урл вроде обычный where.
Дай твой урл из сети.
Будет конкретика.
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 2 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / самый эффективный способ посчитать позиции в битмапе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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