Как стать автором
Обновить
1
Карма
0
Рейтинг

Прграммист

Индексы в PostgreSQL — 5

Блог компании Postgres Professional PostgreSQL *SQL *

В прошлые разы мы рассмотрели механизм индексирования PostgreSQL, интерфейс методов доступа, и два метода: хеш-индекс и B-дерево. В этой части займемся индексами GiST.

GiST


GiST — сокращение от «generalized search tree». Это сбалансированное дерево поиска, точно так же, как и рассмотренный ранее b-tree.

В чем же разница? Индекс b-tree жестко привязан к семантике сравнения: поддержка операторов «больше», «меньше», «равно» — это все, на что он способен (зато способен очень хорошо!). Но в современных базах хранятся и такие типы данных, для которых эти операторы просто не имеют смысла: геоданные, текстовые документы, картинки…

Тут на помощь и приходит индексный метод GiST. Он позволяет задать принцип распределения данных произвольного типа по сбалансированному дереву, и метод использования этого представления для доступа по некоторому оператору. Например, в GiST-индекс можно «уложить» R-дерево для пространственных данных с поддержкой операторов взаимного расположения (находится слева, справа; содержит и т. п.), или RD-дерево для множеств с поддержкой операторов пересечения или вхождения.

За счет расширяемости в PostgreSQL вполне можно создать совершенно новый метод доступа с нуля: для этого надо реализовать интерфейс с механизмом индексирования. Но это требует продумывания не только логики индексации, но и страничной структуры, эффективной реализации блокировок, поддержки журнала упреждающей записи — что подразумевает очень высокую квалификацию разработчика и большую трудоемкость. GiST упрощает задачу, беря на себя низкоуровневые проблемы и предоставляя свой собственный интерфейс: несколько функций, относящихся не к технической сфере, а к прикладной области. В этом смысле можно говорить о том, что GiST является каркасом для построения новых методов доступа.
Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Просмотры 51K
Комментарии 8

Golang и эволюция взаимодействия с базами данных

Go *
Из песочницы

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


  • Снижение связности приложения, работающего с базой данных
  • Журналирование запросов в отладочном режиме
  • Работа с репликами

Статья построена на основании пакета github.com/adverax/echo/database/sql. Семантика использования этого пакета максимально приближена к стандартному пакету database/sql, поэтому не думаю, что при его использовании у кого-нибудь возникнут проблемы.

Читать дальше →
Всего голосов 19: ↑13 и ↓6 +7
Просмотры 17K
Комментарии 4

Резюме с фотографией летит в урну. Особенности поиска работы в США

IT-эмиграция Управление персоналом *Карьера в IT-индустрии Изучение языков
Привет Хабр! Меня зовут Марина Могилко. Я уже четыре года живу в США и развиваю LinguaTrip.com — онлайн-платформу по бронированию языковых курсов. В основном мы помогаем с учёбой — выучить английский или поступить в зарубежный вуз, но периодически просят помочь и с работой за границей. Мы не занимаемся трудоустройством, но знаем, как попасть в хорошую компанию в США. В целом секрет прост — прокачайте профиль в LinkedIn, продайте себя через резюме и произведите хорошее впечатление на собеседовании. Как это сделать, рассказываем под катом.

image
Всего голосов 59: ↑20 и ↓39 -19
Просмотры 21K
Комментарии 44

Go-swagger как основа взаимодействия микросервисов

Блог компании VK Блог компании Delivery Club Tech Go *Микросервисы *


Здравствуй, NickName! Если ты программист и работаешь с микросервисной архитектурой, то представь, что тебе нужно настроить взаимодействие твоего сервиса А с каким-то новым и ещё неизвестным тебе сервисом Б. Что ты будешь делать в первую очередь?

Если задать такой вопрос 100 программистам из разных компаний, скорее всего, мы получим 100 разных ответов. Кто-то описывает контракты в swagger, кто-то в gRPC просто делает клиенты к своим сервисам без описания контракта. А кто-то и вовсе хранит JSON в гуглодоке :D. В большинстве компаний складывается свой подход к межсервисному взаимодействию на основании каких-либо исторических факторов, компетенций, стека технологий и прочего. Я хочу рассказать, как сервисы в Delivery Club общаются друг с другом и почему мы сделали именно такой выбор. И главное — как мы обеспечиваем актуальность документации с течением времени. Будет много кода!
Читать дальше →
Всего голосов 35: ↑33 и ↓2 +31
Просмотры 18K
Комментарии 24

