❄️ Очень красивые узоры на машине
Очень красивые и редкие
Welcome to my personal place for love, peace and happiness 🤖
Очень красивые и редкие
В современном маркетинге данные — это новая нефть, а рекламный идентификатор (Advertising ID) — это трубопровод, по которому эта нефть течет. От смартфона в кармане до умного телевизора в гостиной: каждое устройство имеет свой цифровой паспорт.
В этой статье мы разберем не только скрытую механику «рекламной слежки», но и юридические риски для бизнеса в РФ, новые технологии обхода блокировок и то, как клиентский опыт (CX) меняется в эпоху тотальной приватности.
Рынок рекламных ID фрагментирован. Каждый сегмент решает одну задачу — узнать пользователя, — но делает это разными способами.
Это самые ценные идентификаторы, так как смартфон является наиболее персональным (“интимным”) устройством.
С ростом Smart TV и стримингов маркетологи теперь трекают пользователей «на диване».
🔍 Юридический комментарий: Персональные данные в РФ
Согласно 152-ФЗ «О персональных данных» normativ.kontur.ru и позиции Роскомнадзора, любые данные, которые позволяют (даже косвенно) идентифицировать личность, могут считаться персональными данными (ПДн).
Большинство мобильных ID (GAID, IDFA) представляют собой UUID (Universally Unique Identifier) версии 4. Это 128-битное число.
$$ P(collision) \approx \frac{n^2}{2 \times 2^{128}} $$
Вероятность совпадения двух таких ID астрономически мала.
Главное отличие рекламного ID от аппаратного (IMEI) — возможность сброса (Resettability).
В интернет-коммерции ID — это клей, собирающий разрозненные клики в путь покупателя (Customer Journey Map).
Как понять, что телефон `User_A` и ноутбук `Cookie_B` — это один человек?
Процесс показа рекламы занимает менее 100 миллисекунд:
Amazon (и его аналоги в РФ) стоит особняком. Это закрытая экосистема (Walled Garden), чья сила не в технологиях трекинга, а в транзакционных данных. Им не нужно *угадывать*, что вы хотите купить, они *знают*, что вы покупаете.
В основе лежит не «летучий» UUID устройства, а Internal Customer ID, жестко привязанный к аккаунту.
Индустрия находится в состоянии холодной войны между запросом на приватность и эффективностью.
Эра «дикого запада», когда можно было незаметно следить за каждым шагом, заканчивается. Мы переходим в эру агрегированных данных и доверительного маркетинга (Zero-Party Data).
куча разного софта есть, но этот очень похож на YNAB – который кстати удобный, но платный
https://github.com/actualbudget/actual
Пробуйте ...
Мне еще нравится https://ledger-cli.org но это для особо упоротых и командной строки. :)
2025 год стал поворотным моментом для индустрии баз данных. Мы увидели не просто эволюцию существующих технологий, а фундаментальный сдвиг в том, как приложения взаимодействуют с данными. Эпоха “просто хранения” закончилась — началась эра “интеллектуального взаимодействия” через AI-агентов и глубокую интеграцию векторного поиска.
В этом обзоре мы разберем ключевые события, техно-потери и главные приобретения, сформировавшие ландшафт года.
Оригинал тут: https://www.cs.cmu.edu/~pavlo/blog/2026/01/2025-databases-retrospective.html?utm_source=tldrdev или на интересном канале https://t.me/five_minutes_of_data
PostgreSQL окончательно закрепил за собой статус “стандарта де-факто”. Выход PostgreSQL 18 в ноябре 2025 года принес долгожданную подсистему асинхронного ввода-вывода (AIO), что позволяет базе данных меньше зависеть от кэша операционной системы. Также была добавлена поддержка *skip scans*, что значительно ускоряет запросы по B-Tree индексам, даже если пропущены ведущие ключи (префиксы).
Но главный “движ” происходил не в ядре, а вокруг него:
Подробнее о слияниях и поглощениях (M&A) (спойлер)
Рынок M\&A в 2025 году был невероятно горячим. Помимо упомянутых сделок с Postgres:
Если 2023-й был годом векторных индексов, то 2025-й стал годом MCP от Anthropic. Это стандартизированный протокол (на базе JSON-RPC), позволяющий LLM взаимодействовать с внешними инструментами и базами данных без написания кастомного связующего кода (glue code).
Практически все вендоры (MongoDB, Neo4j, Redis, Snowflake, ClickHouse) выпустили свои MCP-серверы. Теперь AI-агент может самостоятельно “изучить” схему базы данных и выполнить SQL-запрос.
Важно: Это открывает огромные возможности, но и создает риски безопасности. Агент с правами администратора может случайно выполнить `DROP DATABASE`. Внедрение MCP требует жесткого разграничения прав доступа и использования прокси с защитными механизмами.
Неожиданно обострилась конкуренция в области файловых форматов для аналитики. Старый добрый Parquet столкнулся с новыми претендентами: Vortex (от SpiralDB), Nimble (Meta), Lance и другие.
Причина — рост использования GPU для аналитики и необходимость в более быстрых декодерах. Parquet, созданный более 10 лет назад для Hadoop, начинает отставать в эпоху современного “железа” и случайного доступа к данным.
На фоне развития Local AI (запуск нейросетей на устройствах пользователя) вырос спрос на базы данных, работающие “на краю” (on-device). Такие решения, как Turso (на базе libSQL/SQLite) и оптимизированные версии DuckDB, позволяют обрабатывать данные прямо на ноутбуке или смартфоне пользователя, снижая задержки и повышая приватность. AI больше не обязан жить только в облаке.
Не все пережили этот год. Рынок безжалостен к тем, кто не нашел свою нишу или бизнес-модель.
| Технология | Суть | Почему это важно |
| Multigres / Neki | Middleware для шардинга PG | Попытка сделать Postgres таким же масштабируемым, как NoSQL, сохраняя SQL. |
| Vortex | Новый колоночный формат | Оптимизирован для современного “железа” и векторных операций лучше, чем Parquet. |
| pg_vector + DiskANN | Векторный поиск | Алгоритмы приблизительного поиска (ANN) теперь работают с данными, превышающими объем RAM, прямо в Postgres. |
| AI-native DBs | Встроенный ML | Базы данных сами становятся хостами для LLM (пример: *PostgreSQL + PL/Python + локальные модели*). |
Судебный иск MongoDB против FerretDB стал самым громким юридическим событием. FerretDB предлагает open-source прокси, который конвертирует запросы MongoDB в SQL для PostgreSQL. MongoDB обвинила их в нарушении прав на торговую марку и патенты.
Это дело ставит под вопрос саму возможность создания совместимых API. Если Oracle проиграла Google в битве за Java API, то исход битвы за API баз данных пока не ясен.
*Раздел подготовлен на основе анализа трендов и экстраполяции текущих событий.*
2026 год обещает быть годом, когда искусственный интеллект окончательно “поселится” внутри СУБД, а граница между кодом приложения и базой данных станет еще более прозрачной.
Что то вспомнилось мне, решил посмотреть и дополнить. Как то давно был на лекции Губко, очень интересно рассказывал о фракталах. Оригинал тут есть: https://www.klex.ru/1yt1
М.В. Губко «Управление организационными системами с коалиционным взаимодействием участников» (ИПУ РАН, 2003).
Это научная работа в области теории управления, теории игр и исследования операций. Ниже представлен анализ, краткое содержание, контекстуализация знаниями из смежных областей и некоторые переосмысленные выводы. Болекчейн тоже кстати сегодня сталкивается с некоторым трудностями управления, а проблемы организаций DAO прямо явно про это.
Предмет исследования: Организационные системы (ОС), в которых участники (агенты) могут объединяться в группы (коалиции) для совместного достижения своих целей, которые могут противоречить целям управляющего органа (центра).
Ключевая проблема: Классическая теория управления (в частности, теория активных систем — ТАС) часто рассматривает взаимодействие «Центр — Агент» как игру, где агенты действуют индивидуально (равновесие Нэша). Однако в реальности сотрудники договариваются, обмениваются ресурсами или информацией (образуют коалиции), что может разрушать планы Центра.
Методология: Аппарат кооперативной теории игр (C-ядро, вектор Шепли, решения в угрозах и контругрозах) интегрированный в задачи управления (стимулирование, распределение ресурсов).
Автор проводит ревизию теории кооперативных игр для нужд управления.
Здесь рассматриваются ситуации, где Центр знает параметры агентов, но агенты могут кооперироваться.
Рассматривается ситуация, когда Центр не знает истинных потребностей агентов, а агенты подают заявки.
Чтобы глубже понять работу, стоит добавить знания, которые выходят за рамки текста 2003 года или подразумеваются “между строк”:
Работа М.В. Губко — это фундаментальное исследование, доказывающее, что игнорирование возможности сговора агентов ведет к ошибкам в управлении. Механизмы, оптимальные для индивидуальных агентов, становятся неэффективными при наличии коалиций.
Главное достижение работы — формулировка условий (на свойства целевых функций и механизмов распределения), при которых интересы максимальной коалиции (всех участников) совпадают с интересами Центра. Это состояние называется полной сбалансированностью.
---
На основе анализа и современных реалий менеджмента, предлагаю следующие выводы и рекомендации для практиков:
А вот еще одна его работа М.В. Губко https://www.klex.ru/1ysn – «Математические модели оптимизации иерархических структур» (2006)
И ее небольшой анализ:
Работа на стыке теории управления, дискретной математики и микроэкономики. Автор строит строгую теорию того, как должна выглядеть идеальная иерархия управления, если мы хотим минимизировать затраты на её содержание.
Ниже анализ и краткое содержание, дополнения и переосмысленные практические выводы. Любопытно, но работа менеджеров сводится к сжатию информации, в целом это конечно так, но есть же еще принятое решение на основе этих сжатий. Но да ладно, в общем вот...
Предмет исследования: Задача синтеза оптимальной организационной структуры (оргструктуры).
Ключевая гипотеза: Оптимальная структура — это та, которая минимизирует суммарные затраты на содержание всех менеджеров при заданном наборе исполнителей и технологий.
Особенности подхода:
Научная новизна (на момент написания): Получение *аналитических* формул (нижних оценок) для стоимости оптимальной иерархии, что позволяет не перебирать миллионы вариантов, а сразу строить «почти оптимальное» дерево.
Вводится математический аппарат. Иерархия моделируется как ориентированное дерево.
Автор критически анализирует существующие модели (Бекманн, Вильямсон, Кальво-Веллиц, Раднер).
Здесь содержится главный теоретический результат.
Теория применяется к практике:
Рассматриваются более сложные случаи: кусочно-однородные функции (скачкообразное изменение затрат) и управление технологическими связями (когда структура подчинения диктуется потоками материалов/информации между цехами).
Книга написана в 2006 году. С позиции сегодняшнего дня (2024+) анализ можно дополнить следующими аспектами:
Книга М.В. Губко — мощное математическое доказательство того, почему классические пирамидальные структуры (где у каждого начальника 5-7 подчиненных) так устойчивы и распространены. Это не просто традиция, это математический оптимум для широкого класса функций затрат, обладающих свойством масштабируемости.
вот же блин, не ждал я тут подвоха 😭
сдулся мой старенький asustor, придется бутылки сдавать ... и еще накатить чего-то с горя, что бы было что сдавать.
🥹
а вот еще тряхнул стариной и решил понарошку собрать комп нестыдный на сегодня :)) ну даже очень.
вот что вышло:
ну прям мечта сисадмина и не только))) это по сути 4 в одном. через proxmox 4 виртуалки. Первая True Nas Scale для массива, вторая ubuntu server для докеров и Portainer тоже с gpu и третья виндовая для gpu в виндовой среде. Встречайте...
Говорят, что универсальных инструментов не бывает. Что “Швейцарский нож” режет хуже скальпеля, а универсальная шина хуже зимней. Мы решили бросить вызов этому утверждению. Ну я и мой электронный друг Gemini.
Задача звучала амбициозно: собрать в одном компактном корпусе устройство, которое заменит целый IT-отдел. Оно должно быть:
И всё это должно работать 24/7, стоять дома и не напоминать шумом взлетающий Боинг. Спойлер: у нас получилось.
Первый вопрос, который задают рациональные люди: *“Зачем тратить 1.2 млн рублей на самосбор, если есть MacBook Pro, AWS и простая дисковая шуршалка в углу?”*
Мы выбрали путь “Digital Sovereignty” (Цифровой суверенитет). Своё железо, свои данные, свои правила.
Каждый компонент здесь — результат компромиссов и долгих споров. Вот наша “Золотая конфигурация”:
Мы отказались от серверных Threadripper в пользу AMD Ryzen 9 9950X3D.
Сначала мы смотрели на RTX 4090. Но потом решили взглянуть на NVIDIA RTX 5090 D (32GB).
Это “Game Changer”.
Самая болезненная строка бюджета. 128 ГБ DDR5 ECC.
Из-за бума ИИ цены на память взлетели. Комплект из 4 планок по 32 ГБ сейчас стоит около 200 000+ рублей.
Это магия инженерии. Красивый черный куб, куда помещается E-ATX плата, полноразмерная видеокарта и 8 жестких дисков. Мечта с красивыми деревяшками на лицевой панеле :)
Железо — это только половина дела. Вся мощь раскрывается в софте.
Мы используем Proxmox VE как гипервизор. Это “слоеный пирог”:
Цена сборки чуть переваливает за 1 250 000 рублей. Безумие?
Смотря как посмотреть.
Если рассматривать это как консоль для игр — безумие.
Но если вы IT-инженер, DevOps или AI-энтузиаст, это устройство становится активом:
Эта собрка не просто компьютер. Это автономная цифровая крепость. В эпоху, когда сервисы закрываются, подписки дорожают, а данные утекают, иметь свой собственный суперкомпьютер под столом — это не паранойя. Это новый уровень свободы для миллионеров из трущоб :)
Добро пожаловать в клуб владельцев виртуальных “Monolith”. 🤪
UPD: 25.01.2026
Первый шаг к монолиту сделан.
Кстати, конфигурация немного поменялась. Самсунг ssd заменил в плане на Микрон серверный по 960gb, но 4 штуки. У них оказался срок службы гораздо большое. в 5-7 раз где-то. Они будут работать в Raid10 или raidz1 с блоком 32к. Места будет чуть меньше в raidz1, где то 2.7tb.
Сравниваем, опираясь на мануал материнской платы и датащит диска:
Если берем 4 таких диска и делаем ZFS RAID10:
$$1.6 \text{ ТБ} \times 4 = 6.4 \text{ ТБ (Сырой объем)}$$
$$\text{Полезный объем (RAID10)} = 3.2 \text{ ТБ}$$
Еще большой плюс: PLP (Power Loss Protection) — Защита от потери питания, которая есть в Micron. На плате распаяны танталовые конденсаторы. Если питание пропадает, у диска есть еще несколько миллисекунд, чтобы сбросить всё из оперативной памяти в ячейки NAND = защита от отключения электропитания и потери данных.
Почему это важно для ZFS, он очень зависит от синхронной записи (Sync Writes) для баз данных и виртуальных машин. Зная, что у диска есть защита PLP, ZFS может безопасно отключать некоторые программные тормоза (O_DSYNC), работая значительно быстрее на мелких операциях записи.
Итого:
3.2 ТБ сверхбыстрого, защищенного от потери питания (PLP), “бессмертного” серверного пространства — это мечта для гипервизора Proxmox.
Короче берем Micron 7450 MAX 1.6TB. Это лучший компонент во всей сборке с точки зрения профессионального подхода. Главное найти его в форм-факторе 2280, а то на материнской плате есть только один длинный порт.
Мы привыкли, что для развертывания веб-приложений нужно платить за VPS или разбираться в дебрях Kubernetes. Но если у вас есть домашний сервер (в моем случае — Asustor), вы можете создать свою собственную PaaS-платформу (Platform as a Service), которая работает по принципу *“git push — и готово”*.
Сегодня я расскажу, как настроить Dokku через Portainer, запустить веселое Python-приложение к Новому 2026 году и поделюсь лайфхаками по оптимизации сборки и масштабированию.
Dokku — это Docker-контейнер, который управляет другими Docker-контейнерами. Чтобы он заработал на NAS, его нужно правильно запустить. Я использовал Portainer Stack.
Вот рабочий `docker-compose.yml`, который решает главную проблему — доступность приложений из локальной сети.
# version: '3.2'
services:
agent:
image: dokku/dokku:${VERSION}
pid: host. # ⚠️ важно для работы на NAS
network_mode: bridge # ⚠️ важно для работы на NAS
environment:
DOKKU_HOSTNAME: ${DOKKU_HOSTNAME}
DOKKU_HOST_ROOT: ${DOKKU_HOST_ROOT}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${VOLUME_PATH:-/var/lib/dokku}:/mnt/dokku
ports:
- "3022:22" # ⚠️ важно для работы через ssh и что бы не конфликтовал с 22
- "80:80" # Внешний порт 80 -> порт 80 внутри контейнера Dokku
- "443:443"Нюансы сети:
Чтобы обращаться к приложениям по красивым домегам типа `my-app.dokku.datahub.mother`, я настроил AdGuard Home в качестве локального DNS-сервера (фильтры получил бонусом – где-то 20% это всякие счетчики, ужас:). Добавил правило Rewrite: `*.dokku.datahub.mother` → `192.168.0.20` (IP моего NAS). Теперь все поддомены (приложения) автоматически ведут на Dokku.
Также для удобства я настроил `~/.ssh/config` на ноутбуке, чтобы не вводить порты вручную:
Host dokku.datahub.mother
HostName 192.168.0.20
Port 3022
User dokkuну и ключ сам так можно добавить
echo "ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ" | dokku ssh-keys:add dokkuДля теста я написал простое Flask-приложение, которое рассчитывает ваш возраст в наступающем 2026 году.
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def home():
return """
<h1>Приветствую в игре Нового 2026 года! 🎉</h1>
<p>Это веселая интерактивная игра в честь Нового года. Угадай свой возраст на 1 января 2026!</p>
<p>Введи свой год рождения:</p>
<form action="/result" method="get">
<input type="number" name="birth_year" min="1900" max="2025" required>
<button type="submit">Угадать возраст на Новогодний 2026!</button>
</form>
"""
@app.route('/result')
def result():
birth_year = request.args.get('birth_year')
if not birth_year or not birth_year.isdigit():
return "Ошибка: введи корректный год рождения!"
birth_year = int(birth_year)
age_in_2026 = 2026 - birth_year
return f"""
<h2>Результат: 🎇</h2>
<p>В 2026 году тебе будет {age_in_2026} лет!</p>
<p>Счастливого Нового 2026 года! Пусть все твои желания сбудутся!</p>
<a href="/">Играть снова</a>
"""
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)Чтобы Dokku понял, как запускать это чудо, нужны два файла в корне проекта:
Flask==2.3.2
gunicorn==20.1.0
Werkzeug==2.3.3web: gunicorn app:app --bind 0.0.0.0:50003.11.14Все делается через Git, как на “взрослых” платформах:
ssh dokku@dokku.datahub.mother apps:create my-first-appgit init
git add .
git commit -m "Happy New Year 2026 version"
git remote add dokku dokku@dokku.datahub.mother:my-first-app
git push dokku masterЕсли вы до этого еще что-то деплоили, то лучше проверить куда гит смотрит
git remote -vну и поменяем еще не верное
git remote remove dokkugit init
git add .
git commit -m "Happy New Year 2026 version"
git remote add dokku dokku@dokku.datahub.mother:my-first-app
git push dokku masterПосле пуша Dokku сам скачает Python, установит Flask и запустит Gunicorn. Через минуту-две приложение доступно по адресу `http://my-first-app.dokku.datahub.mother`.
Еще нужно домен установить
ssh dokku@dokku.datahub.mother domains:set my-first-app my-first-app.dokku.datahub.motherили можно сразу глобально его установить:
ssh dokku@dokku.datahub.mother domains:set-global dokku.datahub.mother
# но тогда придется удалить ручную привязку
ssh dokku@dokku.datahub.mother domains:clear my-first-app
# не забыть перебрать nginx ( на всякий случай )
ssh dokku@dokku.datahub.mother proxy:build-config my-first-appСертификат сгенерировать
ssh dokku@dokku.datahub.mother certs:generate my-first-app my-first-app.dokku.datahub.motherи проверить порты
ssh dokku@dokku.datahub.mother ports:report my-first-appесли порты не корректные, то можно их установить так:
ssh dokku@dokku.datahub.mother ports:set my-first-app http:80:5000 https:443:5000Аппетит приходит во время еды. После простого Flask-приложения я решил развернуть что-то посерьезнее — Data Science ноутбук на Marimo, и столкнулся с реальными сложностями и особенностями. Для примера брал их дело ноутбук https://marimo.app
Стандартный `pip` устанавливает пакеты медленно. Если проект большой, деплой может висеть минутами.
Я перешел на uv — новый менеджер пакетов на Rust.
Вместо `requirements.txt` я использовал `pyproject.toml` и `uv.lock`. Dokku (благодаря современным buildpacks) увидел `uv.lock` и переключился на быстрый режим. Время сборки сократилось в разы.
Marimo — это stateful приложение (хранит состояние в памяти). Flask, который мы делали выше — stateless.
Когда я задеплоил Marimo, Dokku по умолчанию все было хорошо, но потом я решил масштабировать его и сделал так
ssh dokku@dokku.datahub.mother ps:scale my-marimo-app web=3далее Dokku запустил 3 копии контейнера (`web=3`).
Начался хаос:
Почему? Браузер загружал страницу с *Контейнера 1*, а WebSocket-запрос улетал в *Контейнер 2*, который ничего не знал про мою сессию.
Решение:
Для интерактивных приложений (Streamlit, Marimo, Jupyter) всегда принудительно ставьте одну реплику:
Ну ли придется делать липкие сессии на nginx или еще что-то.
ssh dokku.datahub.mother ps:scale my-marimo-app web=1 # все вернуло в рабочее состояние.А если не хватает мощности — лучше дайте этому единственному контейнеру больше ресурсов, чем пытаться плодить клонов или дайте каждому запускать свой:
Вот так можно установить лимиты или повысить их:
ssh dokku.datahub.mother resource:limit my-marimo-app --memory 2G --cpu 2Браузеры блокируют микрофон и иногда WebSockets на HTTP-сайтах. Для локальной сети Let’s Encrypt не сработает (нет публичного IP), ну и его чуть сложнее запускать.
Я решил вопрос генерацией самоподписанного сертификата одной командой Dokku:
ssh dokku.datahub.mother certs:generate my-first-app my-first-app.dokku.datahub.motherБраузер ругается, но приложение работает полноценно.
Еще я прогнал стресс тесты
ab -n 10000 -k -c 2000 ...Много они не показали, решением было подкрутить nginx, настроить кеш ssl, горизонтальное масштабирование не приносило больших результатов. я упирался в ограничения клиента при тестах нагрузки.
Dokku на домашнем сервере — это отличный инструмент.
Теперь my-first-app готово предсказывать возраст всем гостям на Новый год, а сервер готов к новым экспериментам! 🎄 Пожалуй оставлю его для будущих экспериментов. Прижился как-то быстро. Кстати у Dokku есть коммерческая PRO версия, а точнее не версия, а полноценный UI с кнопочками и стоит он 900$. https://dokku.com/docs/enterprise/pro/
Пора чего-нибудь накатить новогоднего еще :)
Автор: Guy Yasoor (Ryft Blog)
Перевод и дополнения: Gemini 3 Pro Preview и я кофе носил
Оригинал: https://www.ryft.io/blog/apache-iceberg-v3-is-it-ready
Выход Apache Iceberg V3 — это огромный шаг вперед для экосистемы лейкхаусов (lakehouse). Спецификация V3 была финализирована и ратифицирована в начале этого года, привнеся в ядро формата несколько долгожданных возможностей: эффективные удаления на уровне строк (row-level deletes), встроенное отслеживание происхождения строк (row lineage), улучшенная обработка полуструктурированных данных и зачатки нативного шифрования.
Этим новым возможностям уделяется много внимания, но в разговорах часто упускают вопрос, который важен не меньше: Насколько V3 готов на практике?
Честный ответ: это полностью зависит от ваших движков обработки данных (engines). Некоторые среды, такие как Spark и Flink, уже хорошо поддерживают V3. Другие — пока отстают.
Векторы удаления прикрепляют информацию об удалении строк непосредственно к файлам данных в виде битовых карт, избегая накопления позиционных файлов удалений (positional delete files).
>**поИИснение:**
>В предыдущих версиях (V2) использовались **Positional Delete Files** — это отдельные Parquet-файлы, содержащие пути и позиции удаленных строк. При чтении (Merge-on-Read) движку приходилось считывать файл данных, считывать файл удалений и делать между ними `JOIN`, чтобы отфильтровать ненужное. Это требует много памяти и ввода-вывода (IO).
>
>**Deletion Vector (V3)** — это, по сути, компактная битовая карта (bitmap), хранящаяся внутри или рядом с файлом данных. Движку достаточно прочитать этот маленький массив битов пропустить удаленные строки "на лету", без дорогостоящих операций слияния. Это критически ускоряет чтение активно изменяемых таблиц.Row lineage вводит стабильные идентификаторы строк и метаданные версий. Это упрощает инкрементальную обработку, CDC, аудит и отладку.
>**поИИснение:**
>Без Row Lineage, если вы обновляете таблицу, строки часто физически перезаписываются, и их "личность" теряется. Чтобы понять, что изменилось, приходилось сравнивать полные копии данных (expensive diff).
>V3 присваивает строкам суррогатные ID. Это позволяет реализовать дешевый CDC (Change Data Capture): вы точно знаете, что "Строка #123" была обновлена, и можете каскадно обновить только связанные с ней агрегаты в витринах данных, вместо пересчета всей витрины.`VARIANT` — это нативный тип для полуструктурированных данных, замена хранению JSON в виде простых строк. Однако текущая поддержка частичная: не хватает “шреддинга” (shredding).
>**поИИснение:**
>В чем суть **Shredding (измельчения)**? Если вы храните JSON как строку (String), базе данных нужно парсить весь JSON для каждого запроса, чтобы достать одно поле `{"user": "Ivan", ...}`. Это медленно.
>Тип `VARIANT` хранит данные в бинарном формате. А **Shredding** — это оптимизация, когда движок замечает, что поле `user` встречается в 95% записей. Он автоматически вытаскивает это поле в отдельную физическую колонку Parquet, сохраняя при этом логическую структуру JSON. Это позволяет читать поле `user` так же быстро, как обычную колонку, но сохранять гибкость схемы (schema evolution), не делая `ALTER TABLE` при добавлении новых полей в JSON.V3 вводит типы для гео-данных и блоки для шифрования на уровне таблицы.
| Движок | Статус V3 | Комментарий |
| Apache Spark | ✅ Отличный | Начиная с v4.0 — самая надежная платформа для V3. |
| Apache Flink | ✅ Хороший | Идеален для стриминга, поддерживает основные фичи. |
| Databricks | ⚠️ Beta | Работает, но есть ограничения по типам данных. |
| AWS (Glue/EMR) | ⚠️ Частичный | Зависит от версии движка под капотом. |
| Amazon Athena | ❌ Нет | Главный блокер для пользователей AWS. |
| Trino / Starburst | 🔸 Смешанный | Starburst (коммерческий) поддерживает, OSS Trino — нет. |
| Snowflake | ⏳ Ожидание | Активно разрабатывали спецификацию, но публичной поддержки V3 в Managed Iceberg пока нет. |
Для большинства: пока нет.
Ключевые игроки (Athena, Trino OSS, Snowflake) не готовы. Переходите, только если ваш стек состоит исключительно из Spark или Flink.
| Аспект | Прагматичный прогноз (Реализм) | Супер-прогноз (Оптимизм/Хайп) |
| Принятие | Крупный энтерпрайз начнет пилоты к концу года. Основная масса ждет Athena/BigQuery. | V3 станет стандартом для всех greenfield проектов весной. Утилиты миграции ускорят отказ от Hive/Delta. |
| Каталоги | REST Catalog убивает Hive Metastore. Появление managed REST сервисов. | Universal Catalog Protocol: один каталог для Iceberg, Delta и Hudi. Формат станет прозрачным для пользователя. |
| Скорость | +30-50% к скорости MERGE операций благодаря векторам удаления. | Нейросетевые оптимизаторы запросов и p2p кэширование сделают “холодный” Iceberg по скорости равным in-memory СУБД. |
| Python | `PyIceberg` получит полную поддержку записи (Write). | Python-стек (DuckDB + PyIceberg) начнет вытеснять Spark в задачах малого/среднего объема. |
Нативную поддержку самоорганизации данных (Z-Order / Clustering) без внешних компакторов.
Почему: Сейчас, чтобы запросы “летали” и пропускали ненужные файлы (data skipping), данные нужно сортировать (Z-Order). Это делают отдельные тяжелые джобы (`maintenance jobs`).
Было бы круто, если бы спецификация позволяла писателям (writers) автоматически поддерживать приближенную кластеризацию при вставке данных (opportunistic clustering), либо если бы формат поддерживал Secondary Indexes (вторичные индексы на основе B-деревьев или Bitmap), хранящиеся прямо в слое метаданных. Это позволило бы Iceberg конкурировать с ClickHouse и Druid в сценариях интерактивной аналитики (sub-second latency), убрав необходимость в постоянном “обслуживании” таблиц.
Для задач AdTech сегментации (профилирование пользователей, identity resolution, поиск look-alike аудиторий) набор требований к графовой базе данных специфичен: нужна высокая скорость операций чтения/записи (real-time bidding/serving) и горизонтальная масштабируемость (миллиарды событий и связей).
Учитывая популярность текущего стека (ClickHouse, Trino, Qdrant), идеальная графовая база должна уметь интегрироваться в аналитический контур (через Trino или прямые коннекторы) и дополнять ClickHouse (который хранит логи событий), взяв на себя хранение топологии связей.
Ниже представлен небольшой обзор и рейтинг Open Source решений на 2024-2025 год с фокусом на масштабируемость.
Разделим 12 решений на 3 эшелона по пригодности для высоконагруженной сегментации.
Эти базы изначально создавались для кластеров и больших объемов данных.
1. NebulaGraph
2. Dgraph
3. Memgraph
4. Neo4j (Community Edition)
5. ArangoDB
6. JanusGraph
7. Apache AGE (PostgreSQL Extension)
8. HugeGraph (Baidu) — аналог JanusGraph, популярен в Китае, очень мощный, но документация местами страдает.
9. OrientDB — мультимодельная, была популярна, но сейчас развитие замедлилось.
10. FalkorDB — форк закрывшегося RedisGraph (Redis module). Очень быстрый, использует разреженные матрицы. Интересен, если уже есть Redis.
11. Cayley — написана на Go (Google), простая, работает с триплетами (Linked Data), но для сложной AdTech логики может не хватить функционала.
12. TerminusDB — интересная база с концепцией “Git для данных”, но специфична для версионирования знаний, а не высоконагруженной сегментации.
| СУБД | Язык запросов | Архитектура | Масштабирование (Open Source) | Скорость (Read/Traverse) | Сложность эксплуатации | Идеально для |
| NebulaGraph | nGQL (SQL-like) | Distributed Native | Отличное (Sharding+Replication) | 🔥 Очень высокая | Средняя/Высокая | Big Data, AdTech, Fraud |
| Memgraph | Cypher | In-Memory (C++) | Вертикальное / Репликация | 🚀 Топ-1 (Low Latency) | Низкая (как Docker) | Real-time features, Streaming |
| Dgraph | GraphQL | Distributed Native | Отличное | Высокая | Средняя | App Backend, 360 Customer View |
| Neo4j (CE) | Cypher | Native | Нет (только 1 нода) | Высокая (локально) | Низкая | R&D, малые проекты |
| ArangoDB | AQL | Multi-model | Хорошее (Cluster mode) | Средняя | Средняя | Гибридные данные (Docs+Graph) |
| JanusGraph | Gremlin | Layered (over NoSQL) | Бесконечное (зависит от Backend) | Низкая/Средняя | ☠️ Высокая | Если уже есть HBase/Cassandra |
| Apache AGE | Cypher | Postgres Ext | Только Read Replicas | Средняя | Низкая (если знают PG) | Гибрид SQL + Graph |
Учитывая, что вы хотите Open Source и вам нужен технический задел (масштабирование) для AdTech:
Это наиболее близкий аналог “ClickHouse в мире графов”.
Если ваши графы помещаются в память (сотни миллионов узлов, но не десятки миллиардов) и критична задержка (latency) менее 10 мс для *real-time* принятия решений.
Только если объем графа невелик, и вы хотите минимизировать зоопарк технологий, оставаясь в рамках “почти SQL” решений. Но для серьезного AdTech они не рекомендуется как *основное* хранилище графа пользователей.
Совет: Начните пилот (PoC) с NebulaGraph. Попробуйте загрузить туда выгрузку из ClickHouse и сравнить скорость выполнения запросов “найти всех пользователей, связанных через устройство X на глубину 3 шага” с тем, как это делается сейчас (вероятно, через JOINs в реляционке или CH). Если сложность эксплуатации Nebula покажется высокой, можно посмотреть в сторону Memgraph как более легкой альтернативы и применять их не на одном большом графе например, а на нескольких малых в реальном времени, а готовые расчеты уже хранить в привычных местах.
Еще можно почитать:
Вот еще мысль и про языки немного. Если проект большой с единым графом для разных нужд, то NebulaGraph выглядит лучшим решением, но архитектурно можно выбрать много средних и малых графов. Для второго подхода хорошо Memgraph с его языком Cypher
Базы: *Neo4j, Memgraph, FalkorDB, Apache AGE.*
Cypher — это «SQL для графов». Это декларативный язык, использующий ASCII-арт для визуализации связей в коде (например, `(User)-[:CLICKS]->(Ad)`).
Базы: *JanusGraph, HugeGraph, OrientDB (частично), Azure CosmosDB.*
Gremlin — это императивный язык обхода графа (Traversals). Вы пишете не «что найти» (как в SQL/Cypher), а «куда идти» шаг за шагом.
Базы: *NebulaGraph.*
Собственный язык Nebula, который синтаксически мимикрирует под SQL, но логически работает с графами.
Базы: *Dgraph.*
Это модифицированный GraphQL.
Базы: *ArangoDB.*
Гибридный язык, объединяющий возможности SQL (JOINs), работы с JSON (как в Mongo) и графовых обходов.
| Язык | Базы данных | Порог входа | Для AdTech/High-load | Стандартность (2025) | Примечание |
| nGQL | NebulaGraph | Средний | Идеально (Tencent scale) | Низкая (Vendor specific) | Топ для сотен млрд связей и кластерной архитектуры. |
| Cypher | Memgraph, Neo4j, AGE | Низкий | Хорошо (Memgraph) / Средне (Neo4j) | Высокая (основа ISO GQL) | Самый удобный для аналитиков и Data Science. |
| DQL | Dgraph | Низкий (для Web-dev) | Хорошо (для OLTP) | Низкая | Лучший выбор, если граф — это бэкенд для UI. |
| Gremlin | JanusGraph, HugeGraph | Высокий | Отлично (если настроить) | Падает (Legacy) | Слишком сложен в поддержке, проигрывает современным языкам. |
| AQL | ArangoDB | Средний | Средне | Низкая | Хорош, если нужна “Document Store + Graph” в одном. |
От чего стоит отказаться: