Search
Write a publication
Pull to refresh
-4
0.2
Send message

Индексы в PostgreSQL — 1

Reading time17 min
Views485K

Предисловие


В этой серии статей речь пойдет об индексах в PostgreSQL.

Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

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

В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.
Читать дальше →

WAL-G: бэкапы и восстановление СУБД PostgreSQL

Reading time9 min
Views45K
Уже давно известно, что делать бэкапы в SQL-дампы (используя pg_dump или pg_dumpall) – не самая хорошая идея. Для резервного копирования СУБД PostgreSQL лучше использовать команду pg_basebackup, которая делает бинарную копию WAL-журналов. Но когда вы начнёте изучать весь процесс создания копии и восстановления, то поймёте что нужно написать как минимум пару трёхколёсных велосипедов, чтобы всё это работало и не вызывало у вас боль как сверху, так и снизу. Дабы облегчить страдания был разработан WAL-G.

WAL-G – это инструмент, написанный на Go для резервного копирования и восстановления PostgreSQL баз данных (а с недавнего времени и MySQL/MariaDB, MongoDB и FoundationDB). Он поддерживает работу с хранилищами Amazon S3 (и аналогами, например, Yandex Object Storage), а также Google Cloud Storage, Azure Storage, Swift Object Storage и просто с файловой системой. Вся настройка сводится к простым шагам, но из-за того что статьи о нём разрозненны по интернету – нет полного how-to мануала, который бы включал все шаги от и до (на Хабре есть несколько постов, но многие моменты там упущены).

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

Конференция DEVOXX UK. Выбираем фреймворк: Docker Swarm, Kubernetes или Mesos. Часть 2

Reading time9 min
Views3.5K
Docker Swarm, Kubernetes и Mesos являются наиболее популярными фреймворками для оркестровки контейнеров. В своем выступлении Арун Гупта сравнивает следующие аспекты работы Docker, Swarm, и Kubernetes:

  • Локальный девелопмент.
  • Функции развертывания.
  • Мультиконтейнерные приложения.
  • Обнаружение служб service discovery.
  • Масштабирование сервиса.
  • Run-once задания.
  • Интеграция с Maven.
  • «Скользящее» обновление.
  • Создание кластера БД Couchbase.

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

Арун Гупта — главный технолог open-source продуктов Amazon Web Services, который уже более 10 лет развивает сообщества разработчиков Sun, Oracle, Red Hat и Couchbase. Имеет большой опыт работы в ведущих кросс-функциональных командах, занимающихся разработкой и реализацией стратегии маркетинговых кампаний и программ. Руководил группами инженеров Sun, является одним из основателей команды Java EE и создателем американского отделения Devoxx4Kids. Арун Гупта является автором более 2 тысяч постов в IT-блогах и выступил с докладами более чем в 40 странах.

Автоматизация квартиры

Reading time4 min
Views23K

Предыстория


Давняя мечта об автоматизации квартиры начала свое превращение в реальность с покупки квартиры в новостройке. Уже на этапе планирования ремонта вырисовались основные требования к инженерным сетям:

  1. гибкое управление освещением, водоснабжением, вентиляцией, отоплением и силовыми нагрузками;
  2. возможность реализации сценариев;
  3. удаленное управление и оповещение;
  4. централизованное отключение всего освещения;
  5. централизованное отключение неприоритетных нагрузок и водоснабжения;
  6. в перспективе – возможность голосового управления.
Читать дальше →

PostgreSQL: как всего одно изменение привело к росту производительности в 9 раз

Reading time10 min
Views23K
В самом сердце проекта Actual, который предназначен для управления персональными финансами, лежит система синхронизации данных собственной разработки. Недавно я реализовал в проекте полное сквозное шифрование (оно, правда, пока не вышло в продакшн). Эта работа вдохновила меня на исследование производительности внутренних механизмов системы. Сегодня я хочу рассказать об одной возможности PostgreSQL, которая позволила добиться 9-10 кратного увеличения производительности проекта.


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

SQL HowTo: 1000 и один способ агрегации

Reading time5 min
Views16K
Наш СБИС, как и другие системы управления бизнесом, не обходится без формирования отчетов — каждый руководитель любит сводные цифры, особенно всякие суммы по разделам и красивые "Итого".

А чтобы эти итоги собрать, необходимо по исходным данным вычислить значение некоторой агрегатной функции: количество, сумма, среднее, минимум, максимум,… — и, как правило, не одной.


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

Linux tuning to improve PostgreSQL performance. Илья Космодемьянский

Reading time19 min
Views19K

Расшифровка доклада 2015 года Ильи Космодемьянского "Linux tuning to improve PostgreSQL performance"


