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

PostgreSQL *

Свободная объектно-реляционная СУБД

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

Ускоряем работу с графами в 20000 раз

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

Использовать стандартные библиотеки и общеизвестные реализации алгоритмов — признак хорошего тона. Вместо изобретения своего алгоритма шифрования данных или своей хэш функции лучше взять уже готовое решение. Избегаем ошибок и не изобретаем велосипед заново. Но что если готового решения нет? В наше время это что-то невероятное. Есть github.com, есть набор платных решений.Тем интереснее обсудить необычную проблему. В данной статье расскажу о своем опыте оптимизации работы с данными, которые по своей природе представляют граф. А точнее сеть — разновидность графов.

Читать далее

PostGIS 3.2 — обновленный и улучшенный

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

PostGIS 3.2 зарелизили в самый последний момент прошлого месяца, чтобы он успел увидеть свет в 2021 году. Эта новая версия PostGIS также поддерживает GEOS последней версии 3.10, благодаря чему мы получили несколько новых фич.

Читать далее

PostgreSQL Antipatterns: делаем группировку быстрее от 0.1 до 5 раз

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

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

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

Читать далее

Как не надо индексировать

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

Развитие происходит по спирали: когда-то люди не умели правильно индексировать, потом (в основном) научились, потом пришли noSQL и все снова забыли знание древних. Что вы будете делать, когда последние из старых DBA отплывут в Валинор?

Снова и снова и сталкиваюсь с полным набором антипаттернов индексирования. Я их перечислю, но! Для каждого антипаттерна есть исключение, когда именно это и стоит делать. Поэтому кликбейтно сформулированное правило верно в 95% случаях, но если вы хотите копнуть глубже, то прочитайте про исключения.

И в конце полезные скрипты для MSSQL, Postgres и MySQL.

Читать далее

Базовые принципы Availability

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

О чем статья

В этой статье речь пойдет о БАЗОВЫХ подходах и принципах к такому quality attribute (QA) как Availability. Никаких сложных случаев, ничего слишком сложного, только теория с двумя примерами, скипайте, если искали что-то эдакое.

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

Что такое Availability?

Перед тем, как рассматривать паттерны и техники для обеспечения availability мы должны определить сам термин.

Читать далее

Кибербезопасность для самых маленьких

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

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

Цель статьи - поделиться практиками, которые я применил для защиты данных при поднятии собственного VPS в публичной сети. Всегда, когда твой IP открыт всему Миру напоказ и доступен извне внутренних контуров сети - это означает, что любой прохожий может устроить тебе неприятности: похитить твои данные, завладеть твоим сервером и сломать твое замечательное приложение. Я буду приводить пример атаки, показывать, как ее можно заметить и после этого будем разбирать возможные способы защиты.

Защитить данные!

Как сделать стрим в Postgres?

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

На одной конференции мне задали вопрос (спасибо Александру!): как сделать стрим в PostgreSQL? Представьте, что имеется bytea и вы к нему хотите что-то дописать. Люди столкнулись с тем, что на это в PostgreSQL  тратится гигантское время  и растет WAL-трафик. 

Расскажу, что с этим возможно сделать — это будет еще один пример оптимизации TOAST (о чем я недавно писал), на на этот раз — для быстрой записи потока бинарных данных. На самом деле мой коллега, Никита Глухов, за несколько часов сделал расширение, которое «вылечило» проблему, и мы даже успели рассказать про это на сессии блиц-докладов на PGConf.Online 2021.

Читать далее

Битвы на территории ZFS

Время на прочтение6 мин
Количество просмотров21K
Один из крупных клиентов нашей компании попал в грустную ситуацию: базы данных подросли, потребности тоже, купили мощные NUMA-сервера, установили любимую файловую систему ZFS (ZFS — для краткости: формально это OpenZFS), а производительность PostgreSQL стала хуже, чем до покупки.

