Pull to refresh

Эволюция обработки данных: от MapReduce к стриминговому движку

Reading time7 min
Views1.8K

Yandex Query Language (YQL) — универсальный декларативный язык запросов к системам хранения и обработки данных, разработанный в Яндексе. А ещё это один из самых нагруженных сервисов: YQL ежедневно обрабатывает около 800 петабайт данных и 600 000 SQL-запросов, и эти показатели постоянно растут. 

Изначально YQL основывался на операциях MapReduce, которые эффективны для больших данных. Но для средних объёмов данных (до 50 Гб, которые составляют около 60% запросов) этот подход оказался неоптимальным, потому что нужно было обмениваться данными между операциями через диск. Поэтому разработчики создали новый более гибкий стриминговый движок, который значительно ускоряет обработку данных за счёт выполнения всех вычислений в памяти.

В этой статье я хочу рассказать о подходах и технологиях в разработке систем для обработки данных на примере YQL. Основное внимание я уделил переходу от MapReduce к стриминговому движку, который обеспечивает более эффективную обработку данных, вмещающихся в память, и который доступен в опенсорсе.

Читать далее
Total votes 22: ↑26 and ↓-4+30
Comments13

Загрузка контента через YQL

Reading time1 min
Views5.4K
Возможно для вас, как и для меня, станет новостью то, что используя язык запросов Yahoo! Query Language — можно выдрать контент практически с любой страницы непосредственно в браузере (через javascript). Т.е. отпадает необходимость в использовании сервер-сайд кода и библиотек типа curl.

Выглядит это примерно так:
DELETE FROM HTML WHERE 1=1

Даже больше. YQL позволяет выполнять GET и POST HTML запросы.

Как это использовать — да по разному. Вот, для наглядности/примера — украл яндекс) (view source code вам поможет). Можно подглядеть информацию, закрытую корпоративным фаерволом.
А можно и поиграться с кросс-доменными запросами.
Тут уж у кого какая фантазия.
Total votes 49: ↑46 and ↓3+43
Comments23

Мультиарендный подход к инфраструктуре работы с данными. Доклад Яндекса

Reading time16 min
Views2.9K
Времена, когда для экземпляра базы данных выделялся отдельный компьютер, давно прошли. Сейчас повсюду управляемые решения, поднимающие необходимые процессы в виртуальных машинах. Для вычислений применяется еще более прогрессивный подход — «бессерверные вычисления», например AWS Lambda или Yandex Cloud Funtions. И уж совсем на острие прогресса находятся бессерверные БД. Руководитель отдела разработки систем хранения и обработки данных Yandex.Cloud Андрей Фомичёв Anfo рассказал о бессерверных решениях, которые еще до всеобщего хайпа стали популярны в Яндексе и по-прежнему используются для хранения и обработки данных.

— Всем привет. Если вы не очень знаете, что означает слово «мультиарендный» (multitenant) в названии доклада — ничего страшного, я расскажу поподробнее, и станет понятно.

Доклад будет из четырех разделов. Сначала я расскажу, что такое многопользовательские и multitenant-системы и чем они отличаются. Потом приведу примеры мультиарендных multitenant-систем в Яндексе: Yandex Database (YDB) и Yandex Query. Затем расскажу, как мы все эти системы реализовываем, какие в них особенности. В заключение подведу итоги доклада.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments4

Сборники рецептов jq

Reading time4 min
Views11K

Мы все иногда сталкиваемся с необходимостью вытащить нужную информацию из JSON или YAML файлов. Многие уже познакомились с мощью утилиты jq. Судя по публикациям на Хабре, напр. https://habr.com/ru/post/525808/, и вопросам в qna, тема до сих пор актуальна.

Мне в очередной раз пришлось вспомнить специфический DSL jq чтобы восстановить накопленные за долгое время закладки в Хроме, не сохранённые при апгрейде. Точнее, файл Bookmarks в формате .json сохранился, но ни в какую не хотел импортироваться в новый Хром. Хочу поделиться рецептом решения этой проблемы, заодно упорядочить собранные в разных местах миниатюрные скрипты для решения похожих проблем.

читать далее
Total votes 4: ↑3 and ↓1+2
Comments3