Disclaimer: Замечу что доклад этот датирован ноябрем 2015 года — прошло больше 4 лет и прошло много времени. Рассматриваемая в докладе версия 9.4 уже не поддерживается. За прошедшие 4 года вышло 5 новых релизов PostgreSQL вышло и 15 версий ядра Linux. Если переписывать эти места, то получится в итоге другой доклад. Но здесь рассмотрен фундаментальный тюнинг Linux для PostgreSQL, который актуален и сейчас.


Не надо учить Machine Learning

Reading time4 min
Views19K

Учитесь создавать софт, используя модели машинного обучения


image

Дисклеймер: статья основана исключительно на моих наблюдениях за командами разработчиков в области машинного обучения и не является результатом научного обзора отрасли. Для справки, я помогаю разрабатывать Cortex — платформу с открытым исходным кодом для запуска моделей в производство.

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

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

Причина кроется в том, что большинство вводных материалов по ML ориентированы не на разработчиков, а на исследователей — что и является проблемой для разработчиков, которые просто хотят создавать продукты с машинным обучением.

Вы хотите создавать продукты или проводить исследования?


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

Моноколесо: что происходит во время обучения, и как ускорить этот процесс

Reading time6 min
Views15K
Материалов на тему обучения езде на моноколесе в сети достаточно много, включая и хабр. С моей точки зрения, им недостаёт структурированности и фокусировки на важных вещах.

Сам я научился ездить за 2,5 часа и после этого поехал с работы домой через весь город — полтора десятка километров. С того момента я обучил ещё 17 человек — и лишь немногим из них потребовалось больше полутора часов, чтобы поехать самостоятельно.

Почему мне не потребовалось «неделя трудных и упорных попыток, чтобы поехать»?

С самого начала у меня была какая-то тактика. И я её придерживался.

О хранении JWT токенов в браузерах

Reading time3 min
Views68K

Открытый стандарт JWT официально появился в 2015 (rfc7519) обещая интересные особенности и широкие перспективы. Правильное хранение Access токена является жизненно важным вопросов при построении системы авторизации и аутентификации в современном Web, где становятся все популярнее сайты, построенные по технологии SPA.

Неправильное хранение токенов ведет к их краже и переиспользованию злоумышленниками.
Читать дальше →

Дихотомия данных: переосмысление отношения к данным и сервисам

Reading time9 min
Views2.2K
Всем привет! У нас отличные новости, в июне OTUS снова запускает курс «Архитектор ПО», в связи с чем мы традиционно делимся с вами полезным материалом.




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

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

Путь самурая: от Servlet к Reactive Programming

Reading time8 min
Views12K


Примерно 1-1,5 года назад Spring Webflux был на хайпе. Практически на любой Java-конференции можно было встретить доклады по Webflux, реактивному программированию, где-то даже проскакивали доклады про RSocket. Выступлений было много, сообщество маленькое, работающих проектов еще меньше. Возможно, тому виной была достаточно сырая технология в мире Spring и отсутствие поддержки со стороны многих модулей экосистемы, но мы рискнули.

Меня зовут Александр, я техлид в команде кабинета участника сделки в ДомКлике. В этой статье я не буду пересказывать документацию по Spring Webflux, она есть и очень подробная. А расскажу о том, как мы полностью перешли на реактивное программирование в нашем проекте, что нас сподвигло на это, и что в итоге получилось.
Читать дальше →

Сколько нужно программистов и прописей, чтобы распознать рукописный паспорт?

Reading time4 min
Views8.2K
Как думаете, часто ли встречаются рукописные паспорта в нашей стране? Когда мы в Smart Engines начинали проектировать систему распознавания паспортов, казалось, что достаточно научить систему качественно распознавать машинописные документы. На тот момент наличие рукописных паспортов, которые не поддавались автоматическому распознаванию, не представлялось важной проблемой: нерешенных задач хватало и без этого. Год назад, анализируя качество работы Smart IDReader, мы поняли, что добрались до того уровня, когда рукописные паспорта составляют значимый класс ошибок. В соответствии с научным подходом, изучили проблему и принялись за решение. Сегодня будет рассказ о том, как мы сделали распознавание рукописного общегражданского паспорта РФ, успешно решив тем самым последнюю задачу на пути полной автоматизации ввода паспортных данных.

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

DBA: в погоне за пролетающими блокировками

Reading time10 min
Views7.1K
В прошлой статье, где я рассказывал о мониторинге БД PostgreSQL, была такая фраза:
Растут wait — приложение в кого-то «уперлось» на блокировках. Если это уже прошедшая разовая аномалия — повод разобраться в исходной причине.
Такая ситуация — одна из самых неприятных для DBA:

  • на первый взгляд, база работает
  • никакие ресурсы сервера не исчерпаны
  • … но часть запросов при этом «подтормаживает»

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

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

