Pull to refresh
-11
0
Send message

Индексы в PostgreSQL — 3

Reading time9 min
Views74K

В первой статье мы рассмотрели механизм индексирования PostgreSQL, во второй — интерфейс методов доступа, и теперь готовы к разговору о конкретных типах индексов. Начнем с хеш-индекса.

Hash


Устройство


Общая теория


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

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

Идея хеширования состоит в том, чтобы значению любого типа данных сопоставить некоторое небольшое число (от 0 до N−1, всего N значений). Такое сопоставление называют хеш-функцией. Полученное число можно использовать как индекс обычного массива, куда и складывать ссылки на строки таблицы (TID). Элементы такого массива называют корзинами хеш-таблицы — в одной корзине могут лежать несколько TID-ов, если одно и то же проиндексированное значение встречается в разных строках.

Хеш-функция тем лучше, чем равномернее она распределяет исходные значения по корзинам. Но даже хорошая функция будет иногда давать одинаковый результат для разных входных значений — это называется коллизией. Так что в одной корзине могут оказаться TID-ы, соответствующие разным ключам, и поэтому полученные из индекса TID-ы необходимо перепроверять.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments14

Используем все возможности индексов в PostgreSQL

Reading time8 min
Views24K

В мире Postgres индексы крайне важны для эффективной навигации по хранилищу базы данных (его называют «куча», heap). Postgres не поддерживает для него кластеризацию, и архитектура MVCC приводит к тому, что у вас накапливается много версий одного и того же кортежа. Поэтому очень важно уметь создавать и сопровождать эффективные индексы для поддержки приложений.

Предлагаю вашему вниманию несколько советов по оптимизации и улучшению использования индексов.

Примечание: показанные ниже запросы работают на не модифицированном образце базы данных pagila.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments3

Travel hacking: Покупаем билеты выгодно

Reading time7 min
Views6.8K

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

Ноябрь — время планирований путешествия на Новый год, как домой, так и на отдых. Покупать билеты можно по-разному. Можно потратить 250000 рублей на полет в Турцию, а можно за 7000 слетать в Таиланд. Так как новогодние перелеты часто «гибкие», можно перебирать разные варианты и системы бронирований, чтобы найти оптимальные даты и пункт назначения. И именно о последних интересностях, а также советах из моих поисков и других путешественников, кто помогал в создании этой статьи, эта статья.

Поехали!
Total votes 15: ↑12 and ↓3+9
Comments16

TypeScript в деталях. Часть 1

Reading time6 min
Views26K


Привет, друзья!


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


Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments9

Оптимизация производительности ssr-приложений

Reading time12 min
Views12K

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


Не буду пересказывать рекламные лозунги про 500% пользователей покидают страницу после 100мс ожидания, увелечения конверсии на 20% при снижении LCP на 2мс… читайте сами. Скажу коротко: метрики производительности важны.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments4

Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Reading time7 min
Views700K
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Читать дальше →
Total votes 212: ↑212 and ↓0+212
Comments352

Улучшение производительности vue приложения

Reading time8 min
Views18K

У нас в TeamHood есть wiki. Там собралась коллекция рекомендаций, в том числе, по улучшению производительности тяжелого фронтенда на vue.js. Улучшать производительность понадобилось, потому что в силу специфики наши основные экраны не имеют пагинации. Есть клиенты, у которых на одной kanban/gantt доске больше тысячи вот таких вот карточек, все это должно работать без лагов.

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

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments5

Предсказываем финансовые кризисы с помощью Python

Reading time12 min
Views20K
По состоянию на 9 марта 2020 мы имеем резкое снижение рынков США начиная с исторического максимума в 20-числах февраля 2020, которое на данный момент составило около -16%. Новости пестрят заголовками про надвигающуюся рецессию из-за коронавируса, Россия вышла из сделки Опек+, что ударило по ценам на нефть (-20% за день) и завтра, (10 марта 2020) ожидается снижение рынка ММВБ также на 20%, судя по котировкам наших акций на западных рынках.


Ждет ли нас глобальная рецессия? В этой статье мы попробуем разобраться как можно заранее увидеть сигналы начала рецессии средствами Python.
Читать дальше
Total votes 18: ↑17 and ↓1+16
Comments38

Laravel+Docker+Gitlab. С чего начать

Reading time19 min
Views36K
Я обычно всегда обходился без докера и думал, что докер нужен только для больших проектов в больших компаниях. Но однажды я увидел как работает докер в паре с гитлабом у моего товарища и понял, что мне все таки стоит его изучить. Однако, как обычно это бывает, одной подходящей статьи я не нашел — они были либо слишком сложные, либо не полные, либо подразумевали, что вы все знаете само собой. Мне пришлось долго искать различные источники, соединять все это вместе и в итоге у меня получилось сделать простенький проект и CI/CD для него.

