Основа для создания толпы: портретный тег BitMap
Основа для создания толпы: портретный тег BitMap

Как упоминалось выше, толпы можно легко создать с помощью портретных таблиц. В этой статье представлена ​​еще одна форма организации данных, на которой основано создание толпы: BitMap тегов.

Логика использования портретных списков для группирования людей заключается в том, чтобы найти пользователей, которые соответствуют условиям, на основе подробных данных и, наконец, создать толпу. Использование BitMap для группирования людей будет предварительно агрегировать пользователей, а агрегированные результаты будут напрямую использоваться для расчетов при скоплении людей. выбор. Сначала все пользователи с указанным значением тега агрегируются для создания BitMap, а затем на основе этих BitMap выполняются операции пересечения, объединения и разности для реализации массового скрининга. На рис. 5-8 показана функциональная диаграмма выбора толпы на основе широкой таблицы и BitMap. Итоговая толпа, созданная этими двумя методами, одинакова.

Рисунок 5-8 Схематическая диаграмма отбора толпы с использованием широкой таблицы и BitMap.
Рисунок 5-8 Схематическая диаграмма отбора толпы с использованием широкой таблицы и BitMap.

Специальная структура данных BitMap определяет, что она подходит для агрегирования пользователей и применения в сценариях массового отбора. Нижний уровень BitMap создает битовый массив. Каждый бит может хранить только 1 или 0. Значение индекса массива сопоставляется с UserId. Когда число в текущем индексе равно 1, это означает, что соответствующий UserId существует. Если он равен 0, это означает, что UserId не существует. На рис. 5-9 показана базовая логика хранения UserId в BitMap. UserId больше не является конкретным числом, а сопоставляется со значением индекса битового массива. Благодаря этой функции обеспечивается сжатие, дедупликация, сортировка и хранение большого количества чисел UserId. может быть достигнуто.

Рис. 5-9. Основной принцип хранения UserId в BitMap.
Рис. 5-9. Основной принцип хранения UserId в BitMap.

Когда в BitMap записывается большое количество идентификаторов UserId, поскольку один и тот же UserId соответствует одной и той же позиции индекса, идентификатор UserId толпы может быть автоматически дедуплицирован; индекс битового массива естественным образом упорядочивается, и запись UserId толпы в BitMap может обеспечить удобную сортировку; Решение есть решение. Независимо от того, находится ли UserId в толпе, вы можете быстро определить, существует ли UserId, оценив, равно ли значение в указанной позиции индекса битового массива 1. Вышеуказанные характеристики BitMap очень подходят для хранения данных о толпе, что также определяет его широкое использование в портретных платформах.

BitMap может быть создан на основе таблицы данных тегов Hive. На рис. 5-10 показана принципиальная схема создания BitMap для тегов пола и провинции проживания. Во-первых, данные BitMap значения тега генерируются на основе агрегирования данных подробностей тега, а результат выполнения сохраняется в таблице Hive. Во-вторых, данные таблицы Hive сгенерированного значения тега BitMap записываются в таблицу ClickHouse. эффективность последующих запросов BitMap. Наконец, в процессе создания толпы BitMap запрашивается из таблицы данных и вычисляются данные толпы.

Рисунок 5-10 По тегу Генерация данных таблицы Hive BitMap
Рисунок 5-10 По тегу Генерация данных таблицы Hive BitMap

BitMap — это решение для отображения растровых изображений, и для инженерной разработки на языке Java можно использовать множество конкретных методов реализации. На рис. 5-11 показаны основные технологии, используемые в процессе создания таблицы BitMap с тегами из таблицы Hive с тегами. Различные ссылки включают преобразование различных форм данных BitMap.

Рисунок 5-11 Блок-схема создания растрового изображения метки
Рисунок 5-11 Блок-схема создания растрового изображения метки

