Приручаем многопоточность в Node.js (часть 1: базовые концепты)

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

Как мы обучали тестировщиков автоматизации и что из этого вышло

В статье расскажем, как обучали автоматизации наших мануальных тестировщиков: что было сделано, какие подводные камни всплыли и как мы теперь живем. Статья будет интересна тем, кто занимается управлением QA, надеется быстро переквалифицироваться с manu…

Эффективная FIFO-обработка для Node.js и Chrome

«По классике» FIFO-очередь для обработки некоторого потока задач обычно реализуется в виде связанного списка элементов. Но для JavaScript такой подход нехорош — он требует либо создания «обвязки» над элементом очереди в виде дополнительного объекта, со…

PostgreSQL Antipatterns: где скаляру в GiST место?

В PostgreSQL есть «волшебный» тип индекса GiST, который позволяет быстро искать разные сложные вещи — от интервалов до массивов и даже реализовывать полнотекстовый поиск.Про его внутреннее устройство и возможности подробно рассказывал Егор Рогов, а я в…

Self-hosted EXPLAIN: наглядно и безопасно

С момента первой же хабрапубликации о возможностях нашего сервиса визуализации планов запросов PostgreSQL explain.tensor.ru (а было это уже больше 2 лет назад) пользователи задавали резонный вопрос: «Все у вас круто, но у нас в запр…

SQL HowTo: наперегонки со временем

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

PostgreSQL Antipatterns: куда крутить NULLS

Периодически приходится разбирать случаи внезапного промаха запроса мимо «вроде бы подходящего» индекса — а все дело оказывается в чуть-чуть не той сортировке. Читать далее…

SQL HowTo: обход дерева иерархии «по курсору» через двойную рекурсию

В предыдущих статьях «PostgreSQL Antipatterns: навигация по реестру», «PostgreSQL 13: happy pagination WITH TIES» и «SQL HowTo: курсорный пейджинг с неподходящей сортировкой» я уже рассматривал проблемы навигации по данным, представленных в виде плоско…

«Ленивый сахар» PostgreSQL

SQL — декларативный язык — то есть вы описываете «что» хотите получить, а СУБД сама решает, «как» именно она будет это делать. Некоторые из них при этом позволяют им «подсказывать», как именно лучше выполнять запрос, но PostgreSQL — нет.Тем не менее, «…

PostgreSQL Antipatterns: когда мешает внешний ключ

Внешние ключи (foreign keys) — мощный и удобный механизм контроля логической целостности данных в базе. Но он бывает не только лишь полезен, и может неплохо пригрузить вашу БД.Внимательный взгляд на план запроса поможет избежать многих проблем — как пр…