Разве что короткую запись в логе:
process ... still waiting for ...
А давайте попробуем зацепиться именно за нее!
Читать дальше →

Внутри виртуальной машины Python. Часть 2

Reading time27 min
Views17K

Привет, Хабр. Перевод этой статьи занял намного больше времени, чем ожидалось. Мне очень хотелось сделать всё качественно и без обмана, но если найдёте неточности, буду рад услышать о них. Также я буду сам перечитывать и исправлять ошибки предыдущих статей, если где-то оказался не прав. Мне предстоит перевести ещё около 4-5 статей такого объёма, поэтому прошу оценить мой труд, если вам понравилось.
Читать дальше →

10 отличных Github репозиториев для разработчиков (часть 2)

Reading time4 min
Views17K

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



Как и в прошлом случае, перевод будет довольно вольным: я опустил предисловие и эмоциональные похвалы автора оригинала, чтобы оставить только суть. Еще, обновил цифры, чтобы информация была более актуальной к моменту публикации этого перевода. Итак, поехали.
Читать дальше →

PostgreSQL: Серверное программирование на «человеческом» языке (PL/Perl, PL/Python, PL/v8)

Reading time25 min
Views23K
Postgres знаменит своей расширяемостью, что относится и к поддержке процедурных языков (PL). Никто не может похвастаться языком списком языков такой длины, а потенциально этот список и вовсе не ограничен: для того, чтобы подключить язык к серверу, не требуется сверхусилий. Можно даже придумать собственный язык и сделать его серверным процедурным языком. Переделок в СУБД это не потребует. Как и многое другое, такая расширяемость была заложена с самого начала в архитектуру Postgres.

Можно и иногда нужно писать PL-языки под задачи. А еще лучше, если кто-то напишет такой фреймворк для написания языков, чтобы можно было писать не на C, а выбрать более комфортный для разработчика языков язык. Как с FDW, которые можно писать на Python.

Эта статья написана на основе ряда докладов и мастер-классов по этой теме, делавшихся автором на конференциях PgConf.Russia 2019, PgConf.Russia 2018 и DevConf 2017.

Речь пойдет не об экзотике, а о самых распространённых процедурных языках PL/Perl, PL/Python и PL/V8 (то есть JavaScript) и сравнении их возможностей с PL/pgSQL.
Читать дальше →

24 датасета для ритейла и ecommerce

Reading time4 min
Views20K
image

Продуктовые датасеты


  • Fashion-MNIST: Идеально подходит для продуктовой категоризации. MNIST содержит почти 60 000 обучающих изображений и 10 000 тестовых изображений продуктов фэшн-индустрии в 10 классах.
  • Innerwear Data from Victoria’s Secret and Others: Данные с 600 000+ товаров нижнего белья, извлеченного из популярных торговых объектов. Включает в себя описание продукта, цену, категорию, рейтинг и многое другое.
  • Electronic Products and Pricing Data: Содержит список из более чем 7000 электронных продуктов.
  • Men’s Shoe Prices: Список содержащий 10 000 мужских ботинок и цен.
  • Women’s Shoe Prices: Список содержащий 10 000 женских туфель и цены.
  • eCommerce Item Data: Подходит для рекомендательных систем. Этот набор данных содержит артикулы и связанные с ними описания продуктов из каталога продукции бренда наружной одежды.
  • Fashion Products on Amazon.com: Это pre-crawled набор данных, созданный путем извлечения данных из Amazon. Он состоит примерно из 22 000 фэшн-товаров на Amazon.
  • E-commerce Tagging for Clothing: Содержит изображения с сайтов ecommerce с ограничивающими рамками, нарисованными вокруг рубашек, пиджаков, солнцезащитных очков и т. д. Он содержит 907 наименований, из которых 504 наименования были помечены вручную.

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

Как PostgreSQL работает с диском. Илья Космодемьянский

Reading time20 min
Views19K

Расшифровка доклада 2014 года Ильи Космодемьянского "Как PostgreSQL работает с диском".


Часть поста, конечно, устарела, но здесь рассмотрены фундаментальные моменты PostgreSQL при работе с диском, которые актуальны и сейчас.


Диски, память, цена, процессор — в таком порядке смотрят на характеристики сервера админы, покупающие машину под базу данных. Как эти характеристики взаимосвязаны? Почему именно они?


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


"Железо", настройки операционной системы, файловой системы и PostgreSQL: как и для чего выбирать хороший setup, что делать, если конфигурация "железа" не оптимальна, и какие ошибки могут сделать бесполезным самый дорогой RAID-контроллер. Увлекательное путешествие в мир батареек, "грязных" и "чистых" страниц, хороших и плохих SSD-дисков, покрасневших графиков мониторинга и ночных кошмаров системных администраторов.

Information

Rating
4,955-th
Registered
Activity