• Индексы в PostgreSQL — 1

      Предисловие


      В этой серии статей речь пойдет об индексах в PostgreSQL.

      Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

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

      В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.

      Индексы


      Индексы в PostgreSQL — специальные объекты базы данных, предназначенные в основном для ускорения доступа к данным. Это вспомогательные структуры: любой индекс можно удалить и восстановить заново по информации в таблице. Иногда приходится слышать, что СУБД может работать и без индексов, просто медленно. Однако это не так, ведь индексы служат также для поддержки некоторых ограничений целостности.
      Читать дальше →
    • Deep Learning: Cочетание глубокой сверточной нейронной сети с рекуррентной нейронной сетью

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


      Читать дальше →
      • +25
      • 18.8k
      • 3
    • Что такое свёрточная нейронная сеть

      • Translation


      Введение


      Свёрточные нейронные сети (СНС). Звучит как странное сочетание биологии и математики с примесью информатики, но как бы оно не звучало, эти сети — одни из самых влиятельных инноваций в области компьютерного зрения. Впервые нейронные сети привлекли всеобщее внимание в 2012 году, когда Алекс Крижевски благодаря им выиграл конкурс ImageNet (грубо говоря, это ежегодная олимпиада по машинному зрению), снизив рекорд ошибок классификации с 26% до 15%, что тогда стало прорывом. Сегодня глубинное обучения лежит в основе услуг многих компаний: Facebook использует нейронные сети для алгоритмов автоматического проставления тегов, Google — для поиска среди фотографий пользователя, Amazon — для генерации рекомендаций товаров, Pinterest — для персонализации домашней страницы пользователя, а Instagram — для поисковой инфраструктуры.


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


      Задача


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


      Читать дальше →
    • Всё, что вы хотели узнать о RAID-контроллерах, но лень было искать



        Дисковый массив с нотками ретро.

        На плечах RAID-контроллеров лежит ответственная задача — управление дисковой подсистемой, то есть всей информацией, хранимой на сервере. Именно они отвечают за работу дисковых массивов, позволяя повысить производительность сервера или надёжность хранения данных. Поэтому давайте поговорим о RAID-контроллерах, установленных в серверы вендоров «большой тройки», об их возможностях и особенностях.
        Читать дальше →
      • Ansible: тестируем плейбуки (часть 2)

          Итак, в нашей прошлой статье мы рассмотрели как можно быстро и просто настроить среду для тестирования плейбуков и ролей Ansible. Это всё, конечно, очень хорошо и удобно, но почему бы нам не автоматизировать весь процесс внесения изменений в инфраструктуру от написания плейбука до внесения изменений на сервера?

          image

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

          1. Вся конфигурация хранится в git-репозитории;
          2. Jenkins периодически опрашивает git-репозиторий с нашими ролями/плейбуками на предмет внесённых изменений;
          3. При появлении изменений Jenkins запускает job с тестированием конфигурации. Тесты состоят из двух этапов:
          3.1 Kitchen-CI берёт обновленный код из репозитория, запускает полностью свежий docker-контейнер, заливает в них обновлённые плейбуки из репозитория и запускает Ansible локально, в docker-контейнере;
          3.2 Если первый этап прошёл успешно, в docker-контейнере запускается serverspec и проверяет, корректно ли встала новая конфигурация;
          4. Если в Kitchen-CI все тесты прошли успешно, то Jenkins инициирует заливку новой конфигурации.

          В идеале, весь процесс от написания плейбука и коммита в репозиторий до внесения изменений на сервера, должен проходить без нашего участия. Сильно углубляться в установку Jenkins и подробно расписывать о пайплайнах в данной статье не планируется. Первое делается без проблем из стандартных репозиториев, а второе — сугубо индивидуальное.
          Читать дальше →
        • Как работает реляционная БД

          • Translation
          • Tutorial
          Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

          На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
          Читать дальше →
        • Сделай сам: SQL JOIN на Java

          • Tutorial
          Я часто собеседую разработчиков и часто задаю им простой, как кувалда, вопрос — как внутри работает JOIN в SQL? В ответ я обычно слышу бессвязное мычание про волшебные деревья и индексы, которые быстрее. Когда-то мне казалось, что каждый программист специалист должен знать то, с чем работает. Впоследствии жизнь объяснила мне, что это не так. Но мне все еще не понятно, как можно годами теребить базёнку, даже не догадываясь, а что там у нее «под капотом»?

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

          SQL JOIN
          Читать дальше →
        • «Хранимые процедуры» в Redis

          • Tutorial
          image

          Многие знают про возможность хранить процедуры в sql базах данных, про это написано немало пухлых руководств и статей. Однако мало кто знает, что схожие возможности имеются и в Redis, начиная с версии 2.6.0. Но так как Redis не является реляционной БД, то и принципы описания хранимых процедур достаточно сильно отличаются. Хранимые процедуры в Redis — практически полноценные Lua скрипты (на момент написания статьи в качестве интерпретатора используется Lua 5.1).
          Подробности тут
        • Памятка евангелиста PostgreSQL: репликанты против репликации



            В продолжение серии публикаций «Памятка евангелиста PostgreSQL...» (1, 2) дорогая редакция снова выходит на связь, на этот раз с обещанным обзором механизмов репликации в PostgreSQL и MySQL. Главным поводом для написания послужила частая критика репликации MySQL. Как это часто бывает, типичная критика представляет из себя забористую смесь из правды, полуправды и евангелизма. Всё это многократно реплицируется разными людьми без особых попыток разобраться в услышанном. А поскольку это довольно обширная тема, я решил вынести разбор в отдельную публикацию.
            Читать дальше →
          • Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

              Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

              Если вы хотите убедиться что базы данных пишут не только на C, найти проекты для работы с большими данными или нейронными сетями, пишите свой язык программирования для JVM и хотите посмотреть как это уже сделано или же просто хотите узнать какие новые возможности можно найти в Java мире open-source то это статья вам, думаю, может пригодится.

              В чем смысл серии статей 'Шпаргалки Java программиста'
              За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.


              Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

              Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


              Читать дальше →
            • Akka, акторы и реактивное программирование

              • Translation
              Здравствуйте, уважаемые читатели.

              Сегодня мы хотели поговорить с вами на тему «все новое — это хорошо забытое старое» и вспомнить об акторах, описанных Карлом Хьюиттом еще в начале 70-х. А все дело в том, что недавно вышла вот такая книга:



              Она довольно объемная — в переводе должна получиться более 500 страниц.

              Несмотря на подчеркнутую элитарность книги (Akka и Scala), ее автор Вон Вернон (крупнейший специалист по DDD) уверен, что архитектурные паттерны, описанные в этой работе, вполне реализуемы на .NET и C#, о чем рассказывает в приложении. Мы же размещаем под катом перевод статьи, автор которой допускает перенос акторной парадигмы на язык Java. Поскольку рейтинг книги на Amazon стабильно высок, а тема универсальна, просим поделиться вашими мнениями как о ней, так и об акторной архитектуре в принципе.
              Читать дальше →
            • Строим real-time веб-приложения с RethinkDB

              • Translation
              От переводчика: Совсем недавно узнал про эту довольно интересную базу данных и как раз наткнулся на свежую статью. На Хабре нет почти ни слова о RethinkDB, в связи с чем было решено сделать этот перевод. Добро пожаловать под кат!

              image

              База данных RethinkDB упрощает разработку веб-приложений, рассчитанных на обновления в режиме реального времени.
              Читать дальше →
            • Apache Spark или возвращение блудного пользователя

                Продолжаем цикл статей про DMP и технологический стек компании Targetix.

                На это раз речь пойдет о применении в нашей практике Apache Spark и инструментe, позволяющем создавать ремаркетинговые аудитории.

                Именно благодаря этому инструменту, однажды посмотрев лобзик, вы будете видеть его во всех уголках интернета до конца своей жизни.
                Здесь мы и набили первые шишки в обращении с Apache Spark.

                Архитектура и Spark-код под катом.


                Читать дальше →
              • DMP часть 1. Микросегментирование аудитории с помощью ключевых слов

                  Авторы статьи: Данила Перепечин DanilaPerepechin, Дмитрий Чеклов dcheklov.

                  Здравствуйте.
                  Data management platform (DMP) — это наша любимая тема во всей истории про онлайн рекламу. RTB is all about the data.
                  В продолжение цикла рассказов о технологическом стеке Targetix (SSP, DSP), сегодня я опишу один из инструментов, входящих
                  в DMP — Keyword Builder.


                  Читать дальше →
                • Ваши вопросы о Data Science

                    Привет, хабр!

                    Мы перезапустили MLClass! — первое в России сообщество любителей Data Science

                    В связи с этим, как и обещал в статье Ваш персональный курс по Big Data, выкладываю ответы на самые часто задаваемые вопросы, которые возникают у людей, интересующихся Data Science и Big Data. Ответы даны лучшими практиками анализа данных: победителями Kaggle, сотрудниками многих компаний, внедряющих у себя Big Data решения и всеми, кто знает, что такое Data Science не понаслышке. Стоит отметить, что с каждым днем все больше людей в России (а также в странах СНГ) интересуются анализом данных, проходит все больше соревнований, хакатонов. Однако, до сих пор вокруг этой темы существуют большое количество мифов, которые я собираюсь развеять в этом посте!

                    Итак, я взял около 100 самых распространенных вопросов, выделили из них наиболее обсуждаемые, и прокомментировал каждый из наиболее подробно, чтобы вопросов больше не осталось!
                    Читать дальше →
                  • Как вычисляется среднее время до отказа и вероятность безотказной работы?

                      Понятиям MTTF (Mean Time To Failure — среднее время до отказа) и другим терминам теории надежности посвящено большое количество статей, в том числе на Хабре (см., например, тут). Вместе с тем, редкие публикации «для широкого круга читателей» затрагивают вопросы математической статистики, и уж тем более они не дают ответа на вопрос о принципах расчета надежности электронной аппаратуры по известным характеристикам ее составных элементов.

                      В последнее время мне довольно много приходится работать с расчетами надежности и рисков, и в этой статье я постараюсь восполнить этот пробел, отталкиваясь от своего предыдущего материала (из цикла о машинном обучении) о пуассоновском случайном процессе и подкрепляя текст вычислениями в Mathcad Express, повторить которые вы сможете скачав этот редактор (подробно о нем тут, обратите внимание, что нужна последняя версия 3.1, как и для цикла по machine learning). Сами маткадовские расчеты лежат здесь (вместе с XPS- копией).
                      Читать дальше →
                    • 10 вещей, которых вы не знали о Java

                      • Translation
                      Итак, вы работаете на Java с самого её появления? Вы помните те дни, когда она называлась «Oak», когда про ООП говорили на каждом углу, когда сиплюсплюсники думали, что у Java нет шансов, а апплеты считались крутой штукой?

                      Держу пари, что вы не знали как минимум половину из того, что я собираюсь вам рассказать. Давайте откроем для себя несколько удивительных фактов о внутренних особенностях Java.
                      Читать дальше →
                    • 1000+ часов видео по Java на русском

                      • Tutorial
                      Добрый день.
                      Меня зовут Головач Иван, я руковожу небольшой образовательной компанией и преподаю сам:
                      1. Java Core
                      2. Junior Java Developer: Servlet API, JDBC, Maven, JUnit, Mockito, Log4J, основы Spring/SpringMVC, основы JPA/Hibernate, шаблоны/архитектуры MVC/IoC/DAO.
                      3. Multicore programming in Java.


                      Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

                      В следствии этого у меня скопилось значительно количество ссылок на видео на русском языке по Java как моего авторства, так и моих коллег.

                      (GolovachCourses.com)


                      Здесь собраны несколько вариантов записи моего курса Java Core.
                      Модуль #1 (Procedural Java):
                      Набор июль 2013: #1, #2, #3, #4
                      Набор апрель 2013: #1, #2, #3, #4
                      Набор февраль 2013: #1, #2, #3, #4
                      Набор январь 2013: #1, #2, #3, #4
                      Набор октябрь 2012: #1, #2, #3, #4.
                      Читать дальше →
                      • +102
                      • 1131k
                      • 38
                    • Программа и материалы курса «Multicore programming in Java»

                      • Tutorial
                      Добрый день.
                      Меня зовут Головач Иван, я буду уже второй раз вести спецкурс-вебинар «Multicore programming in Java». В этой статье предлагаю на рассмотрение программу курса и наиболее полезные ссылки по вопросам многопоточности в Java.

                      Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

                      Кратко о курсе: стартует 1 сентября, ведется в режиме вебинаров дважды в неделю (понедельник + четверг) в 19.00-22.00 (по московскому времени), состоит из 16 лекций по 2.5 часа (=40 лекционных часов), рассчитан на Java Middle.

                      1. Модуль #1: Между hardware и New JMM
                      1.1 Программа модуля
                      1.2 Литература к модулю
                      2. Модуль #2: java.util.concurrent
                      2.1 Программа модуля
                      2.2 Литература к модулю
                      3. Модуль #3: Fork/Join Framework + Parallel Streams
                      3.1 Программа модуля
                      3.2 Литература к модулю
                      4. Модуль #4: “Неклассические архитектуры”
                      4.1 Программа модуля
                      4.2 Литература к модулю
                      Читать дальше →
                      • +17
                      • 31.4k
                      • 1
                    • Простой webdev на Java 8

                      Хочу рассказать о том, как мне пришла в голову идея заняться веб-разработкой на Java.

                      Итак, как только я созрел для этого дела, составил небольшой список, которому должны соответствовать выбранные мною инструменты разработки:
                      • Сборка при помощи maven;
                      • Простой процесс деплоя и запуска;
                      • Библиотеки должны быть легковесны;
                      • Возможность использования шаблонизатора.

                      Усиленно погуглив, я нашел то, что мне нужно: Spark, jade4j и OrmLite.

                      Итак, инструменты выбраны, рассмотрим каждый из них в отдельности.
                      Читать дальше →