Чистая архитектура с Go

Блог компании Конференции Олега Бунина (Онтико) Блог компании Space307 Высокая производительность *Программирование *Go *
Меня зовут Эдгар (ZergsLaw), я работаю в компании, которая занимается  финтех-разработкой для b2b и b2c. Когда только устроился в компанию, то попал в команду большого финтех-проекта и получил «в нагрузку» небольшой микросервис. Мне поручили его изучить и подготовить план рефакторинга, чтобы в дальнейшем выделить отдельную команду поддержки для сервиса.



«Мой» сервис — это proxy между определенными модулями большого проекта. На первый взгляд изучить его можно за один вечер и браться за дела поважнее. Но приступив к работе я понял, что ошибся. Сервис был написан полгода назад за пару недель с задачей протестировать MVP. Всё это время он отказывался работать: терял события и данные, или переписывал их. Проект перекидывали из команды в команду, потому что никто не хотел им заниматься, даже его создатели. Теперь стало ясно почему под него искали отдельного программиста.

«Мой» сервис — это пример плохой архитектуры и изначально неправильного проектирования. Все мы понимаем, что так делать нельзя. Но почему нельзя, к каким последствиям это приводит и как попытаться все исправить, я и расскажу.
Читать дальше →
Всего голосов 20: ↑15 и ↓5 +10
Просмотры 21K
Комментарии 26

Деплоим проект на Kubernetes в Mail.ru Cloud Solutions. Часть 1: архитектура приложения, запуск Kubernetes и RabbitMQ

Блог компании VK Блог компании Ребреин Облачные вычисления *DevOps *Kubernetes *

О Kubernetes и его роли в построении микросервисных приложений известно, пожалуй, большинству современных IT-компаний. Однако при его внедрении часто возникает вопрос — какой вариант установки выбрать: Self-Hosted или Managed-решение от одного из облачных провайдеров. О недостатках первого варианта, думаю, известно всем, кто проходил через ручное конфигурирование K8s: сложно и трудоемко. Но в чем лучше Cloud-Native подход?

Я Василий Озеров, основатель агентства Fevlake и действующий DevOps-инженер (опыт в DevOps — 8 лет), покажу развертывание Kubernetes-кластера на базе облака Mail.ru Cloud Solutions. В этом цикле статей мы создадим MVP для реального приложения, выполняющего транскрибацию видеофайлов из YouTube. 

Читать далее
Всего голосов 30: ↑30 и ↓0 +30
Просмотры 11K
Комментарии 5

Заблуждения Clean Architecture

Блог компании MobileUp Программирование *Разработка мобильных приложений *Проектирование и рефакторинг *Разработка под Android *
Превращаем круги в блоки

­­ 


На первый взгляд, Clean Architecture – довольно простой набор рекомендаций к построению приложений. Но и я, и многие мои коллеги, сильные разработчики, осознали эту архитектуру не сразу. А в последнее время в чатах и интернете я вижу всё больше ошибочных представлений, связанных с ней. Этой статьёй я хочу помочь сообществу лучше понять Clean Architecture и избавиться от распространенных заблуждений.

Читать дальше →
Всего голосов 58: ↑56 и ↓2 +54
Просмотры 345K
Комментарии 200

Интеграция Jira с GitLab

IT-инфраструктура *
Из песочницы

Цель


При коммите в git упоминаем в комментарии какую-либо задачу из Jira по имени, после чего происходит две вещи:

  • в GitLab название задачи превращается в активную ссылку на нее в Jira

  • в Jira к задаче добавляется комментарий со ссылками на коммит и пользователя, его совершившего, а также добавляется сам текст упоминания
Читать дальше →
Всего голосов 17: ↑15 и ↓2 +13
Просмотры 36K
Комментарии 6

Паттерн: Сага