Всю работу можно разделить на три части: на локальной машине, на гитлабе и на сервере.

Итак, для реализации проекта нам понадобится аккаунт gitlab и удаленный сервер с виртуализацией KVM или XEN.

Часть 1. Локальная машина


На локальной машине необходимо установить docker.

Замечание
Тут небольшое отступление. Docker можно поставить как на Linux системах (как Ubuntu, например), так и на Windows и MacOS. По поводу macos я ничего сказать не могу, а вот установка под Windows не самая хорошая идея для начинающего. Как минимум из-за того, что все мануалы и документации написаны для linux систем. Так и из-за того, что можно нажить проблем с доступом к различным папкам и файлам. Также докер конфликтует с виртуальной машиной VirtualBox. Поэтому проще и быстрее будет сделать виртуальную машину с Ubuntu и работать под ней
Total votes 16: ↑14 and ↓2+12
Comments26

Как я самостоятельно выучил новый язык за 12 месяцев: тотальный гайд

Reading time31 min
Views154K
От А0 до B2 за год

Чуть больше года назад я был полностью монолингвом, говорящем только на английском, с нулевыми познаниями во французском языке. А спустя двенадцать месяцев, я с лёгкостью сдал международный экзамен DELF B2. Если вы не знаете, что значит «В2», посмотрите шкалу CEFR.

Более того, все мои успехи — это результат домашнего обучения и практики. Моё обучение было полностью самостоятельным, без каких-либо специальных учебных программ. Это стало возможным только благодаря множеству удивительных ресурсов, доступных в Интернете, многие из которых бесплатны. Немаловажно, такой результат был достигнут потому, что я отдавал предпочтение продуктивному общению, в частности, проводя много времени за разговорами с теми, кто хорошо знает французский.

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

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

  • Беседа на французском в течение нескольких часов;
  • Понимание различных видов французских СМИ (например, новости и видео на YouTube);
  • Чтение статей, написанных для носителей французского языка;
  • Построение мыслей на французском;

Конечно, я всё ещё очень далёк от уровня носителя. У меня точно есть слабые места, и я не могу выражаться на французском так же хорошо, как на английском. Тем не менее, я очень даже доволен своим уровнем владения французским и думаю, что многие изучающие язык тоже были бы довольны.
Читать дальше →
Total votes 50: ↑47 and ↓3+44
Comments91

«Красная» корпоративная культура — главная проблема российского бизнеса (Часть 1)

Reading time6 min
Views99K


«— Скажите, пожалуйста, куда мне отсюда идти? — А куда ты хочешь попасть? — ответил Кот. — Мне все равно… — сказала Алиса. — Тогда все равно, куда и идти, — заметил Кот.» (С) «Алиса в стране чудес»

Низкая производительность труда в России


Думаю, что те из вас, кто был в Греции, ни за что не согласятся, что греки работают лучше россиян. Тем не менее, по исследованиям Организации экономического сотрудничества и развития (ОСЭР) Россия со своим показателем производительности труда на уровне $26,5 в час уступает всем странам ОЭСР (по сути все развитые страны), включая Грецию, кроме Мексики, где он составляет $21,6. Средний для ОЭСР показатель — $54,8, а у лидеров — Ирландии и Люксембурга — на уровне $99 в час.
Читать дальше →
Total votes 142: ↑125 and ↓17+108
Comments524

«Красная» корпоративная культура – главная проблема российского бизнеса (Часть 2)

Reading time10 min
Views50K
image

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

Система 5С Юрского периода


Хочу привести случай из своей практики. На одном из предприятий промышленной компании новое руководство с помпой объявило о внедрении Бережливого производства. Много говорилось о том, как этот новый подход выведет предприятие на новый уровень эффективности. И первым инструментом БП для внедрения была выбрана система 5С на пилотном участке производственного склада.

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

— Так это мы уже один раз внедряли 5С три года назад! – радостно пояснил начальник участка, увидев немой вопрос в моих глазах. – Просто со временем как-то всё забылось…

Я поинтересовался, а нужно ли внедрять этот инструмент, если он всё равно его не применяет.

«Ну как же не внедрять? Дело-то хорошее», — ответил он.

Читать дальше →
Total votes 86: ↑79 and ↓7+72
Comments96

Альтернативное управление окнами в Linux

Reading time9 min
Views31K

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


А ещё я не хочу при переключении окон искать их иконки на панели задач, ловить взглядом названия при листании через Alt+Tab, листать рабочие столы и т. д. Я хочу нажать комбинацию клавиш (в идеале вообще одну, но свободных ненужных клавиш уже нет) и сразу попасть в нужное мне окно. Например так:


  • Alt+F: Firefox
  • Alt+D: Firefox (Private Browsing)
  • Alt+T: Terminal
  • Alt+M: Калькулятор
  • Alt+E: IntelliJ Idea
  • и т. д.

