Обновить
2
0
Владимир@ABIDB

Создание и поддержка BI решений

Отправить сообщение

Kafka реально быстрая, но я возьму Postgres

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

Команда Go for Devs подготовила перевод статьи о том, почему большинству проектов не нужна Kafka, «веб-масштабные» очереди и зоопарк из пяти баз данных. Автор на бенчмарках показывает, как далеко можно уехать на одном Postgres — и заодно разбирает, почему карго-культ масштабирования и «инфраструктура ради резюме» только мешают делать работу.

Читать далее

Горизонтальное шардирование: проблемы, решения, практические рекомендации

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

Рано или поздно один сервер перестает справляться. Вы можете купить ему больше памяти, больше CPU, более быстрые диски (вертикальное масштабирование), но в конце концов вы упретесь в потолок. Самый большой сервер конечен. Горизонтальное шардирование — это признание этого факта.

Это философия разделяй и властвуй, примененная к данным. Вместо одной гигантской таблицы users на одном сервере, вы создаете 10, 100 или 1000 маленьких таблиц users, разбросанных по разным серверам (шардам). Это дает почти безграничную масштабируемость на запись и чтение.

Читать далее

Как решать LeetCode? Легко! Нужно просто…

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

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

На сегодняшний день алгоритмические задачи встречаются не только в FAANG. Многие компании и на отечественном рынке всё чаще вводят дополнительный алгоритмический этап на собеседовании – и знание алгоритмов становится отличным «плюсиком» не только при трудоустройстве, но и в решении повседневных задач. Взглянем подробнее на эти паттерны.

Подробнее о паттернах

Сапёр в эпоху LLM: Создание Text-to-SQL агента для базы данных SAP ERP

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

Привет, Хабр! Если вы читали мою прошлую статью Сапёр в эпоху LLM: Повайбкодим на ABAP , то уже знаете, что попытка «повайбкодить» на ABAP с помощью LLM — затея, мягко говоря, неоднозначная. Модели «галлюцинируют», выдумывают несуществующие BAPI и таблицы, и в целом чувствуют себя в закрытой экосистеме SAP не очень уверенно. Как говорится, вайбкодинг не задался.
В комментариях к статье прозвучала здравая мысль: будь у модели больше контекста, она бы справилась лучше.Раз появились такие идеи — значит, пора воплощать их в жизнь. На этот раз — новая серия экспериментов: в этот раз займемся переводом вопросов по SAP из обычного языка в SQL-запросы, плюс построим агента с необходимыми для этого инструментами.

Читать далее

Я сварил палки, выложил на Авито и заработал 10 млн за год

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

Сфотографировали, выложили объявление на Авито.

В тот же день я поехал в Москву с дочерью. Стою 2 часа в пробке, а мне звонят без остановки. Я отвечаю, объясняю, что мы продаем. Бешеный шквал звонков. 

Дочь послушала все это, спросила:

— Папа, а что это за такой бизнес интересный?)

И я понял — тут есть деньги.

Читать далее

Приказ 221 v2 Роскомнадзора для простых админов — создать XML и выжить

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

От Роскомнадзора пришло недвусмысленное желание получить от вас XML с внутренностями вашего интернет-соединения.

Системный администратор почему-то спохватился в последний момент, но прислал инструкцию уровня "что-то на XML" и несколько таблиц от одного из известных форумов nag.ru.

С третьей-четвертой попытки у вас ничего не получилось загрузить по требуемому адресу. Давайте пошагово рассмотрим одну из типовых ошибок начинающих XML-писателей.

Как просто сделать требуемое

Игровой бот в Telegram с нуля: Как я автоматизировал создание контента с помощью Apache NiFi и LLM

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

Как быстро протестировать игровую идею без лишней сложности? Я создал текстовую игру в Telegram за выходные на Apache NiFi и Groovy, весь контент для которой генерируют языковые модели.

В итоге — легковесный, почти не требующий поддержки бот, которого не больно обновлять. Идеально для MVP.

Под катом — архитектура, этапы развития и как AI не просто отвечает, а становится движком продукта.

Все началось с желания сделать что-то интересное для подписчиков моего канала в Telegram. Захотелось интерактива — простой текстовой викторины или квеста. Но разворачивать полноценный бэкенд... Не для такого пет-проекта.

Цель была ясна: создать максимально простого и легковесного бота, которого было бы не больно поддерживать. Выбор пал на связку Apache NiFi для оркестрации и Groovy для скриптовой логики.

P.S. Полная инструкция по запуску, исходники скриптов и шаблон для NiFi я выложил в открытый доступ на GitHub. Буду рад звёздочкам и пул-реквестам!

FutureGuest Bot repository

Читать далее

OMS на Apache NiFi: От прототипа до почти микросервисной архитектуры

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

История о том, как очередная «быстрая костыль-интеграция» на коленке неожиданно превратилась в почти полноценную Order Management System (OMS) с элементами event-driven архитектуры. Всё это — без предварительного проектирования и без единой строчки кода на Java/Scala/Python (хотя тут немного лукавства, так как пару скриптов на Groovy все-таки имеется), на чистом Apache NiFi и SQLite.

Девизом этого проекта мог бы стать слоган: «Мы не ищем лёгких путей, мы ищем работающие решения». Я инженер в одной ритейл компании, который любит решать задачи, и сегодня расскажу, как закрыл боль бизнеса малой кровью, используя не совсем типичный для веб-сервисов инструмент.

Вот здесь можно посмотреть исходники

Читать далее

Как избавиться от проприетарных ETL: кейс миграции на dbt

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

Несколько лет назад наш корпоративный слой данных жил на проприетарных технологиях. Данных было много, а основная СУБД — MPP-система Sybase IQ — долго не обновлялась. Мы регулярно сталкивались с тем, что у кластера «падали» ноды, каталог базы повреждался, порой даже терялись данные, а вендор не спешил выпускать исправления или даже признавать проблему. ETL-процессы работали через IBM DataStage, который также перестал развиваться. Все решения были закрыты, и мы не могли влиять на их улучшение. Vendor lock-in означает, что вы зависите от поставщика: если вендор не поддерживает нужные возможности, развитие замедляется, а долгоживущие ошибки остаются нерешенными. Такое положение становилось критичным.

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

В этой статье рассказываем о том, как мы перешли с проприетарных ETL-инструментов на open-source на базе dbt, какие проблемы решали по ходу внедрения, и как построили экосистему вокруг dbt для автоматизации рутинных задач.

Читать далее

CDC без боли: как мы делали отказоустойчивую репликацию с Debezium и Kafka

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

Я Евгений Прочан, в платформенной команде Magnit OMNI развиваю инфраструктуру DWH. Расскажу здесь, почему нам понадобилось перейти от батчинга к CDC и как мы это делали. Причин перехода было две: потребность бизнеса в расширении возможностей инфраструктуры и нестабильность нашего старого процесса репликации. 

Мы используем в основном базы данных PostgreSQL. Оттуда пакетами раз в час передаём данные в S3, ClickHouse и таблицы Iceberg. Наша потоковая нагрузка достигает примерно полутора терабайта данных, 6000 операций в секунду (около 1500 в самой нагруженной базе данных). 

Читать далее

Паттерны проектирования в Python, о которых следует забыть

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

Попробуйте поискать в Интернете «Паттерны проектирования на Python» — и получите целую простыню туториалов, демонстрирующих, как в точности воспроизвести на Python паттерны проектирования из книги «Банды четырёх». Там же будут диаграммы классов, иерархии фабрик и столько шаблонного кода, что выхлопа хватит, чтобы отопить маленькую деревню. Так вам внушают, будто вы пишете «серьёзный» код. Умно. Профессионал ьно. Готово для корпоративного использования.

Но вот в чём проблема: большинство из этих паттернов решают проблемы, которые в Python просто отсутствуют. Паттерны разрабатывались для таких языков как Java и C++, где для выполнения самых базовых вещей требуется настоящая эквилибристика — нет ни функций первого класса, ни динамической типизации, ни модулей в качестве пространств имён. Разумеется, вам потребуется Фабрика или Синглтон, если без них в вашем языке просто не с чем работать.

Слепо копировать эти паттерны в Python — не признак большого ума. Из-за них ваш код сложнее читать, тестировать, а также объяснять очередному бедняге, которому этот код придётся поддерживать. Возможно, через три месяца этим беднягой станете вы..

Читать далее

AI-трейдинг без кода

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

Как связать большие языковые модели, биржу и собственный код без боли и лишних API-обёрток

MCP-сервер Alpaca превращает запросы GPT-моделей в реальные сделки на бирже — AI-трейдинг без строчки кода.

Читать далее

Пиррова победа Domain-Driven Design

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

TL;DR: DDD неизбежно ведёт к избыточному (на порядки больше минимально необходимого) количеству саг в проекте, которые, в свою очередь, неизбежно ведут к нарушению целостности данных в БД.

