• Применение машинного обучения для увеличения производительности PostgreSQL

      image

      Машинное обучение занимается поиском скрытых закономерностей в данных. Растущий рост интереса к этой теме в ИТ-сообществе связан с исключительными результатами, получаемыми благодаря ему. Распознавание речи и отсканированных документов, поисковые машины — всё это создано с использованием машинного обучения. В этой статье я расскажу о текущем проекте нашей компании: как применить методы машинного обучения для увеличения производительности СУБД.
      В первой части этой статьи разбирается существующий механизм планировщика PostgreSQL, во второй части рассказывается о возможностях его улучшения с применением машинного обучения.

      Читать дальше →
      • +43
      • 20,2k
      • 6
    • Доступ к таблицам из Си расширений для Postgres

      • Tutorial

      Всем привет!


      В этот раз я расскажу не про использование Python или очередной трюк с CSS/HTML и, увы, не про то, как я 5 лет портировал Вангеры, а про один важный аспект написания расширений для замечательной СУБД PostgresSQL.

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

      К таблицам из Си можно получить доступ через хорошо описанный но медленный SPI (Server Programming Interface), также есть очень сложный способ, через буферы, а я расскажу про компромиссный вариант. Под катом я постарался дать примеры кода с подробными пояснениями.
      Читать дальше →
      • +21
      • 8,6k
      • 3
    • PostgreSQL на многоядерных серверах Power 8


        Аннотация


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

        Введение


        В ряде задач практически неограниченного масштабирования по объему обрабатываемых транзакций можно достичь, используя распределённые системы, в которых тем или иным способом поток транзакций распределяется на большое количество серверов. Такое масштабирование часто называют “горизонтальным”. Однако, универсального распределенного решения не существует, кроме того, распределённость имеет свою цену. Архитектура системы должна заранее проектироваться как распределённая. Распределенные системы менее гибки, чем монолитные, к тому же они сложнее в эксплуатации и требуют более высокой квалификации персонала. Одни задачи легче поддаются распараллеливанию, другие — сложнее. Поэтому спрос на высокопроизводительные монолитные системы существует, и достижение возможно лучших результатов по производительности в рамках одного сервера было и остается важной задачей. Это часто называют “вертикальным масштабированием”.

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

        Для решения таких проблем существуют механизмы управления доступом к ресурсам — использование блокировок, а также пригодные в некоторых случаях неблокирующие (lock-free) подходы. Рост производительности этих механизмов, а также детализация блокировок дает возможность снизить издержки, связанные с одновременным (конкурентным) доступом.

        При этом, если в распределённых системах узким местом оказывается, как правило, сеть, то в монолитных системах, близких к пиковой производительности, её рост ограничивается именно упомянутыми механизмами управления одновременным доступом.
        Читать дальше →
      • Перевод: Один год с Go

        • Перевод
        Под катом — перевод статьи опытного разработчика о его опыте практического применения Go. Важно — мнение переводчика может не совпадать с мнением автора статьи.



        почитать что он там пишет
      • Количественные CSS селекторы

        • Перевод
        Вам когда-нибудь хотелось прямо в CSS коде посчитать, в меню 4 элемента или 10? Для четырех задать им ширину по 25%, а если набралось десять — прижать их друг к другу и уменьшить отступы?
        Как выяснилось, CSS умеет работать с разным количеством элементов, позволяя избавиться от головных болей и лишнего кода на js.


        Читать дальше →
      • Интересный и одновременно простой слайдер на чистом CSS3

        Я никому не открою Америку, не удивлю публику новым фокусом и не взорву мозг тем, кто в CSS3 плавает, как аквалангист. Расскажу простой способ, как создать слайдер с помощью простых функций CSS3 без необходимости использовния javascript.
        Читать дальше →
      • Вангеры были переизданы на Steam

          image
          Сегодня игра вышла в переизданном виде на Steam под покровительством KranX Productions.
          Сбылась мечта западного журналиста, который в конце 90-х сожалел о том, что игра опубликована только в России и недоступна западному игроку.
          Многие не знают о её существовании, но эта игра стала одной из тех первых российских игр, после которых западные игроки и издатели обратили внимание на наш геймдев.
          Сейчас Калининград — один из центров российского геймдева. И это стало возможным не только благодаря особенной экономической зоне, но и благодаря примеру и кадрам KD-Lab.
          Для меня огромная честь быть лично знакомым с некоторыми членами команды KD-Lab.
          Поздравляю КранКа и весь состав KD-Lab с этим событием!
          Ну и, конечно, игроков, которые помнят и любят Вангеров!
          Вперед за Нюхой, товарищи!

          Читать дальше →
        • Javascript: фрактал отсоса

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

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

                 За годы программирования я столкнулся со многими языками, и у всех у них есть проблемы. Но все эти языки объединяет то, что можно навскидку перечислить их основные проблемы. В случае Javascript все по-другому — я не могу перечислить все то, что не так с этим языком. Я просто не знаю, с чего начать, мне кажется, что я что-то упущу, недоскажу, не смогу объять необъятное. Но я хотя бы попробую, хотя бы ради спокойствия тех, кто чувствуют то же самое.
            Читать дальше →
          • Графы — sigmajs

              Привет, уважаемое Хабра сообщество. В один из прекрасных летних дней, позвонил мне мой товарищ, и сказал, что у него есть для меня очень интересная задача. Я люблю интересные задачи. Приехав на следующий день в офис, мы обсудили задачу. Задача, в двух словах, поставлена была следующая: отобразить на браузерном канвасе иерархию ~ 30000 пользователей с зависимостью между ними, плюс должна присутствовать некая анимация, которая в контексте данного поста не существенна, может в будущих, если на то будет время и Ваше одобрение.

              Мы ударили по рукам, я сказал, что мне нужно провести «изыскания», так как сфера (JS + Canvas), была для меня была нова, и выяснить насколько развитие браузерных технологий соответствует реалиями поставленной задачи.

              Через некоторое, не долгое время, я наткнулся на замечательную библиотеку — sigmajs, на тот момент была версия 0.8.2, если мне не изменят память, которая удовлетворила почти все наши амбициозные потребности.

              С тех пор, много воды утекло, появилась версия сигмы 1.0.0, я обрел новый багаж знаний в сфере JS + Canvas и веба в целом. Для тех, кого я заинтриговал, прошу под кат, где будет дан краткий обзор библиотеки — sigmajs.

              Читать дальше →
            • Основные зарубежные сборники аниме-картинок отключены Роскомнадзором

                В сáмом начале месяца (1 ноября) я упоминал на Хабрахабре о закрытии доступа к «Sankaku Complex» Роскомнадзором, а veam в комментариях прибавил, что несколькими днями ранее того был закрыт доступ и ко крупной доске картинок — к Gelbooru.

                Сейчас я вынужден прибавить к этому не менее печальную новость. Все читатели, из России собравшиеся посетить другой крупный сборник аниме-картинок — сайт Danbooru, на идее которого Gelbooru был изначально основан — вот ужé несколько дней принуждены наблюдать сообщение о блокировке:

                [скриншот]

                В твиттере ещё одного значительного сборника аниме-картинок (Yande.re, название которого происходит от японского слова «ヤンデレ», означающего безумную и смертоносную влюблённую) позавчера была опубликована новость о том, что домогательства Роскомнадзора, обращённые к их провайдеру, поневоле привели к решению самостоятельно блокировать доступ для всех российских читателей сайта. И действительно можно видеть «403 Forbidden» от nginx.

                Читать дальше →
              • Определение доминирующих цветов: Python и метод k-средних


                  Assorium

                  На Хабре публиковалось несколько статей с алгоритмами и скриптами для выбора доминирующих цветов на изображении: 1, 2, 3. В комментариях к тем статьям можно найти ссылки ещё на десяток подобных программ и сервисов. Но нет предела совершенству — и почему бы не рассмотреть способ, который кажется самым оптимальным? Речь идёт об использовании кластеризации методом k-средних (k-means).
                  Читать дальше →
                • Gordon: среда исполнения Flash, реализованная на джаваскрипте

                  • Перевод
                  Вот это сюрприз! Тобиас Шнайдер (Tobias Schneider) построил среду исполнения Flash, работающую прямо во браузере. Она реализована на чистом джаваскрипте и HTML5, и все исходники являются открытыми (MIT-лицензированными), и располагаются на GitHub.

                  Поглядите на Gordon в действии (хостинг демонстраций осуществил Пол Айриш).

                  Gordon работает волшебно в последних версиях Файерфокса, Хрома и Сафари (да, и в iPhone Safari, хотя демонстрация «blue» на моём 3G идёт утомительно медленно). Чтобы установить его себе, запустите «git clone git://github.com/tobeytailor/gordon.git». Я обнаружил, что с URL «file:///» демонстрации не грузятся (в силу системы зависимостей скрипта), так что направьте ваш вебосервер на корень Gordon, а браузер направьте на demos/.

                  Документации ещё никакой нету, так что неясно, насколько широкой совместимостью с Flash обладает Gordon, или в каком направлении станет развиваться. Однако, по крайней мере, это мощная заявка на зрелость открытых веботехнологий.
                  <body onload="new Gordon.Movie('trip.swf', {id: 'stage', width: 500, height: 400})"></a>
                      <div id="stage"></a></div>
                  </body>
                  [Gordon (скриншот)]
                  Читать дальше →
                • Об открытом видео и о недопущении

                  • Перевод
                  Важное замечание: эта блогозапись — моё собственное мнение. Не более, не менее.

                  Несомненно, вы слышали о том, что Youtube и Vimeo выпустили беты своих видеопроигрывателей HTML5 <video>. И много было разговоров о кодеке, ими используемом: H.264. Хотя в Файерфоксе есть превосходная поддержка HTML5 <video>, он не поддерживает (запатентованный) кодек H.264, так что эти проигрыватели вам в Файерфоксе использовать не удастся. Это потому, что Mozilla верит (и я согласен), что H.264 не годится для открытой Паутины.

                  Если ещё не читали, рекомендую прочесть:Ага, знаю, это масса чтива. Но стóит того.

                  Как бы то ни было, а отдельные лица предлагали вот какие решения:
                  • Использовать кодек, который идёт в операционной системе (если такой есть).
                  • Лицензировать H.264 и поставлять его только с бинарными версиями Файерфокса (а прочих поставщиков и внедренцев и разработчиков с меньшими финансами оставить в стороне).
                  • Поставлять H.264 в Файерфоксе людям, живущим в тех странах, в которых софтверные патенты не защищены законом (живёте в США? Не повезло!).
                  Честно говоря, эти решения эгоистичны. Они предполагают, что это нормально, когда только отдельные избранные имеют доступ к Паутине. А так не годится. Не годится исключать людей из Паутины. Ни из-за их аппаратного обеспечения, ни из-за операционной системы, которой они пользуются, ни из-за клиента, которым пользуются, ни из-за их местожительства, ни из-за того, сколько у них денег. Ни по какой причине. Паутина задумывалась как открытая для участия в ней — давайте такою её и сбережём.