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

MVCC-1. Изоляция

Reading time25 min
Views177K
Привет, Хабр! Этой статьей я начинаю серию циклов (или цикл серий? в общем, задумка грандиозная) о внутреннем устройстве PostgreSQL.

Материал будет основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov. Смотреть видео не все любят (я точно не люблю), а читать слайды, пусть даже с комментариями, — совсем «не то».

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

Ориентироваться я буду на тех, кто уже имеет определенный опыт использования PostgreSQL и хотя бы в общих чертах представляет себе, что к чему. Для совсем новичков текст будет тяжеловат. Например, я ни слова не скажу о том, как установить PostgreSQL и запустить psql.

Вещи, о которых пойдет речь, не сильно меняются от версии к версии, но использовать я буду текущий, 11-й «ванильный» PostgreSQL.

Первый цикл посвящен вопросам, связанным с изоляцией и многоверсионностью, и план его таков:

  1. Изоляция, как ее понимают стандарт и PostgreSQL (эта статья);
  2. Слои, файлы, страницы — что творится на физическом уровне;
  3. Версии строк, виртуальные и вложенные транзакции;
  4. Снимки данных и видимость версий строк, горизонт событий;
  5. Внутристраничная очистка и HOT-обновления;
  6. Обычная очистка (vacuum);
  7. Автоматическая очистка (autovacuum);
  8. Переполнение счетчика транзакций и заморозка.

Ну, поехали.
Читать дальше →

Разбираемся с доступом к атрибутам в Python

Reading time8 min
Views21K

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

Ну и что с того? Зачем думать о том, как Python за меньший синтаксис делает больше вызовов функций? На самом деле для этого есть две причины. Во-первых, полезно знать, как на самом деле работает Python, чтобы лучше понимать/отлаживать код, когда что-то идет не так как надо. Во-вторых, так можно выявить минимум, необходимый для реализации языка.

Именно поэтому, чтобы заняться самообразованием и заодно подумать, что может понадобиться для реализации Python под WebAssembly или API bare bones на C, я решил написать эту статью о том, как выглядит доступ к атрибутам и что скрывается за синтаксисом.

Теперь мы можете попытаться собрать воедино все, что относится к доступу к атрибутам, прочитав справочник по Python. Так вы можете прийти к выражениям ссылок на атрибуты и модели данных для настройки доступа к атрибутам, однако, все равно важно связать все вместе, чтобы понять, как работает доступ. Поэтому я предпочитаю идти от исходного кода на CPython и выяснять, что происходит в интерпретаторе (я специально использую тег репозитория CPython 3.8.3, поскольку у меня есть стабильные ссылки и я использую последнюю версию на момент написания статьи).

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

Читать далее

Пишем ОС на Rust. Настройка среды. Бинарник для «голого» железа

Reading time7 min
Views19K

Настройка среды. "Голый" бинарник, или Исполняемый файл без main()


Первый шаг в написании своей ОСи — создание бинарника, не зависящего от стандартных библиотек, это делает возможным запуск кода без ОС — мы же пишем свою.


Оригинал блога разрабатывается на GitHub. Замечания к оригиналу оставляйте на странице Issues репозитория выше, а к переводу — в личке, комментариях или тут. Код, написанный в этой статье, содержится в ветке post-01.

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

Как не испортить своего джуна

Reading time9 min
Views41K


Меня зовут Дима Вдовин, я разработчик команды корпоративных рисков. Сегодня я хотел бы поговорить о джунах и их интеграции в команду разработки. С одной стороны, тема банальная и известна всем, а с другой, о ней часто забывают или игнорируют. Почему-то многие команды и руководители считают, что джун вольется в коллектив и работу над проектом как-то «самостоятельно», без активной поддержки, а если не вольется — значит он не справляется и не подходит. Это не так.