Базы нешуточные: две базы, в каждой по 180ТБ. В них сливаются данные из многих других, непостгресовых баз. А этими, огромными, напрямую пользуются аналитики компании, и эта деятельность критически важная. ZFS сжала эти базы в два раза — теперь каждая занимает на диске по 90 ТБ, железу бы вздохнуть с облегчением. А стало только хуже. Пригласили наших сотрудников из поддержи, они провели аудит. Случай нам показался интересным, и мы решили о нём рассказать. Заодно напомнив о средствах диагностики.
Читать дальше →

Борьба с  TOAST или будущее JSONB в PostgreSQL

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

В PostgreSQL есть два типа данных: JSON и JSONB. Первый формат является текстовым хранилищем, в котором json хранится "as is",  второй — бинарным, в нем ключи отсортированы  (сначала по длине ключа, а потом по его названию), дубликаты удалены, а пробелы удалены.

Тип JSONB имеет богатую поддержку, облегчающую работу разработчиков приложений, для него есть встроенные индексы, кроме того, существует расширение Jsquery, в котором реализован язык запросов к JSONB и дополнительные индексы. Когда у меня спрашивают, чем пользоваться, я всегда советую JSONB, так как он позволяет работать очень эффективно. 

Однако у постгреса есть серьёзная проблема, которая сказывается и на производительности JSONB  — это TOAST, и о ней я говорил в первой части. Сегодня я расскажу о том, как мы улучшили JSONB для того, чтобы существенно повысить его производительность.

Читать далее

Карманный справочник: сравнение синтаксиса MS SQL Server и PostgreSQL

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

Приветствую, уважаемые хаброжители!

Так как занимаюсь переводом кода с MS SQL в Postgre SQL с начала 2019 года, то решил продолжить сравнение этих двух СУБД.

В прошлой публикации мы рассматривали отличия в быстродействии MS SQL и PostgreSQL для 1C.

Сегодня давайте сравним основные конструкции синтаксиса MS SQL и PostgreSQL для правильного чтения кода, а также для того, чтобы быстро изменить код из MS SQL для PostgreSQL или наоборот.

Начнем рассмотрение с сопоставления типов.

Читать далее

SQL HowTo: считаем «уников» на интервале

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

Для систем управления бизнесом часто приходится решать очень похожий класс задач по вычислению количества уникальных объектов на произвольном временном интервале. В контексте CRM это могут быть "пользователи, обращавшиеся на горячую линию на прошлой неделе", "контрагенты, оплатившие за последние 30 дней" или "потенциальные клиенты, с кем был контакт в этом квартале".

Искать в большом количестве фактов «уники» — всегда сложно и долго, если их достаточно много. Если интервалы фиксированы (календарные месяц/квартал/год), можно материализовывать такие агрегаты заранее. А если интервал — произвольный, как тогда эффективно найти ответ?

Читать далее

Реверс-инжинирим структуру БД PostgreSQL по плану запроса к ней

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

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

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

А ведь она уже и так находится "под ногами" в момент анализа плана запроса - надо только лишь удобно увидеть ее!

Читать далее

Как я включил свое ПО в реестр Минкомсвязи

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

Подробное описание всего процесса включения ПО в реестр программного обеспечения минкомсвязи от частного лица на личном опыте.

Читать далее

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

Миграция 500 Гиг из Оракла за 5 часов

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


На самом деле, еще 9 часов заняла загрузка данных в PostgreSQL, но обо всем по порядку.
Ничто не предвещало грозы — у Заказчика упал сервер и всего-то предполагалось поднять Оракл ;-)


Что я и сделал.


Но ВНЕЗАПНО оказалось, что по договору нужна миграция а дедлайн через 3 дня и все заверте...

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

Проклятье TOAST и с каким маслом его ест JSONB

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

О роли формата JSON в эволюции реляционных баз данных я недавно рассказал на двух конференциях — HighLoad++ и Saint HighLoad++ 2021. А также о том, что мешает эффективно использовать JSONB (бинарный JSON)  и как с этим можно бороться.

Сегодня посмотрим на особенности работы с TOAST — отдельным хранилищем для длинных записей.  Начну с проклятия TOAST для JSON, а в следующей части расскажу, как это можно использовать в PostgreSQL, и за счет чего получится повысить производительность JSONB.

