Как стать автором
Обновить
68.2

SQL *

Формальный непроцедурный язык программирования

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

Разработка SQL Expert Bot: подробный гайд по использованию Vercel AI SDK и API OpenAI

Время на прочтение 8 мин
Количество просмотров 460

OpenAI заложила фундамент для революции в сфере искусственного интеллекта с появлением ChatGPT, открывая новую эру в области AI, которую активно используют как отдельные люди, так и бизнес‑сообщества. OpenAI даже предоставила API для разработки персонализированных AI‑решений, включая чат‑ботов, виртуальных помощников и многого другого. Доступ к этому API можно получить через SDK, которые OpenAI выпустила для разных языков программирования, а также через оболочки, разработанные для удобства создания интерфейсов.

Компания Vercel внесла свой вклад, разработав AI SDK для создания интерактивных пользовательских интерфейсов с использованием TypeScript и JavaScript. Примечательно, что этот SDK является проектом с открытым исходным кодом и поддерживает Vercel Edge runtime.

В рамках данной статьи мы создадим SQL Expert ChatBot, применив API OpenAI и SDK от Vercel. Мы рассмотрим вопросы стриминговых ответов, настройки запросов и многое другое.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 1

Новости

Охота на недостающий тип данных

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 7.7K
Направленный граф — это набор узлов, связанных стрелками (рёбрами). Как узлы, так и рёбра могут содержать данные. Вот несколько примеров:

Все графы созданы с помощью graphviz (источник)

В сфере разработки ПО графы используются повсеместно:

  1. Зависимости пакетов, как и импорт модулей, формируют направленные графы.
  2. Интернет — это граф, состоящий из ссылок между веб-страницами.
  3. При проверке моделей анализ выполняется путём изучения «пространства состояний» всех возможных конфигураций. Узлы — это состояния, а рёбра — это допустимые переходы между ними.
  4. Реляционные базы данных — это графы, в которых узлы являются записями, а рёбра — внешними ключами.
  5. Графы — это обобщение связанных списков, двоичных деревьев и хэш-таблиц.1

Кроме того, графы также широко используются в бизнес-логике. Научные работы со ссылками формируют графы цитат. Транспортные сети представляют графы маршрутов. Социальные сети — это графы связей. Если вы работаете в сфере разработки, то рано или поздно встретитесь с графами.

Я вижу графы повсюду и использую их для анализа всевозможных систем. В то же время я побаиваюсь использовать их в коде. Какой из популярных языков программирования ни возьми, поддержка графов в них практически отсутствует. Ни в одном её нет в виде встроенного типа, очень мало где они прописаны в стандартной библиотеке, и у многих языков нет для этой функциональности надёжного стороннего пакета. Чаще всего мне приходится создавать графы с нуля. Существует большой разрыв между тем, как часто инженерам ПО могут понадобиться графы и тем, в какой степени экосистема их поддерживает. Где все графовые типы?
Читать дальше →
Всего голосов 50: ↑48 и ↓2 +46
Комментарии 12

5 стадий принятия необходимости изучения «плана запроса» или почему может долго выполняться запрос

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

Всем привет! Меня зовут Виктор, я работаю в Компании БФТ-Холдинг руководителем группы разработки. В этой статье разберем подходы и рекомендации по выявлению и устранению проблем с производительностью в системе базы данных Greenplum. Материал будет особенно полезен начинающим разработчикам Greenplum, которые пока не имеют достаточного опыта «чтения» плана запроса.

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

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

SQL HowTo: один индекс на два диапазона

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

В прошлой статье я показал, как условие с парой однотипных неравенств, плохо поддающееся индексации с помощью btree, можно переделать на эффективно gist-индексируемое в PostgreSQL условие относительно диапазонных типов, а наш сервис анализа планов запросов explain.tensor.ru подскажет, как именно это сделать.

Но что делать, если неравенств у нас не два, а целых четыре, да еще и с разными типами участвующих полей? Например, для целей бизнеса это может быть задачей вроде "найди мне все продажи за декабрь на сумму 10-20K", что на SQL будет выглядеть примерно так:

dt >= '2023-12-01'::date AND dt <= '2023-12-31'::date AND

sum >= 10000::numeric AND sum <= 20000::numeric

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 7

Истории

Использование Redis почти как SQL БД: Реализация чата с кешированием сообщений

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

Допустим, мы хотим создать чат и хранить сообщения для него. Вполне возможно, мы можем добавить для этого простую базу данных (БД), такую как MySQL или даже NoSQL БД.

Обычно многие используют Redis как key‑value (dictionary) хранилище. Тем не менее, Redis — это несколько большее, чем key‑value, как многие привыкли думать.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

Бьемся с индексацией парных неравенств в PostgreSQL

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

Я уже не раз писал, что условия с несколькими неравенствами (<, <=, >=, >) обычно плохо подходят для индексирования "классическим" btree, вызывают "тормоза", и необходимо придумывать различные нетривиальные подходы в PostgreSQL, чтобы добиться хорошей производительности подобного запроса.

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

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 2

SQL в качестве API

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 12K


SQL в API??? 

Верно, вы уже успели подумать: «это же безумие, предоставлять API, который принимает SQL». Да, это ужасная идея. Особенно, если API обращён к Интернету. Делать так небезопасно, вы напрашиваетесь на атаки в виде SQL-инъекций. Поддержка такого интерфейса превратится в кошмар, а сама реализация бэкенда будет замкнута на конкретную технологию (это будет какая-нибудь база данных ANSI SQL).

Но справедливо ли такое суждение? Время его пересмотреть!
Читать дальше →
Всего голосов 45: ↑42 и ↓3 +39
Комментарии 40

Что нового в планировщике / оптимизаторе запросов Postgres 16

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 5.6K

PostgreSQL 16 вносит немало улучшений в планировщик запросов и позволяет выполнять многие SQL-запросы быстрее, чем в предыдущих версиях PostgreSQL.

Если вы посмотрите на PG16 release notes, то увидите некоторые из этих улучшений. Но из-за объема изменений, вносимых в каждом выпуске PostgreSQL, невозможно предоставить достаточно подробную информацию о каждом изменении.

В этом посте вы получите глубокое представление о 10 улучшениях, внесенных в планировщик запросов PostgreSQL 16. Для каждого из улучшений будет сравнения выходных данных планировщика PG15 и PG16, а также примеры того, что изменилось, в виде автономного теста, который вы можете попробовать сами.

Читать далее
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 0

Новая современная СУБД SoQoL. Посмотрим на неё внимательнее

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

Вышел первый коммерческий релиз СУБД реляционного типа — SoQoL версии 3.0.0. В русском варианте название СУБД звучит как СОКОЛ.

Что это за птица?
Всего голосов 21: ↑17 и ↓4 +13
Комментарии 78

Основные возможности кластеризации Patroni в PostgresSQL

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

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

Patroni может интегрироваться с различными системами распределенной конфигурации, включая etcd, ZooKeeper, Consul и Kubernetes.

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 1

SQL и python для анализа цен на новостройки в СПб или ценнейший навык для маркетолога в 2024

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

«Зачем мне SQL и python?» — задают резонный вопрос маркетологи или менеджеры по продукту, особенно в сфере недвижимости, оптовой торговли, услуг для бизнеса: «У нас нет миллионов строк данных, нет логов, мы успешно работаем с несколькими таблицами в excel».

Да действительно, у вас может не быть корпоративного хранилища данных в компании, и основой автоматизации работы с данными является Power query (что сейчас в РФ делать все труднее и труднее). Но у вас точно есть данные, которые вы получаете от смежных отделов, из CRM/CDP, MES, АСУ ТП. Эти данные приходят регулярно в виде файлов, и вы сопоставляете эти данные друг с другом с помощью ВПР, фильтруете воронкой, чистите с помощью «Найти или заменить», делайте сводники с помощью функции Pivot table.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 16

PostgreSQL: обеспечение уникальности записи с проверкой даты валидности

Время на прочтение 2 мин
Количество просмотров 3.2K

Как бы вы решали такую задачу? Предположим, есть таблица с купонами, и у купонов есть некая дата устаревания valid_until. Вам надо обеспечить такое ограничение (constraint) на уровне БД, чтобы у одного человека мог быть только один действующий купон.


Т.е., таблица изначально выглядит так:


CREATE TABLE coupons (
    id  bigint primary key generated by default as identity,
    user_id bigint not null,
    created_at timestamp not null,
    valid_until timestamp not null
)
Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 18

Решение проблемы N+1 при работе с Kotlin Exposed

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 3.3K

К написанию этой статьи я подошёл после продолжительного использования Kotlin Exposed в рабочих, а также персональных проектах, когда я начал анализировать генерируемые SQL запросы. В тот момент я познакомился с проблемой N+1)

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 7

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Интерактивная диаграмма Ганта для тысяч работ

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

Всем привет! Я расскажу, с помощью каких алгоритмов и архитектуры можно разработать с нуля интерактивную диаграмму Ганта, способную без лагов отображать тысячи задач.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 9

Стартуем без транзакции. Альтернативный вариант вопросов на собеседовании «по SQL»

Уровень сложности Средний
Время на прочтение 29 мин
Количество просмотров 11K

Статей о селектах хватает, попробуем про апдейты. "ТОП-100" вопросов не обещаю - тут бы с одним разобраться. Разработчиков OLTP-систем под MS SQL Server и кандидатов на подобные вакансии приглашаю под кат.

Код на T-SQL, и он идеален. Атомарности нет, целостность вернём ручными апдейтами, изоляция с дюрабилити только мешают. Программируем без оглядки на ACID, который жив лишь в статье википедии.

ACID поломать, код не исправить
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 8

Материалы для подготовки к собеседованию на позицию Data Scientist. Часть 1: Live Coding

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

В данной статье разберемся что такое live coding интервью и как к нему готовиться.

Материал в первую очередь будет полезен Data Scientist'ам и ML инженерам, при этом некоторые разделы, например, Алгоритмы и структуры данных подойдут всем IT специалистам, которым предстоит пройти секцию live coding.

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 2

Бэкап, бэкап и еще раз бэкап

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 12K

Речь сегодня пойдет об отказоустойчивости и даже о катастрофоустойчивости.

Почему вроде бы правильно настроенное архивирование базы данных не всегда помогает спасти систему в случае инцидентов? Этим вопросом я, наверное, многих даже задел за живое. Одних тем, что сама постановка вопроса им кажется абсурдной – у этой группы админов все настроено идеально, работает как часы и они готовы к любым катаклизмам. А кого-то тем, что напоминаю о тех самых инцидентах, когда возвращаться в тот день, даже мысленно, совсем не хочется.

В рамках проектов аудита производительности мы обязательно проверяем систему заказчика на предмет используемых средств отказоустойчивости и катастрофоустойчивости. И если есть основания, обязательно предоставляем рекомендации по улучшениям. Соответствующий раздел в своё время стал обязательным в каждом отчёте аудита не на пустом месте. За долгие годы мы встречались с таким количеством ситуаций, что можно начинать писать книгу :) Сама по себе ситуация краха системы редкая, поэтому вопросы отказоустойчивости далеко не везде в приоритете, а с учетом распространения в последние годы разнообразных ЦОД’ов, появляется большой соблазн снять с себя ответственность за целостность базы данных и непрерывного доступа к ней. Так что, с появлением ЦОД’ов люди совсем расслабились. А зря.

 Опишу несколько характерных примеров из нашей практики, с которыми мы столкнулись, причем в роли спасателей клиентской инфраструктуры и данных. Иногда на кону стояло само существование БД, иногда – интервал потерянных данных, иногда – время простоя бизнеса.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 14

SQL в Фокусе: Полное Руководство. 100 ключевых Вопросов с собеседований

Уровень сложности Средний
Время на прочтение 65 мин
Количество просмотров 27K


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

Давайте погружаться в мир SQL и раскрывать его тайны через популярные вопросы и ответы с собеседований. Готовы начать?

Читать
Всего голосов 34: ↑23 и ↓11 +12
Комментарии 27

Эволюция системы разработки на SQL

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

Мы — SQL команда Срочного рынка Московской Биржи, занимаемся разработкой и сопровождением бэкофиса торгово-клиринговой системы Spectra с момента ее возникновения. Срочный рынок Московской Биржи — это более 500 фьючерсных и 30000 опционных инструментов, несколько миллионов сделок в день.

Торгово-клиринговая система Срочного рынка (ТКС Spectra) изначально строилась на основе MS SQL, и за пару десятков лет прошла сложный путь от нескольких серверов БД до огромной системы с сервис-ориентированной архитектурой. Долгое время вся бизнес-логика системы разрабатывалась в программном слое на серверах MS SQL: и матчинг заявок, и расчет обеспечения, и управление клиентами были реализованы на T-SQL.

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

В этой статье мы хотим рассказать об эволюции нашей системы разработки на SQL.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 7

Очистка данных перед загрузкой в хранилище. Подробное руководство с техническими деталями

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.7K

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

Читать далее
Всего голосов 9: ↑0 и ↓9 -9
Комментарии 6

Вклад авторов