Мы крупный банк, к нам приходит работать много молодых ребят и в большинстве случаев для них это первая работа такого рода. Это тянет за собой целый ворох проблем, связанный со страхами неизвестности, неуверенностью, боязнью «уронить прод». Они боятся совершить серьезную ошибку, которая поставит крест на карьере в IT. Это сейчас подавляющее большинство из нас — опытных разработчиков — уверенные в себе профессионалы. Мы можем позволить себе хотя бы на время отказаться от подобной саморефлексии и делать «быстрее, выше, сильнее». Многих же джунов одолевают страхи, которые если и не парализуют, то заставляют их выверять каждый шаг.
Читать дальше →

Как запустить IT-продукт за 1,5 месяца и не закрыться через полгода с колоссальными убытками

Reading time5 min
Views7.5K

Долгий запуск — опасность для любого проекта. Особенно в IT: eсли мы долгое время не получаем обратной связи от рынка и конечных пользователей — высокий риск сделать никому не нужный продукт.

Такая история произошла с моим знакомым, который имел вполне успешный бизнес в офлайне. Наблюдая за успехами таких сервисов, как avito и carprice, он решил запустить аналогичный онлайн-сервис по продаже недвижимости, в которой у него был 10-летний опыт.

Идея монетизации — оплата за размещенное объявление об объекте и помесячная подписка на расширенные инструменты для продажи недвижимости.

Для этого заказал разработку функционального онлайн-сервиса с внутренней CRM-системой, мессенджерами и сложной системой аналитики за 1.5 млн. рублей и 5 месяцев работы, снял офис, нанял менеджеров и запустил рекламу.

Примерно за полгода затраты превысили 2,5 млн. рублей и, судя по динамике, это было только начало.

Читать далее

12 причин не идти в стартап

Reading time23 min
Views51K
За последние 10 лет в мире IT довольно прочно укоренился ряд возвеличенных стереотипных представлений о стартапах. Этому во многом способствовали миллионные тиражи книг-биографий известных CEO, которые тогда, много лет назад основали свой стартап, а потом он вырос в гигантскую корпорацию вроде Google, Amazon, Facebook. Этому способствует и несколько однобокая и фрагментированная подача материалов в it-сообществах, в том числе и на habr.com. И вряд ли в этом можно кого-то винить, но попробовать разобраться и приоткрыть ту сторону медали, которая не так масштабно освещена, всё же можно.

Я адресую эту статью начинающим программистам, которые либо не имеют опыта работы вообще, либо имеют небольшой опыт (до 5 лет). Как показывает практика, именно эта категория людей имеет максимально искаженные представления о стартапах в сфере IT. Искаженные – в том смысле, что на вопрос «что можешь сказать положительного о стартапах?», они могут долго пересказывать чужие и в немалой степени устаревшие мысли, а на вопрос «что не так со стартапами?» — в ответ могут лишь неуверенно вопросить: «они могут не выстрелить?»

Эта статья предназначена тем, кто просто никогда не задумывался над вопросом, почему не стоит идти работать в стартап в качестве сотрудника. Поехали!
Читать дальше →

Linux-контейнеры в паре строчек кода

Reading time5 min
Views6.8K
В продолжение прошлой статьи о KVM публикуем новый перевод и разбираемся, как работают контейнеры на примере запуска Docker-образа busybox.

Эта статья о контейнерах является продолжением предыдущей статьи о KVM. Я бы хотел показать, как именно работают контейнеры, запустив Docker-образ busybox в нашем собственном небольшом контейнере.

В отличие от понятия «виртуальная машина», термин «контейнер» очень расплывчатый и неопределенный. Обычно мы называем контейнером — автономный пакет кода со всеми необходимыми зависимостями, которые могут поставляться вместе и запускаться в изолированной среде внутри операционной системы хоста. Если вам кажется, что это описание виртуальной машины, давайте погрузимся в тему глубже и рассмотрим, как реализованы контейнеры.
Читать дальше →

Метаклассы в Python

Reading time4 min
Views21K

Метаклассы – это такие классы, экземпляры которых сами являются классами. Подобно тому, как «обычный» класс определяет поведение экземпляров класса, метакласс определяет и поведение классов, и поведение их экземпляров.

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

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

У метаклассов множество применений. Выделим несколько из них:

Читать далее

Да, вам может понадобиться блокчейн

Reading time10 min
Views3.4K

Изначально статья была опубликована в Coindesk 14 мая 2019 года.

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

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

Проблемы экспорта/импорта данных

Читать далее

Apache Kafka как основа для велосипедостроения. Николай Сивко (okmeter.io)

Reading time22 min
Views9.6K


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


В своем докладе я расскажу о нашем опыте разработки и эксплуатации специализированной timeseries БД, в основе которой лежит Apache Kafka.

А давайте в Go сделаем TryLock(context.Context)

Reading time3 min
Views5.6K

Привет!


Вэтой статье я хотел бы расcказать, как можно было бы сделать свой RWMutex, но с возможностью по таймауту или по срабатыванию контекста пропустить блокировку. То есть реализовать TryLock(context.Context) и RTryLock(context.Context), но уже для своего Mutex.


image


На картинке изображено, как нужно наливать воду в очень узкое горлышко.

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

5 причин использовать Linux в 2020 году

Reading time4 min
Views45K


Самые лучшие технологии — это движущаяся мишень. Когда технология стагнирует, общество обычно обгоняет и перерастает её. Linux, широко используемая операционная система с открытыми исходниками — это фундаментальная технология, являющаяся основой для одной из самых прогрессивных современных идей компьютерных систем. Поэтому, хотя на протяжении трёх десятков лет развития она остаётся поразительно неизменной, эта ОС обеспечивает адаптируемость. В результате этого Linux находится в уникальном положении — с одной стороны, это надёжная инвестиция в развитие своих навыков, потому что она не меняется, с другой — это кажущаяся бесконечной движущая сила для изучения новых навыков.

2020 год, как на него не взгляни, был странным, но для Linux он оказался продолжением обычного цикла разработки. В этой статье мы вспомним этот год и вкратце расскажем о том, что нужно знать о Linux в 2020 году.
Читать дальше →

PostgreSQL Antipatterns: работаем с отрезками в «кровавом энтерпрайзе»

Reading time6 min
Views12K
В различных бизнес-приложениях регулярно возникает необходимость решить какую-либо задачу с отрезками/интервалами. Самое сложное в них — понять, что это именно одна из таких задач.


Как правило, они отчаянно маскируются, и даже у нас в СБИС их найти можно в абсолютно разных сферах управления предприятием: контроле рабочего времени, оценке загрузки линий АТС или даже в бухгалтерском учете.
«Отличие enterprise [решения] от всего остального — он всегда идёт от запросов бизнеса и решает какую-то бизнес-задачу.» [src]
Вот и давайте посмотрим, какие именно прикладные задачи и как можно решить с помощью PostgreSQL и сократить время анализа данных с нескольких секунд на бизнес-логике до десятков миллисекунд, умея эффективно применять следующие алгоритмы непосредственно внутри SQL-запроса:

  • поиск отрезков, пересекающих точку/интервал
  • слияние отрезков по максимальному перекрытию
  • подсчет количества отрезков в каждой точке
Читать дальше →

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

Reading time6 min
Views49K


В ХIV веке в английском языке начался процесс, который называют Великим сдвигом гласных. Латинское произношение и нижненемецкая фонетика стали вытесняться новыми вариантами. В ходе этого процесса два долгих гласных стали дифтонгами, а еще пять сильно изменились.

Но в средние века не было интернета. В каждом графстве постепенно устоялся свой собственный способ написания и произношения. К примеру, слово «church» на территории Англии могли произносить 22 разными способами, а «she» — 60 вариантами. Знакомое всем «though» и вовсе имело целых 500 вариантов написаний и произношений.