DDD вполне успешно решает поставленную задачу: дать разработчикам инструменты, которые позволят им справиться (корректно реализовать и поддерживать) со сложной предметной областью. Но эта победа оказалась пирровой: инструменты, обеспечивающие корректность данных в памяти, оказались неспособны гарантировать корректность данных в БД. А что толку от изначально корректных данных в памяти, если со временем (после их сохранения в БД и последующего чтения) они перестают быть корректными? По сути, у DDD есть фатальный недостаток: DDD неизбежно приводит к нарушению целостности данных (инварианта бизнес-логики) в БД.

Читать далее

Чем быстрее вы забудете ООП, тем лучше для вас и ваших программ

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

Объектно-ориентированное программирование — чрезвычайно плохая идея, которая могла возникнуть только в Калифорнии.

— Эдсгер Вибе Дейкстра

Возможно, это только мои ощущения, но объектно-ориентированное программирование кажется стандартной, самой распространённой парадигмой проектирования ПО. Именно его обычно преподают студентам, объясняют в онлайн-туториалах и, по какой-то причине, спонтанно применяют даже тогда, когда не собирались этого делать.

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

Многие люди и раньше обсуждали проблемы ООП, и в конце этого поста я приведу список своих любимых статей и видео. Но прежде я хочу поделиться собственным взглядом.
Читать дальше →

ООП: худшее, что случалось с программированием

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

В этой статье попробуем разобраться, почему ООП — худшее, что было придумано в программировании, как оно стало таким популярным, почему опытные программисты Java (C#, C++ и т.п.) в принципе не могут считаться крутыми инженерами, а код на Java - хорошим.

Читать далее

Путешествие одного промпта: Что на самом деле происходит под капотом у LLM?

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

Загадка работы LLM: что происходит, когда вы нажимаете Enter? Разбираем пошагово путь вашего промпта от токенизации до генерации ответа. Узнайте, как устроены большие языковые модели, как ими управлять и какие мифы они развеивают.

Читать далее

Расширение jsquery для PostgreSQL — точные и быстрые выборки из JSONB

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

Привет, Хабр! Это Антон Дятлов, инженер по защите информации в Selectel. В современных базах данных JSON — де-факто стандарт для хранения полуструктурированных сведений. PostgreSQL предлагает два специализированных типа для работы с ним: json и jsonb. Первый хранит точную текстовую копию документа со всеми пробелами и порядком ключей. Второй применяет оптимизированный бинарный формат. 

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

Читать далее

Как пройти алгоритмическое собеседование: полный гид по алгоритмам, сложностям и стратегиям

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

Не тратьте время на задачи – сначала разберитесь в основах. В статье:

1. Как проходят собеседования (ВАЖНО!)
2. Big O, оценка сложности алгоритмов
3. Популярные техники: два указателя, DFS, динамическое программирование и другие
4. Какие задачи решать, чтобы пройти в Яндекс

Читаем, практикуемся, получаем оффер!

Читать далее

Миллиарды векторов и немного магии: превращаем сырые данные с маркетплейсов в пригодные для анализа

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

Привет, Хабр! Я — Игорь Старун, BigData Lead в MPSTATS. Я уже 3 года занимаюсь анализом данных на маркетплейсах, штудируя гигантские объёмы информации и превращая их из непотребного и нечитаемого вида в удобоваримый и анализируемый. Моя задача — собрать и подготовить данные так, чтобы помочь продавцам на маркетплейсах разобраться, что происходит с их товарами, конкурентами и продажами, чтобы они не утонули в хаосе карточек, цен и остатков. В этой статье я расскажу, как мы перерабатываем эти объемы грязных данных и структурируем для дальнейшего анализа. 

Данные о товарах – это основа всего. Каждую неделю мы обходим более 200 миллионов карточек с Wildberries и Ozon. Названия, описания, характеристики, фотографии — всё это мы аккуратно собираем и складываем в базы данных (для разных задач мы используем ClickHouse, Postgres, MySQL и MongoDB) и облачные хранилища. Зачем? Чтобы потом сделать с этим что-то умное и полезное.

Читать дальше

Прежде чем выбирать язык программирования, необходимо изучить SQL

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

Если вы только выбираете язык программирования или уже программируете, но не уверены в своём выборе — эта статья для вас. Мы рассмотрим, какие бывают виды языков программирования, почему данные — это основа любой программы, как эти данные хранятся и как с ними работать. В конце статьи я приведу 5 бесплатных ресурсов, которые сам использовал для изучения SQL.

В этой статье отвечу на три вопроса: какие существуют виды языков программирования; почему нужно сначала изучить SQL; как учить SQL бесплатно.

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

Информация

В рейтинге
5 720-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность