• Блокировки в PostgreSQL: 2. Блокировки строк

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



      Блокировки строк


      Устройство


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

      • Блокировка должна существовать где-то в разделяемой памяти сервера.
      • Чем выше гранулярность блокировок, тем меньше конкуренция (contention) среди одновременно работающих процессов.
      • С другой стороны, чем выше гранулярность, тем больше места в памяти занимают блокировки.

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

      Есть разные пути решения этой проблемы. В некоторых СУБД происходит повышение уровня блокировки: если блокировок уровня строк становится слишком много, они заменяются одной более общей блокировкой (например, уровня страницы или всей таблицы).

      Как мы увидим позже, в PostgreSQL такой механизм тоже применяется, но только для предикатных блокировок. С блокировками строк дело обстоит иначе.
      Читать дальше →
      • +24
      • 6.6k
      • 7
    • Как Dark развертывает код за 50 мс

      • Translation


      Чем быстрее процесс разработки, тем быстрее развивается технологическая компания.


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


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


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

      Читать дальше →
      • +23
      • 9.3k
      • 8
    • Еще одно мнение о разнице между bin, sbin, usr/bin, usr/sbin

      Недавно я обнаружил вот такую статью: Разница между bin, sbin, usr/bin, usr/sbin. Хотелось бы поделиться своим взглядом на стандарт.

      /bin


      Содержит команды, которые могут использоваться как системным администратором, так и пользователями, но которые необходимы, когда не смонтированы никакие другие файловые системы (например, в однопользовательском режиме). Он также может содержать команды, которые косвенно используются скриптами.

      Там ожидается присутствие таких команд:

      cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, uname.

      Можно сделать симлинки на /usr, но хотя во времена systemd /usr на отдельном устройстве не встречается, его еще можно встретить на встраиваемой системе, светофоре, кофемолке и PDP-11 обслуживающем важный прибор в одной из лабораторий Академии Наук.

      /sbin


      Утилиты, используемые для системного администрирования (и другие команды только для root), /sbin содержит двоичные файлы, необходимые для загрузки, восстановления, восстановления и/или восстановления системы в дополнение к двоичным файлам в /bin. Программы, выполняемые после того, как /usr монтируется (когда проблем нет), обычно помещаются в /usr/sbin. Локально установленные программы системного администрирования должны быть помещены в /usr/local/sbin.

      Ожидаются:

      fastboot, fasthalt, fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff, update.

      Один из способов защиты системы от шаловливых рук юзеров — это запрет запуска этих утилит кому-попало, установкой атрибута x.
      К тому же, замена /bin и /sbin на копии из архива (одинакового для всех однотипных систем) является быстрым способом починки систем без пакетного менеджера.
      Читать дальше →
    • Рецепты PostgreSQL: преобразование из HTML и URL в PDF и PS

      • Tutorial
      Для приготовления преобразования из HTML и URL в PDF и PS нам понадобится сам postgres, генератор htmldoc и расширение pg_htmldoc. (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальный репозитории. Можно также воспользоваться готовым образом.)
      Читать дальше →
    • Дайджест новостей из мира PostgreSQL. Выпуск №16



        Мы продолжаем знакомить вас с самыми интересными новостями по PostgreSQL.

        Главная новость июня



        EnterpriseDB приобретена инвестиционным фондом Great Hill Partners. Сумма сделки не разглашается. Майкл Стоунбрейкер назначен техническим советником. Энди Палмер вошел в совет директоров EDB. Он известный ИТ-инвестор, сооснователь Vertica и автор главы в книге Making Databases Work: The Pragmatic Wisdom of Michael Stonebraker. Great Hill Partners — частный (непубличный) фонд, управляющий $2.7 млрд. Событие не менее впечатляющее, чем недавняя покупка Citus Microsoft-ом: из 5 участников Core Team двое сотрудники EDB.

        Релизы



        PostgreSQL 11.4, 10.9, 9.6.14, 9.5.18, 9.4.23 и 12 Beta 2

        Этих релизов ждали не из-за новых фич, а из-за того, что надо было закрывать обнаруженную дырку в безопасности под кодовым названием CVE-2019-10164. Любой прошедший проверку при аутентификации по методу scram-sha-256 пользователь мог переполнить буфер в стеке, сменяя свой пароль на специально сконструированную строку. Этим способом можно было не только уронить сервер, но и выполнить произвольный код от имени пользователя ОС, запускающего PostgreSQL.

        Подобная возможность переполнения существовала и в libpq, и эксплуатируя её, подставной сервер мог уронить клиентское приложение или выполнить коварный код на клиенте от имени пользователя, запускавшего это приложение.

        Эта уязвимость проявилась только в относительно новых версиях PostgreSQL: 10 и выше, когда появилась SCRAM-аутентификация. На сайте сообщества можно увидеть «особую благодарность» Александру Лахину (Postgres Professional), который обнаружил проблему.

        Можно почитать статью на эту тему: eVOL Monkey. Who's affected and how to protect your systems.

        Postgres Pro Standard 11.4.1, 10.9.1, 9.6.14.1, 9.5.17.1 и Postgres Pro Enterprise 11.4.1

        В этих версиях дыра в безопасности уже закрыта. Об этом и о других багфиксах можно прочитать в документации к соответствующей версии.
        Читать дальше →
        • +16
        • 4.1k
        • 5
      • Как настроить HTTPS — поможет SSL Configuration Generator

          Рассказываем об инструменте для конфигурации SSL, который разработали в Mozilla.

          Под катом — о его возможностях и других утилитах для настройки сайтов.

          Читать дальше →
          • +20
          • 6.6k
          • 1
        • Опыт интеграции онлайн кассы Атол с собственной торговой CRM

          • Tutorial
          Вокруг онлайн касс в последнее время дикий ажиотаж, 1 июля 2019 заканчивается последняя отсрочка, поэтому и мне пришлось заняться этим вопросом. Тем, у кого 1С или другая система особо можно не напрягаться, но если у вас собственная самописная система, то на ваши плечи ложится еще и интеграция с онлайн-кассами.

          Мой опыт пригодится для интеграции с кассами Атол в режиме обмена данными по сети, ваша программа может отправлять данные на web-сервер Атол как на локалхост, так и по локальной сети, можно хоть из браузера AJAX отправлять, хоть с сервера через CURL, поэтому, неважно на каком языке написан ваш корпоративный софт, всё кроссплатформенно.
          Читать дальше →
        • Python потребляет много памяти или как уменьшить размер объектов?

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


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

            Читать дальше →
          • Нагрузочное тестирование веб-проекта — без купюр

              Друзья, добрый день!

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

                В статье будут рассмотрены возможности, предоставляемые встроенным или декларативным секционированием в 12 версии PostgreSQL. Демонстрация подготовлена для одноименного доклада на конференции HighLoad++Siberia 2019 (upd: появилось видео с докладом).

                Все примеры выполнены на недавно появившейся бета-версии:

                => SELECT version();
                
                                                                     version                                                      
                ------------------------------------------------------------------------------------------------------------------
                 PostgreSQL 12beta1 on i686-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609, 32-bit
                (1 row)
                Читать дальше →
                • +32
                • 6.5k
                • 3
              • Обзор Python-пакета Datatable

                • Translation
                «Пять экзабайт информации создано человечеством с момента зарождения цивилизации до 2003 года, но столько же сейчас создаётся каждые два дня». Эрик Шмидт


                Datatable — это Python-библиотека для выполнения эффективной многопоточной обработки данных. Datatable поддерживает наборы данных, которые не помещаются в памяти.

                Если вы пишете на R, то вы, вероятно, уже используете пакет data.table. Data.table — это расширение R-пакета data.frame. Кроме того, без этого пакета не обойтись тем, кто пользуется R для быстрой агрегации больших наборов данных (речь идёт, в частности, о 100 Гб данных в RAM).

                Пакет data.table для R весьма гибок и производителен. Пользоваться им легко и удобно, программы, в которых он применяется, пишутся довольно быстро. Этот пакет широко известен в кругах R-программистов. Его загружают более 400 тысяч раз в месяц, он используется в почти 650 CRAN и Bioconductor-пакетах (источник).

                Какая от всего этого польза для тех, кто занимается анализом данных на Python? Всё дело в том, что существует Python-пакет datatable, являющийся аналогом data.table из мира R. Пакет datatable чётко ориентирован на обработку больших наборов данных. Он отличается высокой производительностью — как при работе с данными, которые полностью помещаются в оперативной памяти, так и при работе с данными, размер которых превышает объём доступной RAM. Он поддерживает и многопоточную обработку данных. В целом, пакет datatable вполне можно назвать младшим братом data.table.
                Читать дальше →
                • +39
                • 10.9k
                • 9
              • Что заморозили на feature freeze 2019. Часть I. JSONPath


                  После комитфеста 2019-03 произошла заморозка функциональности (feature freeze). У нас это почти традиционная рубрика: о прошлогодней заморозке мы уже писали. Теперь итоги 2019: что из нового войдет в PostgreSQL 12. В этой части обзора, посвященной JSONPath, используются в том числе примеры и фрагменты из доклада «Postgres 12 в этюдах», который прочитал Олег Бартунов на Saint Highload++ в СПБ 9 апреля сего года.
                  Читать дальше →
                  • +12
                  • 3.6k
                  • 7
                • Бессерверный PHP на AWS Lambda

                  • Translation
                  Всем привет. Уже в понедельник состоится первое занятие в новой группе курса «Backend разработчик на PHP». В связи с этим мы продолжаем публиковать полезный материал по теме. Начнем.



                  Как и Саймон Вордли, я считаю, что бессерверные вычисления – это крайне интересная область, в первую очередь из-за гранулированной системы оплаты (платите только тогда, когда выполняется ваш код), и вам не нужно беспокоиться об облуживании и подготовке серверов и контейнеров. Настолько, что я работаю с открытым PHP Runtime для Apache OpenWhisk, коммерческая версия которого доступна как одна из функций IBM Cloud.
                  Читать дальше →
                • Блокировки в Postgres: 7 советов по работе с блокировками

                  • Translation
                  И снова здравствуйте! Уже в следующий вторник стартует новый поток по курсу «Реляционные СУБД», поэтому мы продолжаем публиковать полезный материал по теме. Поехали.



                  На прошлой неделе я писал о конкурентном доступе в Postgres, какие команды блокируют друг друга, и как вы можете диагностировать заблокированные команды. Конечно, после постановки диагноза вам может потребоваться и лечение. С Postgres можно выстрелить себе в ногу, но Postgres также предлагает вам способы не сбить наводку. Вот некоторые из важных советов о том, как стоит и как не стоит делать, которые мы сочли полезными при работе с пользователями по переходу с их единой базы данных Postgres на Citus или при создании новых приложений аналитики в реальном времени.
                  Читать дальше →
                  • +24
                  • 7.8k
                  • 8
                • PHP: Как разобрать сложный XML-файл и не утонуть в собственном коде

                  Доброе время суток!

                  Сфера применения XML-формата достаточно обширна. Наряду с CSV, JSON и другими, XML — один из самых распространенных способов представить данные для обмена между различными сервисами, программами и сайтами. В качестве примера можно привести формат CommerceML для обмена товарами и заказами между 1С «Управление торговлей» и интернет-магазином.

                  Поэтому практически всем, кто занимается созданием веб-сервисов, время от времени приходится сталкиваться с необходимостью разбора XML-документов. В своем посте я предлагаю один из методов, как это сделать по возможности наглядно и прозрачно, используя XMLReader.
                  Читать дальше →
                • Как подготовиться к проверке РКН по персональным данным: полное руководство



                    О нас


                    Доброго времени суток, Хабр! Мы компания «Информационный центр». Наше основное направление – информационная безопасность (она же – ИБ). В ИБ мы занимаемся практически всем: аудитом, проектированием систем защиты, аттестацией, комплаенсом, пентестами, есть свой SOC, даже с гостайной работаем. Поскольку мы базируемся во Владивостоке, изначально мы работали больше в Приморском крае и в дальневосточных регионах страны, но в последнее время география наших проектов все дальше раздвигает немыслимые нами в момент основания границы.

                    В первой своей статье мы хотели бы рассмотреть такую сторону ИБ, как комплаенс (англ. complience – соблюдение, соответствие). И поговорим мы о том, что нужно сделать, чтобы полностью соответствовать российскому законодательству о персональных данных.
                    Читать дальше →
                  • Зрелая исполняемая среда для контейнеров: containerd стал «выпускником» CNCF

                      За проектом containerd мы следим с самого его начала. Посему не можем обойти вниманием значимое событие: минувшей ночью организация CNCF, стоящая за Kubernetes и другими выдающимися Open Source-решениями для мира cloud native, объявила containerd своим «выпускником». Этот проект стал уже пятым с таким статусом, пополнив ряды K8s, Prometheus, Envoy и CoreDNS.

                      Читать дальше →
                      • +19
                      • 3.4k
                      • 2
                    • k3s – маленький, но сертифицированный Kubernetes от Rancher Labs

                        image

                        Требования:

                        • Linux 3.10+
                        • 512 MB of ram per server
                        • 75 MB of ram per node
                        • 200 MB of disk space
                        • x86_64, ARMv7, ARM64

                        Rancher Labs выпустила новый продукт для Edge, IoT, CI с поддержкой ARM: k3s

                        Нет поддержки Legacy/Alpha, есть замена etcd3 на sqlite по умолчанию (можно включить etcd3).

                        Вместо Docker используется containerd: нет libnetwork, swarm, драйверов для Docker storage.
                        Для сокращения потребления памяти объеденены в один процесс Kubelet, kubeproxy и flannel agent.

                        Инсталлятор простой, сертификаты генерируются автоматически.

                        k3s.io
                        github.com/rancher/k3s
                        Читать дальше →
                      • Устранение рекурсии в Python

                        Привет, Хабр! Представляю вашему вниманию перевод статьи "Removing a recursion in Python, part 1" автора Эрика Липперта (Eric Lippert).


                        На протяжении последних 20 лет я восхищался простоте и возможностям Python, хотя на самом деле никогда не работал с ним и не изучал подробно.


                        В последнее время я присмотрелся к нему поближе — и он оказался действительно приятным языком.


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

                        Читать дальше →
                      • Всегда ли Node.js будет медленнее, чем Golang?

                        • Translation
                        Возникает такое ощущение, что буквально каждую неделю появляется новый «веб-фреймворк» для Node.js, который называют чем-то таким, что работает быстрее, чем всё, что было до него. Всем известно, что Express — это медленно, но способен ли очередной фреймворк по-настоящему улучшить производительность подсистемы ввода-вывода Node.js? Единственное, что он может — это устранить чрезмерную нагрузку на систему, создаваемую Express. Об улучшении чего-то фундаментального речи не идёт. Собственно говоря, для того, чтобы кардинальным образом улучшить ситуацию, нужно работать на более глубоком уровне, а не добавлять новые абстракции поверх Node.js.

                        image

                        Что нужно для того, чтобы на платформе Node.js можно было бы создавать серверные приложения, работающие гораздо быстрее чем всё то, что есть сегодня?
                        Читать дальше →