Изменил все один человек — Уильям Кэкстон. Но большинство студентов, которые учат английский как иностранный, ругают этого джентльмена последними словами, когда узнают, как именно читаются слова в английском. Спойлер: как попало. И ругают его, даже если вообще никогда не слышали это имя. Мы расскажем, почему.
Читать дальше →

6 Современных шаблонов проектирования архитектуры в области ПО

Reading time7 min
Views31K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Modern-Day Architecture Design Patterns for Software Professionals" автора Tanmay Deshpande.

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

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

Вот список шаблонов, которые я буду обсуждать в этой статье:

  1. Circuit Breaker
  2. Command and Query Responsibility Segregation (CQRS)
  3. Event Sourcing
  4. Sidecar
  5. Backend-for-Frontend
  6. Strangler

Итак, давайте начнем.
Читать дальше →

Назад к BLE или способ автоматизировать рутинные операции

Reading time12 min
Views5.3K

Кадр из фильма «Назад в будущее» (1985 год)

Стандарт Bluetooth 5.0 вышел в 2016 году, 2019-м появилась версия 5.2. За последнее время Apple провела две конференции WWDC 2017, WWDC 2019 посвященных CoreBluetooth. Активно развивается технология построения mesh сетей. Все стало еще лучше, быстрее и эффективнее.  Интерес к этому направлению только растет. Выстроены целые системы управления на этой технологии.

Мы же задались целью автоматизировать рутинные операции и повысить безопасность доступа пользователей на свое рабочее место. В статье разберем, что было решено предложить пользователям, поговорим немного о технологии BLE (хотя, как тут кратко?) на примере небольшого проекта, который запускается на двух смартфонах и позволяет передавать данные в обе стороны, ну а в конце познакомлю с нашим приложением GM MOBILE ASSISTANT.

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

Технологии магнитной записи HDD: просто о сложном

Reading time9 min
Views48K

Первый в мире жесткий диск, IBM RAMAC 305, увидевший свет в 1956 году, вмещал лишь 5 МБ данных, а весил при этом 970 кг и по габаритам был сопоставим с промышленным рефрижератором. Современные корпоративные флагманы способны похвастаться емкостью уже в 20 ТБ. Только представьте себе: 64 года назад, для того чтобы записать такое количество информации, потребовалось бы свыше 4 миллионов RAMAC 305, а размеры ЦОДа, необходимого для их размещения, превысили бы 9 квадратных километров, тогда как сегодня для этого будет достаточно маленькой коробочки весом около 700 грамм! Во многом добиться столь невероятного повышения плотности хранения удалось благодаря совершенствованию методов магнитной записи.
Читать дальше →

Разбираемся, в чем разница между Data Mining и Data Extraction

Reading time8 min
Views17K

Два этих модных слова, связанных с Data Science, сбивают с толку многих людей. Data Mining часто неправильно понимают как извлечение и получение данных, но на самом деле все намного сложнее. В этом посте давайте расставим точки над Mining и выясним разницу между Data Mining и Data Extraction.
Приятного чтения!

Стратегия IT-продукта. Почему must have и как составить. Опыт наших проектов

Reading time6 min
Views7.6K
За последние 2 года у нас, в EZTec, реализовано 37 IT-проектов для клиентов. Часть из них успешно работает до сих пор, другая часть закрылась. Ситуации и причины закрытия во многом уникальны, но имеют общие основания и предпосылки.

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

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

Организация рабочего процесса в команде на IT-проекте

Reading time9 min
Views26K
Привет друзья. Сплошь и рядом, особенно в аутсорсе, я вижу одну и ту же картину. Отсутствие четкого рабочего процесса в командах на различных проектах.

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

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

В свое время я как раз и попал на такой проект, где были все эти прелести.
Читать дальше →

Information

Rating
6,292-nd
Registered
Activity