Читать далее

PostgreSQL: занимательный пример работы индексов, планировщика запросов и магии

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

В начале месяца я прочитал доклад про индексы в базах данных для Saint P Ruby Community и буквально через несколько дней жизнь не замедлила подкинуть мне показательный пример работы индексов, планировщика баз данных и важности обновления СУБД.

Итак, дано: большая таблица projects с кучей (ненужных) индексов, в том числе обычный BTree-индекс по числовой колонке forks_count. У неё есть связь по has_one с таблицей project_dependencies с функциональным GIN-индексом по полю packages в колонке data, в котором поле находится JSON-объект с названиями NPM-пакетов в ключах и их версиями в значениях (куда ж сейчас без джаваскрипта?):

Задача: вытащить примеры проектов, имеющих в зависимостях определённый пакет, показать пользователю наиболее популярные. Показателем популярности и ценности как раз будет количество форков — как правило это какие-то уже раскрученные публичные стартер-проекты.

Как думаете, будет просто? Поехали!

NoSQL и Антивакцинаторство

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

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

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

С середины прошлого века мы работаем над реляционными базами данных. И они прекрасны. Но сейчас все чаще любят использовать NoSQL всех видов и мастей. И они иногда неплохо ложатся и затыкают собой какое-то мелкое место в проекте. Если я ценю свои данные и мне нужна какая-то надежность, то мне нужны ACID гарантии. Если это всего лишь кеш, данные из которого нужны чтобы ускорить приложение то я с радостью возьму Redis или аналоги. Ведь если он упадет или данные рассогласуются я смогу их восстановить из нормальной базы.

Читать далее

Блеск и нищета Ansible

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

Написали свежий Ansible-плейбук? Отлично. Осталось-то всего ничего, ровно самая малость: установить нужные Python-зависимости на целевые хосты. Именно такой путь предлагается авторами инструмента. Но является ли он единственно возможным, или есть варианты?

Боремся с зависимостью

Postgresso 36

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


Вавилонская рыбка открыла свои коды


Главный девелопер-адвокат AWS Себастьян Стормак (Sébastien Stormacq) от имени Amazon объявил с зашкаливающим радикализмом об открытии кода Babelfish: Goodbye Microsoft SQL Server, Hello Babelfish. Об этом пишут и на OpenNet:
Читать дальше →

Настройка PostgreSQL под Linux

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

Время от времени приходится слышать мнение от некоторых системных администраторов, а также некоторых 1С-разработчиков, что установка, настройка и поддержка PostgreSQL под Linux очень сложна. Что гораздо дешевле покупать лицензии Windows и Microsoft SQL Server, чем нанимать высококвалифицированных администраторов, которые будут администрировать все эти open-source системы.

На наших бизнес-приложениях, использующих в качестве СУБД PostgreSQL, работают 70% крупнейших розничных сетей в Беларуси. Во всех из них одновременно работают от 500 до 1500 пользователей. В приложениях реализованы практически все основные процессы розничных сетей (демо, чтобы оценить сложность). Размер баз данных на данный момент составляет от 2 до 4ТБ. И все они работают практически со стандартными настройками PostgreSQL на одиночных серверах без какой-либо кластеризации. При этом даже в самых загруженных серверах есть еще значительный резерв по ресурсам для дальнейшего увеличения нагрузки без потребности в кластеризации.

Да, конечно же, многое зависит от запросов к СУБД, и несколькими кривыми запросами можно положить весь сервер. Однако, точно также можно положить и Oracle, и MSSQL. Да, платформа lsFusion, на которой написаны наши приложения, делает много различных оптимизаций запросов конкретно под PostgreSQL. Но вручную SQL-запросы можно оптимизировать еще лучше.

В этой статье я полностью опишу все настройки PostgreSQL (и немножко ОС), которые мы делаем на наших системах. Кроме того, мы специально стараемся не изменять те настройки, которые не дают видимого изменения в производительности, чтобы потом не гадать, почему в одном окружении есть проблема, а в другом - нет.

Читать далее