Инфраструктура А/Б-экспериментов в большом Поиске. Доклад Яндекса

Reading time8 min
Views5.8K
А/Б-тестирование — мощный способ проверки интерфейсов перед публикацией на всю аудиторию. Я решил рассказать, из чего этот инструмент состоит, какие у него особенности логирования, как составляются метрики и в чем суть экспериментов во фронтенде. Поговорим об их устройстве и сервисах для решения ежедневных аналитических задач. Обсудим несколько путей развития для разработчика, который вроде бы всё уже умеет, но хочет больше.



— Меня зовут Лёша, я работаю в Поиске и разрабатываю самый главный, наверное, продукт Яндекса — поисковую выдачу.

Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments0

Просто добавь команд: как реализовать диалоговый Телеграм бот на основе шаблона

Level of difficultyEasy
Reading time17 min
Views10K

В предыдущей статье я рассказала, как быстро создать инфраструктуру для диалогового бота на основе Yandex Serverless Functions и базы данных YDB. В качестве примера использовался примитивный бот, реализованный в моём репозитории ydb_serverless_telegram_bot.

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

/start
Total votes 7: ↑6 and ↓1+5
Comments0

database/sql биндинги для YDB в Go

Level of difficultyMedium
Reading time5 min
Views3.3K

YQL — это SQL‑диалект, специфичный для базы данных YDB. YQL требует заранее объявлять имена и типы параметров запроса. Это обеспечивает высокую производительность и корректное поведение. В синтаксисе YQL параметры необходимо перечислять явно с помощью инструкции DECLARE. И этот нюанс YDB может быть неожиданным для пользователей традиционных баз данных. В статье раскрывается вспомогательный механизм, позволяющий писать привычные простые SQL‑запросы при работе с YDB.

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments6

Запуск социальной платформы Y!OS 1.0

Reading time1 min
Views499
Неделю назад Yahoo представила на суд публики обновленную версию профилей: там появилась возможность добавления френдов, отслеживания их активности, различные RSS-каналы и т.д. Фактически, многомиллионную базу пользователей пытаются превратить в огромную социальную сеть. А сегодня компания сделала следующий шаг в том же направлении, запустив открытую платформу Yahoo! Open Strategy (Y!OS) 1.0. Речь идёт об открытии портала Yahoo для всех независимых разработчиков, которые хотят создавать собственные сервисы на его основе.

В рамках этой инициативы открываются программные интерфейсы для социальных сервисов Yahoo! Social Platform (YSP) (есть PHP SDK и Flash SDK, используются стандартные технологии OAuth и REST), также открывается платформа для распространения программ Yahoo! Application Platform (YAP) и SQL-подобный интерфейс запросов Yahoo! Query Language (YQL).

Теперь кто угодно может создавать собственные веб-приложения, которые будут иметь прямой доступ к базе данных и инструментам Yahoo. Через открытые API можно получать информацию о профилях, контактах и статусах пользователей Yahoo.

Интеграция новой социальной платформы в базовые сервисы портала Yahoo начнётся в 2009 году.

via Yahoo! Developers Network Blog
Total votes 8: ↑7 and ↓1+6
Comments1

Yahoo.Pipes — парочка советов, хаков, подсказок

Reading time2 min
Views1.1K
В отличие от некоторых, я не претендую на звание самого главного трубоведа. Однако, поскольку часто работаю с сервисом Yahoo.Pipes, осмелился поделиться некоторыми вещами, в том числе решением ряда проблем, с которыми может столкнуться начинающий «трубовед» (или «пайповод»). Ну, а главный посыл, что побудил меня написать данный пост — в первую очередь, самому не забыть об этих вещах, и если что, всегда иметь возможность свериться.

Как водится, небольшое отступление. Yahoo.Pipes — удивительный сервис, позволяющий вытворять с rss-фидами (rss-потоками) различные полезные и интересные вещи (строго говоря, не только с rss, но и xml-, csv- данными, интернет-страницами, другими интернет-сервисами и т. д. — главное, чтобы к ним можно было обратиться через веб). Можно объединять несколько rss-каналов в один, можно, наоборот, разделить, а потом снова смешать, отсортировать различными способами, что-то добавить, что-то убавить и т. д. и т. п.