Преобразование данных таблицы Hive в RoaringBitMap основано на наборе инструментов с открытым исходным кодом hive-bitmap-udf.jar. Функция UDF to_bitmap может преобразовать список UserId в объект RoaringBitMap и сохранить его в таблице Hive в двоичном формате. Инструментарий также содержит часто используемые функции UDF: bitmap_count, bitmap_and и bitmap_or и т. д., которые позволяют легко выполнять различные операции с BitMap. Данные BitMap в таблице Hive обрабатываются пакетно с помощью механизмов больших данных, таких как Spark, а затем записываются в таблицу ClickHouse. В ClickHouse нет двоичного типа данных. Двоичные данные в Hive обычно принимаются через строковый тип. Вы можете использовать функцию byteToString для преобразования растровых данных таблицы Hive в строковый тип. Принцип реализации заключается в преобразовании двоичных данных в byte[] и последующем кодировании их в строку с помощью BASE64. Растровые данные строкового типа считываются из ClickHouse, а преобразование из строки в RoaringBitMap можно осуществить с помощью функции bytesToBitMap. Несколько RoaringBitMap могут выполнять операции пересечения, объединения и разности непосредственно в памяти и, наконец, реализовывать создание толп.

Код SQL для генерации BitMap из данных таблицы Hive выглядит следующим образом. При внедрении набора инструментов и вызове в нем функции to_bitmap все идентификаторы пользователей под полом преобразуются в двоичный формат, и данные записываются в таблицу данных Hive.

Язык кода:javascript
копировать
-- Представляем набор инструментов UDF --
ADD JAR hdfs://userprofile-master:9000/hive-bitmap-udf.jar;
CREATE TEMPORARY FUNCTION to_bitmap AS 'com.hive.bitmap.udf.ToBitmapUDAF';
-- Запись данных в таблицу данных BitMap --
INSERT OVERWRITE TABLE userprofile_demo.gender_label_bitmap PARTITION(p_date = '2022-08-01')
SELECT
gender,
to_bitmap(user_id)
FROM
userprofile_demo.gender_label
WHERE
p_date = '2022-08-01'
GROUP BY
gender

Основной код преобразования между byte[], string и RoaringBitMap выглядит следующим образом. Благодаря гибкому использованию различных функций можно добиться преобразования типов данных между Hive и ClickHouse, хранилищем данных и памятью.

Язык кода:javascript
копировать
// Преобразовать массив байт-кода в строку
public static String bytesToString(byte[] bytes) throws IOException {
return Base64.getEncoder().encodeToString(bytes);
}
// Строка в массив байтов
public static byte[] stringToBytes(String str) throws IOException {
return Base64.getDecoder().decode(str);
}
// Байтовый массив в Roaring64Bitmap 
public static Roaring64Bitmap bytesToBitMap(byte[] bytes) throws IOException {
Roaring64Bitmap bitmapValue = new Roaring64Bitmap();
DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
bitmapValue.deserialize(in);
in.close();
return bitmapValue;
}
// Roaring64Bitmap Преобразовать в массив байтов
public static byte[] bitMapToBytes(Roaring64Bitmap bitmap) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
bitmap.serialize(dos);
dos.close();
return bos.toByteArray();
}

Не все теги портретной ориентации подходят для преобразования в BitMap. Только теги с перечисляемыми значениями тегов и ограниченным числом подходят для преобразования в BitMap для поддержки массового выбора. Тег пола имеет три значения тега: мужской, женский и неизвестный. После создания BitMap вероятность использования каждого BitMap также высока, что больше подходит для создания тега BitMap. . Для числовых тегов, таких как продолжительность онлайна и количество поклонников, значения тегов невозможно перечислить, или их число огромно. Такие теги не подходят для построения BitMap. Создание BitMap требует большого количества вычислительных ресурсов и ресурсов хранения. Если разница в значениях меток невелика, вероятность использования сгенерированных данных BitMap мала, что является пустой тратой вычислительных ресурсов и ресурсов хранения.

Использовать ли портретную широкую таблицу или BitMap, зависит от особенностей бизнеса. Все функции выбора толпы могут быть реализованы на основе подробных данных всех пользователей в широкой таблице, но скорость создания толпы с помощью решения BitMap может быть увеличена более чем на 50% по сравнению с режимом широкой таблицы. Применимые типы тегов и бизнес-сценарии BitMap ограничены, и решения должны приниматься на основе фактических данных. В отрасли обычно используется гибридная модель, отдающая приоритет созданию толпы с помощью BitMap. В неподходящих сценариях для отбора толпы используются портретные широкие таблицы. При использовании смешанного режима необходимо учитывать выравнивание таблицы ширины портрета и времени метки BitMap, что увеличивает сложность реализации проекта.


Эта статья взята из книги «Портреты пользователей: построение платформ и бизнес-практика». При перепечатке указывайте источник.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose