Обновить
256K+

Базы данных *

Все об администрировании БД

165,77
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Хотелось пополнить резюме, а написала LSM-движок с MVCC, снапшотами и Value Log на чистом Go

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели5.4K

Неделю назад я не думала, что буду писать базу данных. Начиналось всё с плана добавить строчку в резюме. Но получилось: LSM‑дерево, MVCC, снапшоты, транзакции, Value Log, WAL, компакшн, Column Families и даже GC. Вы когда нибудь делали документацию в doc/ для пет-проекта? Я да! И всё на чистом Go. При этом бд не только встраиваемая, но и отдельно разворачивается как сервер (gRPC для 12 языков и CLI). Исходный код открыт.

Рассказываю как собирала конструктор, чьи решения подсматривала, каждый сложный термин поясняю. Рассказываю, где допускала ошибки и как решала проблемы, а что оставила в долгий ящик, и в конце даже небольшая любовная драма в CLI <3

Узнать, что у меня получилось

Новости

Как сделать каталог с поиском, фильтрами, фасетами и семантическим поиском

Время на прочтение7 мин
Охват и читатели5.3K

Сделать поиск по каталогу легко. Гораздо сложнее — сделать каталог, который полезен не только на первом запросе.

Это демо как раз об этом. Здесь мы используем небольшой каталог настольных игр, но сам сценарий знаком многим: пользователь вводит что-то полузабытое, ошибается в написании, сужает выдачу по ограничениям, листает дальше, открывает карточку, а потом хочет увидеть «что-то похожее», не начиная всё заново. Если в вашем продукте есть такой сценарий, основная работа — не в полировке интерфейса. Важнее добиться правильного поведения поиска и не переусложнить весь стек.

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

Сначала можно попробовать уже развёрнутую версию:

https://catalog.manticoresearch.com

Читать далее

Миграция с Greenplum. Эпизод I: Атака клонов и спасение на звёздных камнях

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели6K

В мае 2024 года Broadcom заархивировал публичный репозиторий Greenplum: последний коммит остался на месте, дальнейшая разработка ушла в закрытый репозиторий, enterprise-сборка теперь доступна только по подписке. Greenplum как живой OSS-проект остановился — но сам код, выпускавшийся с октября 2015-го, остался под Apache 2.0. Именно на этой кодовой базе стартанули остальные форки.

Те, кто строил аналитику на Greenplum, оказались перед развилкой. Сообщество разделилось: Apache Cloudberry (incubating)Greengage DB от Arenadata, WarehousePG от EDB. Каждый форк продолжает линию, но в собственной траектории. У компании с боевым кластером появляется конкретный вопрос: переехать/остаться в одном из этих форков или мигрировать на принципиально другую платформу и архитектурную парадигму.

Эта статья (сага из трёх эпизодов) будет полезна, если у вас уже есть Greenplum-кластер, вы понимаете его DDL/ETL/backup-процессы и хотите оценить, насколько болезненным будет переход на StarRocks. 

Читать далее

NocoDB — бесплатная альтернатива Airtable с подключением к своей базе данных

Уровень сложностиПростой
Время на прочтение18 мин
Охват и читатели5.9K

Для работы с базами данных через наглядный UI-интерфейс есть много профессиональных инструментов. Но что если наоборот — нужен максимально простой способ? Чтобы просто посмотреть данные с фильтрацией по определенным параметрам, а затем отредактировать некоторые записи.

Вроде старого-доброго phpMyAdmin, но ещё проще, удобней и современней. Что-нибудь с дизайном, как в Airtable, но только с подключением к собственной базе данных PostgreSQL.

Хорошая новость — такой инструмент есть, и он называется NocoDB. И его можно без проблем поставить на собственный сервер, чтобы использовать без ограничений.

В этой статье разберём, как NocoDB может пригодится программисту в разработке, а непрограммисту — в организации личного или рабочего информационного пространства. Также посмотрим, как установить Ноко на своём сервере и начать с ним работать.

Читать далее

Как мы автоматизировали аналитику маркетплейсов в Yandex Datalens

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.9K

Всем привет, меня зовут Никита. Не так давно к моей команде обратился сервис аналитики маркетплейсов — они собирали данные по WB и Ozon и отдавали их селлерам в виде отчетов.

Процесс был устроен по простой схеме: по расписанию обращались к API Wildberries и Ozon, выгружали данные в Google Sheets, дальше внутри таблиц уже считали метрики — продажи, конверсии, воронки, какие-то производные показатели. У каждого клиента свой набор таблиц, свои формулы, свои доработки.

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

Проблемы начались, когда объем клиентов вырос.

У каждого по несколько кабинетов (WB, Ozon), таблицы начали разрастаться, логика расчётов расползлась. Каждое обновление данных требовало ручной проверки и правок, из-за чего команда тратила всё больше времени на поддержку таблиц вместо аналитики. По мере роста клиентов начали накапливаться ошибки, а масштабирование напрямую упёрлось в количество людей, которые могли это обслуживать.

Мы решили пересобрать для них систему, вынести сбор и хранение данных в отдельный слой, централизовать расчёты и убрать всю бизнес-логику из Google Sheets. Таблицы в таком сценарии остаются только интерфейсом, но не местом, где живут данные и считаются метрики.

В качестве инструмента визуализации выбрали Yandex DataLens. Он закрывает базовые задачи по работе с дашбордами и при этом остаётся простым для пользователей без технической подготовки. Также было важно, что сервис доступен в России без ограничений и не требует больших затрат на внедрение и использование.

Читать далее

30 секунд вместо 30 минут: как мы автоматизировали генерирование конфигураций потоковой обработки с помощью RAG и A2A

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели7.1K

Привет, Хабр! Меня зовут Дмитрий Титов, я DevOps-инженер в команде интеграционных сервисов Platform V Synapse в СберТехе. Наша команда работает над продуктом Platform V Streaming Event Processing — программным решением для фильтрации и трансформации форматов событий, агрегирования и выявления аномалий и закономерностей.

В этой статье я расскажу, как мы создали систему автоматического генерирования конфигураций для одного из компонентов нашего продукта, используя RAG (Retrieval-Augmented Generation), векторные базы данных и межагентное взаимодействие по протоколу A2A.

Читать далее

Группировка в PostgreSQL (на апрель 2026 года)

Уровень сложностиСредний
Время на прочтение78 мин
Охват и читатели9.7K

Группировка - это база OLAP. Но в интернете преступно мало информации о том, как это реализовано в PostgreSQL. Максимум, что вы сможете найти, - это CREATE AGGREGATE с функциями перехода или GROUP BY GROUPING SETS. А если спросить, как реализуется группировка, то в ответ получите - с помощью сортировки или созданием хэш-таблицы, но глубже вам вряд-ли кто-то что-то скажет.

К моему сожалению, это то состояние, с которого я начал. Мне пришлось продолжительное время самостоятельно разбираться в том, как работает группировка в PostgreSQL. И говорю я, как обычно, про исходный код.

Чтобы раскрыть завесу тайны и сделать жизнь других людей, решивших в это погрузиться, проще, в этой статье я описываю внутрянку модуля группировки: реализация агрегатов, разные стратегии группировки, поддержка GROUPING SETS и прочее. Помимо этого, как всегда, куча различных оптимизаций, неочевидные детали реализации и чуть-чуть истории. В конце опишу новую стратегию группировки - Index Aggregate.

Читать далее

Использование Trino для построения ETL‑процессов

Уровень сложностиСредний
Время на прочтение35 мин
Охват и читатели7.9K

1. Введение. Trino: ключевые задачи и главные преимущества

В современной архитектуре управления данными ETL‑процессы рассматриваются не как вспомогательный инструмент, а как базовый механизм интеграции, трансформации и подготовки данных, поступающих из множества гетерогенных источников. Ключевая цель этих процессов — избавиться от хаоса и разрозненности данных, которые почти всегда появляются в больших распределенных компаниях [1].

В рамках ETL‑конвейера выполняется автоматизированное извлечение данных из различных источников, их очистка, нормализация и приведение к единой модели, после чего подготовленные данные загружаются в централизованное аналитическое хранилище. Это даёт три главных преимущества: обеспечивает высокое качество и согласованность данных, структурирует информацию под нужды бизнес‑отчетности, а также отделяет аналитическую нагрузку от операционных систем, повышая таким образом производительность системы в целом.

ETL возник как вынужденная мера, так как во время его появления (1970–1990-е) не было ни высокоскоростных сетей, ни мощных распределенных движков аналитики, ни концепции Data Lake. Единственным надёжным способом построить аналитическую отчетность было физически извлекать данные из операционных систем и копировать их в отдельную специализированную базу. Именно поэтому ETL закрепился как основной архитектурный паттерн аналитических систем на долгие десятилетия.

Увы, такой подход породил и массу проблем: это дублирование данных, долгие пайплайны, сложные зависимости, задержки обновления и огромные затраты на поддержку. Традиционным ETL‑процессам становится всё труднее справляться с постоянно растущим объемом поступающих данных. Более того, большие сложности возникают при работе с уже накопленной информацией, ведь её требуется хранить на протяжении многих лет, а значит — сохранять возможность глубокого анализа по всей доступной истории.