Причём, по нажатию, например, на Alt+M я хочу видеть калькулятор вне зависимости от того, запущена ли в данный момент эта программа. Если запущена, то её окну надо передать фокус, а если нет — запустить нужную программу и передать фокус когда она загрузится.


На случаи, которые не покрываются предыдущим сценарием, я хочу иметь универсальные комбинации клавиш, на которые можно легко назначить любые из открытых окон. Например, у меня назначены 10 комбинаций от Alt+1 до Alt+0, которые не привязанные ни к каким программам. Я могу просто нажать Alt+1 и окно, которое сейчас в фокусе, будет получать фокус при нажатии Alt+1.


Под катом описание ещё пары фич и ответ на то, как можно это сделать. Но сразу предупрежу, что подобная кастомизация «под себя» может вызвать сильную зависимость и даже ломку при необходимости использовать Windows, Mac OS или даже чужой компьютер с Linux.

Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments54

Как Программисту 1С стать Java developer'ом

Reading time8 min
Views28K
Несколько лет назад, когда я искал пути из программистов 1С в Java developer'ы — я бродил впотьмах, пытаясь нащупать дверь, в существовании которой был не уверен. Я пытался найти истории успеха, но кроме пары комментариев ничего не нагуглил. Мир Java выглядел огромным, а количество фрэймворков бесконечным. Было совершенно непонятно: что учить, что не учить, что нужно в работе, а что никто не использует. Если ты хочешь в Джаву, теряешься в бесконечных названиях технологий и фрэймворков и хочешь узнать какие же из них надо изучать, а на какие не обращать внимания — эта статья для тебя!


Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments209

Как заговорить на английском через месяц. 9 простых и проверенных шагов

Reading time8 min
Views390K
Хабр, привет!

Меня зовут Марина Могилко, я кофаундер онлайн-платформы LinguaTrip.com.

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

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

Итак, начинаем! Осторожно: под катом мини-словарик на все случаи жизни.

image
Total votes 99: ↑64 and ↓35+29
Comments184

Как собеседовать работодателя?

Reading time4 min
Views46K
У программистов обычно принято обсуждать собеседования с точки зрения (около)технических вопросов, которые им задает интервьювер.

Надо ли писать код на доске? Надо ли жонглировать бинарными деревьями и знать наизусть все сложности алгоритмов, или просто разговаривать про жизнь и проекты?

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

Читать дальше →
Total votes 85: ↑77 and ↓8+69
Comments63

Полезные расширения Google Chrome для программиста

Reading time4 min
Views39K
Работа программиста настолько сложна и разнообразна, что в ней просто не обойтись без помощи различных инструментов. Подготовил список из 34 полезных расширений Google Chrome, которые облегчат вашу жизнь и сэкономят время.

image

1. Octotree

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

2. PerfectPixel by WellDoneCode

Это расширение позволяет разработчикам накладывать изображения полупрозрачным слоем поверх HTML и делать попиксельное сравнение.

3. GitHub Repository Size

Удобный и простой плагин, отображающий как объем отдельного репозитория, так и размер кажого файла в нем.
Читать дальше →
Total votes 35: ↑26 and ↓9+17
Comments11

Измеряем концентрацию CO2 в квартире с помощью MH-Z19

Reading time4 min
Views97K
Практически любая метеостанция, включая дешевые китайские модели за несколько долларов, умеет измерять основные параметры воздуха — температуру и влажность. С углекислым газом все сложнее: бытовых приборов, способных его измерять, практически нет в продаже. Усложняет ситуацию и то, что CO2 — газ без цвета и запаха, так что «носом» ощутить его концентрацию практически невозможно.

Подробности и измерения под катом.
Читать дальше →
Total votes 18: ↑14 and ↓4+10
Comments59

Подкасты для хипстеров #2

Reading time2 min
Views2.9K
Согласно опросу, проведенному после написания первой статьи рубрики «Подкасты для хипстеров» токсичная своенравная публика Хабра приняла ее довольно положительно и захотела продолжения (на момент написания данной статьи, рейтинг предыдущей составляет +3, что несомненно можно считать грандиозным успехом).



Во втором выпуске этой наипопулярнейшей рубрики я решил рассказать про подкаст о web-разработке «uWebDesign (Суровый веб)».
Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments10

Continuous integration в Яндексе. Часть 2

Reading time11 min
Views12K

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


Сегодня мы расскажем читателям Хабра про устройство системы непрерывной интеграции.


image


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

Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments3
1

Information

Rating
5,002-nd
Registered
Activity