Микросервисы *
Из песочницы

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pattern: Saga" автора Chris Richardson.


Ситуация


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


Например: давайте представим, что мы разрабатываем интернет магазин, где у клиента есть кредитный лимит. Приложение должно гарантировать, что новый заказ не превышает кредитный лимит клиента. Так как Заказы и Клиенты — различные базы данных, то приложение не может использовать локальные ACID транзакции.


Проблема


Как обеспечить согласованность данных между сервисами?


Решение


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


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


Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 83K
Комментарии 10

Работа с кластером Proxmox: установка, настройка сети, ZFS, решение распространенных проблем

Настройка Linux **nix *Виртуализация *
Туториал
За последние несколько лет я очень тесно работаю с кластерами Proxmox: многим клиентам требуется своя собственная инфраструктура, где они могут развивать свой проект. Именно поэтому я могу рассказать про самые распространенные ошибки и проблемы, с которыми также можете столкнуться и вы. Помимо этого мы конечно же настроим кластер из трех нод с нуля.

Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 104K
Комментарии 36

Похек Wi-Fi встроенными средствами macOS

Информационная безопасность *Беспроводные технологии *
Туториал


TL;DR Встроенные средства macOS позволяют выполнить некоторые атаки на Wi-Fi-сети. В статье описывается, как с помощью встроенного в Macbook Wi-Fi адаптера AirPort и macOS похекать Wi-Fi.

Обычно для аудита безопасности Wi-Fi-сетей используется классическая связка: виртуалка с Kali Linux + внешний USB адаптер типа Alfa AWU-blabla1337. Но оказывается, что с помощью macOS и встроенного адаптера Broadcom тоже можно делать грязь.

Содержимое статьи:

  • Мониторный режим на встроенном адаптере
  • Расшифровываем WPA трафик
  • Ловим хендшейки и PMKID
  • Собираем под макось пацанские тулзы: hcxtools, hashcat, bettercap
  • Брутим хеши на онлайн-фермах и локально

Йоу, камон мазафака
Всего голосов 63: ↑62 и ↓1 +61
Просмотры 52K
Комментарии 29

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

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


Читать дальше →
Всего голосов 32: ↑28 и ↓4 +24
Просмотры 26K
Комментарии 208

Мой первый опыт восстановления базы данных Postgres после сбоя (invalid page in block 4123007 of relatton base/16490)

Системное администрирование *PostgreSQL *Администрирование баз данных *
Хочу поделиться с вами моим первым успешным опытом восстановления полной работоспособности базы данных Postgres. С СУБД Postgres я познакомился пол года назад, до этого опыта администрирования баз данных у меня не было совсем.



Я работаю полу-DevOps инженером в крупной IT-компании. Наша компания занимается разработкой программного обеспечения для высоконагруженных сервисов, я же отвечаю за работоспособность, сопровождение и деплой. Передо мной поставили стандартную задачу: обновить приложение на одном сервере. Приложение написано на Django, во время обновления выполняются миграции (изменение структуры базы данных), и перед этим процессом мы снимаем полный дамп базы данных через стандартную программу pg_dump на всякий случай.

Во время снятия дампа возникла непредвиденная ошибка (версия Postgres – 9.5):

pg_dump: Oumping the contents of table “ws_log_smevlog” failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: invalid page in block 4123007 of relatton base/16490/21396989
pg_dump: The command was: COPY public.ws_log_smevlog [...]
pg_dunp: [parallel archtver] a worker process dled unexpectedly

Ошибка «invalid page in block» говорит о проблемах на уровне файловой системы, что очень нехорошо. На различных форумах предлагали сделать FULL VACUUM с опцией zero_damaged_pages для решения данной проблемы. Что же, попрробеум…
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 31K
Комментарии 35

Один из методов получения истории блокировок в PostgreSQL

PostgreSQL *Администрирование баз данных *
Продолжение статьи "Попытка создать аналог ASH для PostgreSQL ".

В статье будет рассмотрено и показано на конкретных запросах и примерах — какую же полезную информацию можно получить с помощью истории представления pg_locks.
Предупреждение.
В связи с новизной темы и незавершением периода тестирования, статья может содержать ошибки. Критика и замечания всячески приветствуются и ожидаются.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 2.1K
Комментарии 0

OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%

Настройка Linux *Nginx *Серверная оптимизация *
Туториал


Много где написано о том, как получить 100% и A+ по тесту от Qualys. При всём при том практически везде директивы ssl_ciphers и подобные даются как эдакие магические строки, которые нужно просто вставить, и надеяться, что автор не подводит вас под монастырь. Эта статья призвана исправить это недоразумение. По прочтению этой статьи директива ssl_ciphers потеряет для вас всякую магию, а ECDHE и AES будут как друзья да братья.


Также вы узнаете почему 100% по тестам — не всегда хорошо в реальности.

Читать дальше →
Всего голосов 66: ↑65 и ↓1 +64
Просмотры 76K
Комментарии 93

Введение в систему модулей Go

Go *
Перевод

Грядущий релиз версии 1.11 языка программирования Go принесет экспериментальную поддержку модулей — новую систему управления зависимостями для Go. (прим.перев.: релиз состоялся)


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


Итак, вот, что мы будем делать: создадим новый пакет и потом сделаем несколько релизов, чтобы посмотреть, как это работает.

Читать дальше →
Всего голосов 34: ↑32 и ↓2 +30
Просмотры 140K
Комментарии 49

Начинающему веб-мастеру: делаем одностраничник на Bootstrap 4 за полчаса

Блог компании RUVDS.com Разработка веб-сайтов *JavaScript *jQuery *
Перевод
Фреймворк Bootstrap — это свободный набор инструментов для создания интерфейсов сайтов и веб-приложений. Его возможности ориентированы исключительно на фронтенд-разработку. Bootstrap — проект весьма популярный, о чём, например, говорит то, что он занимает (по состоянию на начало марта 2018-го года) второе место по количеству звёзд на GitHub.


Если вы хотите освоить Bootstrap, в частности, его самую свежую, четвёртую версию, значит, этот материал подготовлен специально для вас. Здесь, на небольшом сквозном примере, который реально освоить за полчаса, будут продемонстрированы основы Bootstrap, разобравшись с которыми вы вполне сможете сделать что-то своё, использовав этот фреймворк.
Читать дальше →
Всего голосов 40: ↑31 и ↓9 +22
Просмотры 185K
Комментарии 42

Написание blockchain менее чем за 200 строк кода на Go

Go *
Туториал

Привет, Хабр! Представляю вашему вниманию перевод статьи "Code your own blockchain in less than 200 lines of Go!".


image

Данный урок является хорошо адаптированным постом про простое написание blockchain на Javascript. Мы портировали его на Go и добавили дополнительных фич, таких как просмотр цепочек в браузере.

Читать дальше →
Всего голосов 40: ↑33 и ↓7 +26
Просмотры 30K
Комментарии 19

Blockchain на Go. Часть 1: Прототип

Go *
Туториал
Перевод

Содержание


  1. Blockchain на Go. Часть 1: Прототип
  2. Blockchain на Go. Часть 2: Proof-of-Work
  3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
  4. Blockchain на Go. Часть 4: Транзакции, часть 1
  5. Blockchain на Go. Часть 5: Адреса
  6. Blockchain на Go. Часть 6: Транзакции, часть 2
  7. Blockchain на Go. Часть 7: Сеть

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


В этой серии уроков мы создадим, основанную на блокчейне, упрощенную криптовалюту. В качестве языка используем Go.

Читать дальше →
Всего голосов 35: ↑24 и ↓11 +13
Просмотры 30K
Комментарии 5

Лёгкий «Frontend» на Golang для ручного тестирования Ethereum смарт контракта без JavaScript и Web3

Go *
Из песочницы

Привет!


У меня возникла идея разработать надеюсь простое решение, для ручного тестирования смарт контрактов Ethereum. Стало интересно сделать, что-то похожее на функционал вкладки Run в Remix.

Читать дальше →
Всего голосов 19: ↑14 и ↓5 +9
Просмотры 6.2K
Комментарии 0

Информация

В рейтинге
Не участвует
Откуда
Зеленогорск (Красноярский край), Красноярский край, Россия
Зарегистрирован
Активность