Самое главное, что реализовано это через веб-интерфейс и в визуальном виде. Иными, словами, не надо ничего, по сути, программировать и самому выдумывать. все, что требуется, это знать, какие существуют модули, как с ними обращаться и что они могут (RTFM, естественно, никто не отменял), а также сильно помогут базовые знания регулярных выражений (опять-таки, если Вы хотите делать сложные «трубы», для простых, простите за тафталогию, — всё гораздо проще ). На выходе же получите rss-поток или файл в формате json, который также доступен удаленно и постоянно обновляется.

Плюсы сервиса очевидны — как я уже сказал, программировать ничего не надо, никакие скрипты у себя хостить не надо, о кэшировании и трафике тожно можно не беспокоиться — все это на себя берут Yahoo.Pipes

За последние 2 года своего существования сервис «возмужал», появились новые удобные «фичи», и, естественно, есть также и всевозможные баги, оишбки, которые бывают плохо задокументированны (потому не сразу находится решение), либо просто заставляют лезть на стенку («Делаю все, как в мануале, ан нет, глючит»). Возможно, это возникает от плохого прочтению мною документации, тем не менее, все равно поделюсь своими маленькими открытиями и советами. (Еще раз отмечу, что данная статья предназначена для более менее подготовленного читателя, который знаком с базовыми модулями Yahoo.Pipes).

Итак, для разминки, начнем с простого:

1. Часто требуется сослаться, например, в субэлементе description (описание) на другой субэлемент (например, link). Это происходит, когда Вы в субэлемент description хотите вставить HTML-текст (скажем, субэлемент link url картинки, а Вы хотите вставить ссылку на эту картинку и добавить небольшое к ней пояснение). Как правило, для этого используется модуль Regex, но возникает вопрос, как в строку, где мы пишет, что на что менять, вставить ссылку на другой субэлемент элемента item?
Для этого поступаем следующим образом: ставим знак $, затем фигурные скобки {}, а внутри них — название подэлемента без, обратите внимание item., т. е.
${link}, где link — название одного из существующих подэлементов элемента item.

Полная статья на моем блоге
Total votes 9: ↑4 and ↓5-1
Comments8

Несколько находок

Reading time2 min
Views7.2K

Кроссдоменные запросы с помощью YQL


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

Позавчера, один уважаемый человек с форума javascript.ru с ником melky вскользь упомянул о каком-то странном, на первый взгляд, jQuery плагине, который называется jquery.xdomainajax.js
Пытливому уму программиста не нравятся всякие плагины, без понимания сути, поэтому я выковырял самую нужную часть:
var query = 'select * from html where url="http://javascript.ru/" and xpath="*"'
var url = 'http://query.yahooapis.com/v1/public/yql?q='+encodeURI(query)+'&format=xml&callback=callback';
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
function callback(data) {
    console.log(data); //сам текст ответа находится в data.result[0]
}


Откройте консоль и зупустите код. Как видно, в запрос пихается урл сайта и XML запрос в виде xpath, ответ приходит в виде jsonp. Если в урле написать format=json, то ответ придет в виде объекта с тегами.
Дальше этого применения я не пошел, поэтому лучше сами изучите матчасть здесь: developer.yahoo.com/yql

В комментариях настаивают указать на ограничения по количеству запросов с одного IP и запросов, использующих accesskey, которого у нас нет (так что, скорее всего, можно забить :) ).

Еще немного
Total votes 51: ↑43 and ↓8+35
Comments28

Миграции в YDB с помощью «goose»

Level of difficultyMedium
Reading time19 min
Views3.9K

Любой более или менее серьезный продакшен, работающий с базой данных, подразумевает процесс миграции - обновление структуры базы данных от одной версии до другой (обычно более новой) [источник].

Миграции в БД можно делать вручную или использовать для этого специальные утилиты (фреймворки). В данной статье речь идет об утилите goose. Это инструмент миграции схемы, который обеспечивает управление миграциями схемы в проекте. Начиная с версии v3.16.0 goose поддерживает YDB - распределенную open-source СУБД. В данной статье мы будем разбирать кейс применения миграций конкретно в YDB.

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