Читать далее

Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели6.4K

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

Для реализации выбран абстрактный бизнес-процесс запроса абстрактных ресурсов. Пример придуман максимально общим. Необходимо реализовать обработку бизнес-процесса с несколькими стадиями.

Читать далее

Аудит Zabbix: на что нужно обратить внимание

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.4K

Привет! Меня зовут Антон Касимов, я руководитель Gals Software, а еще сертифицированный тренер и эксперт по Zabbix. В общем, могу сказать, что знаю эту систему чуть больше уровня «видел пару раз интерфейс». Zabbix — одна из самых популярных в мире систем мониторинга. Наверное, не существует компаний с собственной инфраструктурой, у которых не было бы Zabbix. Не так давно мы запустили услугу аудита Zabbix и обнаружили некоторые закономерности, на которые я хотел бы обратить внимание в этой статье. В нашем телеграм-канале Zabbix Recipes мы регулрно делимся нашими находками и публикуем анонсы вебинаров (скоро и по этой теме тоже будет), поэтому приглашаю присоединиться. Я построю повествование так, чтобы вы могли пройтись по статье как по чек-листу и проверить свою инсталляцию на предмет возможных улучшений. Погнали!

Читать далее

Buffer Pool и Clock-sweep: как мы боремся с cache pollution и p99 latency

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели10K

Один аналитический запрос способен испортить p99 latency всего OLTP-трафика — на время, пока горячий рабочий набор не прогреется заново с диска. Это cache pollution, и с ним рано или поздно сталкивается любая СУБД с честным LRU.

Разбираем, как мы решили эту проблему в нашем OLTP-движке: почему выбрали Clock-sweep вместо LRU, как BufferRing изолирует полные сканы от горячих данных, и почему no-steal — это не стилистический выбор, а требование корректности recovery. С кодом, инвариантами и честными оговорками про то, что ещё не сделано.

Читать далее

Iceberg без Spark для каждой мелочи: UPDATE, DELETE и MERGE INTO из одного SQL-движка в Apache Doris 4.1

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели13K

Apache Doris 4.1 добавляет UPDATE, DELETE и MERGE INTO на Iceberg-таблицы прямо из SQL-клиента — без отдельного Spark job. Iceberg V3 Deletion Vectors и Row Lineage делают этот DML архитектурно здоровым: нет линейной деградации от delete files, нет false positives в CDC после compaction. Перевод и адаптация статьи Mingyu Chen (CC BY 4.0) с бенчмарками, SQL-примерами и Quick Start.

Читать далее

Пишем свой SQL query builder на Python: DSL, кеширование в Redis и защита от инъекций

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели6.2K

Объектный построитель SQL-запросов без ORM и моделей. Позволяет писать сложные SQL-запросы в виде цепочек Python-методов (table[‘person’].filter(…).join(…).get()) и получать результат в виде списка словарей. Под капотом — параметризованные запросы для защиты от инъекций, продуманная система кеширования с инвалидацией по таблицам (in-memory и Redis), поддержка синхронного и асинхронного кода из коробки. Для тех случаев, когда ORM избыточна, а сырой SQL небезопасен.

Читать далее

Ближайшие события

Резервирование PostgreSQL с помощью WAL-G

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели9.1K

Утилита резервирования pgBackRest перестала поддерживаться, стало актуальным найти ей замену. Главными альтернативами называют WAL-G и Barman. Можно использовать pg_basebackup+pg_receivewal. Преимущество WAL-G в том, что резервирование возможно по протоколу S3, WAL-G обеспечивает более высокую скорость резервирования и сжатия, имеет неплохие перспективы развития. Кроме протокола S3, WAL-G может резервировать и восстанавливать из директории в файловой системе, работает с Patroni. Директория с бэкапами не обязательно должна находиться на локальном диске, можно смонтировать любую файловую систему, например, NFS. Утилита свободно распространяемая.

В статье рассматриваются примеры команд, которыми можно резервировать и восстанавливать PostgreSQL утилитой WAL-G с обеспечением защиты от потерь транзакций (zero data loss).

Читать далее

StarRocks вместо Oracle на смешанной аналитической нагрузке. Проверяем на практике

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели13K

Привет, Хабр!

Меня зовут Денис Пашков, я – ведущий архитектор данных в группе компаний GlowByte. В этой публикации я бы хотел поделиться опытом работы с MPP-решением StarRocks, набирающим популярность на российском рынке. Все, кто интересуется данной темой, уже, наверное, не сомневаются, что StarRocks очень хорошо себя показывает в аналитической нагрузке. Мои коллеги из Data Sapience регулярно делятся результатами нагрузочных испытаний платформы данных Data Ocean Nova (ознакомиться можно: 1, 2 и 3). Сегодня же речь пойдет о неочевидном сценарии использования – OLTP-нагрузке.

Читать далее

Долгие миграции на старте сервиса — это не startup-проблема. Это ошибка в архитектуре релиза

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели9.9K

Когда сервис поднимается по 8-15 минут, команда почти всегда начинает крутить одни и те же ручки: увеличивает initialDelaySeconds, добавляет startupProbe, поднимает progressDeadlineSeconds, иногда переносит миграцию в initContainer и считает, что стало «по-кубернетесному». Обычно это не лечение. Это способ аккуратнее завернуть проблему в YAML. Если тяжёлая миграция живёт внутри старта приложения, вы связали жизненный цикл Pod, rollout Deployment и поведение базы в один общий узел. А такие узлы в проде рвутся не там, где их ждут.

Читать далее

Тонкости Kafka Connect и Debezium

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.2K

Привет! Меня зовут Ильсаф, я инженер данных в MAGNIT OMNI — бизнес-группе ритейлера «Магнит», которая отвечает за развитие омниканального опыта для клиентов. В этой статье я собрал свои практические наблюдения по работе Kafka Connect и Debezium с PostgreSQL: от настройки репликации до мониторинга и бэкфиллинга.

Читать далее

Скрытая цена JSONB в PostgreSQL: что происходит при обновлении больших документов

Время на прочтение11 мин
Охват и читатели10K

jsonb легко полюбить. Он даёт гибкую схему, позволяет не плодить десятки мелких колонок, хорошо подходит для полуструктурированных данных и обычно очень удобен на старте проекта. Пока документы маленькие и меняются редко, кажется, что всё отлично.

Проблемы начинаются позже. Данные растут, в документ добавляются новые поля, часть из них начинает часто обновляться, а потом внезапно выясняется, что вроде бы безобидный UPDATE одного ключа внутри jsonb стоит заметно дороже, чем ожидалось.

В этой статье мы не собираемся доказывать, что jsonb плохой тип данных. Наоборот: jsonb – один из самых полезных инструментов PostgreSQL. Хотелось бы разобраться в более узком вопросе:

что именно происходит, когда мы обновляем один ключ внутри большого JSONB-документа, и чем это отличается от обновления обычной колонки рядом с таким же большим документом?

Читать далее

Как цифровой клон покупателя помогает ретейлу делать умные офферы

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.1K

Привет, Хабр! Меня зовут Катя, я продакт-менеджер в Lenta Tech («Группа Лента»). Сегодня хочу рассказать о том, как цифровой клон покупателя помогает сделать персональные офферы с конверсией в лиды.

В статье расскажу о новом витке развития персонализации с использованием больших языковых моделей, а именно — как можно построить «цифровой клон» клиента на основе его чеков и поведенческих данных и использовать его для создания узконаправленных офферов. Разберем архитектуру решения, проблемы, с которыми мы столкнулись, и результаты, которые принесли рост продаж и охватов среди нашей аудитории.

Читать далее

Как я встроил локального нейробота в панель поиска заявок для логистики

Время на прочтение5 мин
Охват и читатели8.1K

В логистике всё редко выглядит как аккуратная CRM из презентации.

Заявки (аукционы/тендеры/грузы приходят из разных источников. Часть данных живёт в 1С/Битрикс/Excel/Амбарная книга, часть — в SQL, часть — в интерфейсах сайтов, часть — в голове менеджера. Перевозчики отвечают неравномерно, менеджеры работают через звонки и таблицы, а руководителю нужно быстро понимать: какие заявки есть сегодня, где рента, какие маршруты повторяются, кто из менеджеров проседает, где найти транспорт.

Я делаю внутреннюю систему автоматизации для логистической компании. Один из её модулей — веб‑панель поиска заявок. Сначала это была обычная таблица с фильтрами: маршрут, дата, тип кузова, источник, цена, рубли за километр.

Но довольно быстро стало понятно: сама таблица не закрывает главный сценарий.

Человеку всё равно нужно руками формулировать фильтр, помнить названия полей, переключаться между поиском, аналитикой и рекомендациями. Плюс в логистике своя внутренняя бизнес кухня, прибыль идет от типа ТС (реф/тент/изотерм/прочие) + сезонность, А если надо спросить что‑то вроде «какая ставка/руб‑км Краснодар — Москва тент?» или «сравни двух менеджеров за неделю», таблица превращается в набор ручных действий.

Так внутри поиск‑панели появился нейробот.

Читать далее
1
23 ...