Турнирная таблица : Континентальная Хоккейная Лига (КХЛ)
Чемпионом России, серебряным и бронзовым призерами Чемпионата России по хоккею становятся российские команды, занявшие наиболее высокие места по итогам Второго этапа Чемпионата- И
- Количество проведенных игр
- В
- Выигрыши в основное время
- ВО
- Выигрыши в овертайме
- ВБ
- Выигрыши в послематчевых буллитах
- ПО
- Проигрыши в овертайме
- ПБ
- Проигрыши в послематчевых буллитах
- П
- Проигрыши в основное время
- Ш
- Шайбы
- О
- Количество набранных очков
Регулярный чемпионат. Конференция «Восток»
Чемпионом России, серебряным и бронзовым призерами Чемпионата России по хоккею становятся российские команды, занявшие наиболее высокие места по итогам Второго этапа Чемпионата Чемпионом России, серебряным и бронзовым призерами Чемпионата России по хоккею становятся российские команды, занявшие наиболее высокие места по итогам Второго этапа Чемпионата- И
- Количество проведенных игр
- В
- Выигрыши в основное время
- ВО
- Выигрыши в овертайме
- ВБ
- Выигрыши в послематчевых буллитах
- ПО
- Проигрыши в овертайме
- ПБ
- Проигрыши в послематчевых буллитах
- П
- Проигрыши в основное время
- Ш
- Шайбы
- О
- Количество набранных очков
Регулярный чемпионат. Дивизион Тарасова
Регулярный чемпионат. Дивизион Харламова
Регулярный чемпионат. Дивизион Чернышева
Чемпионом России, серебряным и бронзовым призерами Чемпионата России по хоккею становятся российские команды, занявшие наиболее высокие места по итогам Второго этапа Чемпионата Чемпионом России, серебряным и бронзовым призерами Чемпионата России по хоккею становятся российские команды, занявшие наиболее высокие места по итогам Второго этапа Чемпионата- И
- Количество проведенных игр
- В
- Выигрыши в основное время
- ВО
- Выигрыши в овертайме
- ВБ
- Выигрыши в послематчевых буллитах
- ПО
- Проигрыши в овертайме
- ПБ
- Проигрыши в послематчевых буллитах
- П
- Проигрыши в основное время
- Ш
- Шайбы
- О
- Количество набранных очков
<…>Статья 14. Определение результатов и мест команд на Первом этапе Чемпионата
1. Места команд в Дивизионах, Конференциях и Общей таблице Чемпионата определяются по сумме очков, набранных во всех матчах Первого этапа Чемпионата.
2. Для определения текущего и окончательного распределения мест между командами в Дивизионах, в Конференциях и в Общей таблице Чемпионата в случае равенства очков у двух или более команд преимущество получает команда:
2.1. Имеющая большее количество побед в основное время во всех матчах Первого этапа;
2.2. Одержавшая большее количество побед в овертаймах во всех матчах Первого этапа;
2.3. Одержавшая большее количество побед в сериях бросков, определяющих победителя матча, во всех матчах Первого этапа;
2.4. Имеющая лучшую разность заброшенных и пропущенных шайб во всех матчах Первого этапа;
2.5. Имеющая большее количество заброшенных шайб во всех матчах Первого этапа.
Примечание. Указанные выше критерии применяются последовательно;
2.6. При равенстве всех вышеперечисленных показателей распределение мест между командами определяется жребием.
3. В официальных таблицах Конференций команды, занимающие первые места в Дивизионах, располагаются на первом и втором местах в зависимости от количества набранных очков во всех матчах Первого этапа Чемпионата в порядке убывания спортивных результатов.
Таблица символов фирменного шрифта Яндекса
Таблица символов фирменного шрифта ЯндексаТаблица символов
- ABCD
#$%&
1234
Латиница
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzКириллица
АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя Пунктуация.,:;…!?•*/(){}-–—_«»Математические
×><≈~Дополнительная латиница-1
«»× %name%О символе
- Юникод: %unicode%
- Блок: %block%
Применение
- Copy-paste: %copyPaste%
- Windows: %windows%
- HTML: %html%
Основная латиница
!Восклицательный знак0021
(Левая круглая скобка0028
)Правая круглая скобка0029
—Дефис-минус002D
/Косая черта002F
;Точка с запятой003B
<Знак меньше003C
>Знак больше003E
?Знак вопроса003F
AЛатинская заглавная буква A0041
BЛатинская заглавная буква B0042
CЛатинская заглавная буква C0043
DЛатинская заглавная буква D0044
EЛатинская заглавная буква E0045
FЛатинская заглавная буква F0046
GЛатинская заглавная буква G0047
HЛатинская заглавная буква H0048
IЛатинская заглавная буква I0049
JЛатинская заглавная буква J004A
KЛатинская заглавная буква K004B
LЛатинская заглавная буква L004C
MЛатинская заглавная буква M004D
NЛатинская заглавная буква N004E
OЛатинская заглавная буква O004F
PЛатинская заглавная буква P0050
QЛатинская заглавная буква Q0051
RЛатинская заглавная буква R0052
SЛатинская заглавная буква S0053
TЛатинская заглавная буква T0054
UЛатинская заглавная буква U0055
VЛатинская заглавная буква V0056
WЛатинская заглавная буква W0057
XЛатинская заглавная буква X0058
YЛатинская заглавная буква Y0059
Z Латинская заглавная буква Z005A
_Нижнее подчёркивание005F
aЛатинская строчная буква a0061
bЛатинская строчная буква b0062
cЛатинская строчная буква c0063
dЛатинская строчная буква d0064
eЛатинская строчная буква e0065
fЛатинская строчная буква f0066
gЛатинская строчная буква g0067
hЛатинская строчная буква h0068
iЛатинская строчная буква i0069
jЛатинская строчная буква j006A
kЛатинская строчная буква k006B
lЛатинская строчная буква l006C
mЛатинская строчная буква m006D
nЛатинская строчная буква n006E
oЛатинская строчная буква o006F
pЛатинская строчная буква p0070
qЛатинская строчная буква q0071
rЛатинская строчная буква r0072
sЛатинская строчная буква s0073
tЛатинская строчная буква t0074
uЛатинская строчная буква u0075
vЛатинская строчная буква v0076
wЛатинская строчная буква w0077
xЛатинская строчная буква x0078
yЛатинская строчная буква y0079
zЛатинская строчная буква z007A
{Левая фигурная скобка007B
}Правая фигурная скобка007D
Дополнительная латиница-1
«Открывающая левая кавычка «ёлочка»00AB
»Закрывающая правая кавычка «ёлочка»00BB
×Знак умножения00D7
Кириллица
ЁКириллическая заглавная буква ё0401
АКириллическая заглавная буква а0410
БКириллическая заглавная буква бэ0411
ВКириллическая заглавная буква вэ0412
ГКириллическая заглавная буква гэ0413
ДКириллическая заглавная буква дэ0414
ЕКириллическая заглавная буква е0415
ЖКириллическая заглавная буква же0416
ЗКириллическая заглавная буква зэ0417
ИКириллическая заглавная буква и0418
ЙКириллическая заглавная буква и краткое0419
ККириллическая заглавная буква ка041A
ЛКириллическая заглавная буква эл041B
МКириллическая заглавная буква эм041C
НКириллическая заглавная буква эн041D
ОКириллическая заглавная буква о041E
ПКириллическая заглавная буква пэ041F
РКириллическая заглавная буква эр0420
СКириллическая заглавная буква эс0421
ТКириллическая заглавная буква тэ0422
УКириллическая заглавная буква У0423
ФКириллическая заглавная буква эФ0424
ХКириллическая заглавная буква ха0425
ЦКириллическая заглавная буква цэ0426
ЧКириллическая заглавная буква че0427
ШКириллическая заглавная буква ша0428
ЩКириллическая заглавная буква ща0429
ЪКириллическая заглавная буква твёрдый знак042A
ЫКириллическая заглавная буква ы042C
ЭКириллическая заглавная буква э042D
ЮКириллическая заглавная буква ю042E
ЯКириллическая заглавная буква я042F
аКириллическая строчная буква а0430
бКириллическая строчная буква бэ0431
вКириллическая строчная буква вэ0432
гКириллическая строчная буква гэ0433
дКириллическая строчная буква дэ0434
еКириллическая строчная буква е0435
жКириллическая строчная буква же0436
зКириллическая строчная буква зэ0437
иКириллическая строчная буква и0438
йКириллическая строчная буква и краткое0439
кКириллическая строчная буква ка043A
лКириллическая строчная буква эл043B
мКириллическая строчная буква эм043C
нКириллическая строчная буква эн043D
оКириллическая строчная буква о043E
пКириллическая строчная буква пэ043F
рКириллическая строчная буква эр0440
сКириллическая строчная буква эс0441
тКириллическая строчная буква тэ0442
уКириллическая строчная буква у0443
фКириллическая строчная буква эф0444
хКириллическая строчная буква ха0445
цКириллическая строчная буква цэ0446
чКириллическая строчная буква че0447
шКириллическая строчная буква ша0448
щКириллическая строчная буква ща0449
ъКириллическая строчная буква твёрдый знак044A
ыКириллическая строчная буква ы044B
ьКириллическая строчная буква мягкий знак044C
эКириллическая строчная буква э044D
юКириллическая строчная буква ю044E
яКириллическая строчная буква я044F
ёКириллическая строчная буква ё0451
Знаки пунктуации
‑Неразрывный дефис2011
‒Цифровое тире2012
–Среднее тире2013
—Длинное тире2014
•Точка маркер списка2022
…Многоточие2026
Математические операторы
≈Почти равный2248
Геометрические фигуры
◼Черный квадрат в середине25FC
Поддерживаемые языки
- Русский
- Английский
- Болгарский
- Итальянский
Русский
Государев указ: душегубцев да шваль всякую высечь, да калёным железом по щекам этих физиономий съездить!
Болгарский
Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон
Итальянский
Qualche vago ione tipo zolfo, bromo, sodio
Английский
When we go back to Juarez, Mexico, do we fly over picturesque Arizona?
Заказать дизайн…
Яндекс | |
Алгоритмы, анализирующие качество контента | |
Флорида (Florida) Запуск: ноябрь, 2003 г. Особенности:
| Магадан Запуск: май, июль, 2008 г. Особенности:
|
Остин (Austin) Запуск: январь, 2004 г. Особенности:
| АГС-17, АГС-30, АГС-40 Запуск: сентябрь, декабрь, 2009 г., ноябрь, 2012 г. Особенности:
|
Панда (Panda) Запуск: февраль, 2011 г. Особенности:
| Снежинск Запуск: ноябрь, 2009 г. Особенности:
|
Колибри (Hummingbird) Запуск: сентябрь, 2013 г. Особенности:
| Краснодар Запуск: декабрь, 2010 г. Особенности:
|
Пират (Pirate) Запуск: октябрь, 2014 г. Особенности:
| Баден-Баден Запуск: март, 2017 г. Особенности:
|
Фред (Fred) Запуск: март, 2017 г. Особенности:
| |
Алгоритмы, анализирующие качество ссылок | |
PageRank Запуск: впервые в 1998 г. С тех пор было несколько обновлений. Особенности:
| 8 SP1 Запуск: январь, 2008 г. Особенности:
|
Кассандра (Cassandra) Запуск: апрель, 2003 г. Особенности:
| Обнинск Запуск: сентябрь, 2010 г. Особенности:
|
Хилтоп (Hilltop) Запуск: декабрь, 2010 г. Особенности:
| Минусинск Запуск: май, 2015 г. Особенности:
|
Пингвин (Penguin) Запуск: апрель, 2012 г. Особенности:
| |
Алгоритмы, анализирующие пригодность сайта для мобильных устройств | |
Mobile friendly Запуск: апрель, 2015 г. Особенности:
| Владивосток Запуск: февраль, 2016 г. Особенности:
|
Алгоритмы, работающие со сложными и редкими запросами | |
Орион (Orion) Запуск: 2006 г. Особенности:
| Палех Запуск: ноябрь, 2016 г. Особенности:
|
RankBrain Запуск: октябрь, 2015 г. Особенности:
| Королев Запуск: август, 2017 г. Особенности:
|
Алгоритмы, учитывающие интересы пользователя (персонализация) | |
Персональный поиск Запуск: июнь, 2005 г. Особенности:
| Рейкьявик Запуск: август, 2011 г. Особенности:
|
Search Plus Your World Запуск: январь, 2012 г. Особенности:
| Калининград Запуск: декабрь, 2012 г. Особенности:
|
Дублин Запуск: май, 2013 г. Особенности:
| |
Алгоритмы, направленные на улучшение качества ранжирования в целом | |
Кофеин (Caffeine) Запуск: июнь, 2010 г. Особенности:
| Находка Запуск: сентябрь, 2008 г. Особенности:
|
Алгоритмы, отвечающие за региональное ранжирование | |
Опоссум (Possum) Запуск: сентябрь, 2016 г. Особенности:
| Арзамас / Анадырь Запуск: первая версия — апрель, 2009 г.; затем еще несколько версий в июне, августе и сентябре 2009 г. Особенности:
|
Конаково Запуск: декабрь, 2009 г., март 2010 г. Особенности:
|
Как скопировать кампанию в Яндекс.Директ: 5 способов плюс сравнительная таблица
Наши специалистывсегда готовы ответить
на ваши вопросы
Спросить совет ×
Помните: для этого контента требуется JavaScript.
Часто рекламодателям приходится запускать несколько практически идентичных рекламных кампаний, чтобы протестировать разные стратегии или установить разные ставки для отдельных регионов. Если делать все вручную, на настройку 3 кампаний уйдет 2-3 часа. Чтобы ускорить процесс и справиться за 10-15 минут, воспользуйтесь функцией копирования. Создать новую кампанию на основе старой можно через интерфейс Директа, приложение Директ Коммандер, менеджеров Яндекса, выгрузку файлов XLS и бид-менеджеры. Рассмотрим каждый способ подробнее и сведем их в сравнительную таблицу.
Копируем через интерфейс Яндекс.Директ
Выделите одну или несколько кампаний, которые нужно скопировать, и в открывшемся меню выберите действие «Копировать».
Кампании-копии появятся в списке в течение минуты
Настройки сохранятся, только статистика обнулится и будет собираться заново после запуска. У метода есть недостатки. Скопировать кампании в другой аккаунт не получится. Кроме того, в новую попадут не только активные, но и архивные объявления. Если их слишком много, могут возникнуть сложности с добавление новых, так как в одну кампанию можно добавить до 1000 групп. С другой стороны, архивные объявления могут пригодиться, например, если вы меняете их в зависимости от сезона, и в архиве хранятся нужные, но неактуальные для этого времени объявления.
Копируем через Директ Коммандер
На вкладке «Кампании» выделите те, которые нужно скопировать и нажмите клавиши Ctrl+C (копировать) и Ctrl+V (вставить).
Копии кампаний появятся ниже на той же вкладке
Как и при копировании через интерфейс Яндекс.Директа, настройки кампаний сохраняются, а статистику придется накапливать заново. Архивные группы копируются, но без объявлений, только фразы. Толку от этого мало — чтобы сохранить кампанию, их нужно удалить или создать новые.
Директ Коммандер не копирует архивные объявления, только группы
С агентским доступом можно копировать кампании в пределах одного или между разными аккаунтами. Однако на другой аккаунт не переносятся корректировки ставок по условиям ретаргетинга и уточнения объявлений.
Если у вас клиентский доступ, быстрое копирование доступно только в пределах одного аккаунта. Чтобы перенести кампании на другой, выгрузите их в файл.
Выделите нужные кампании и кликните, чтобы выгрузить их
И загрузите его на нужный аккаунт.
Кликните и выберете нужные файлы из открывшейся папки
Учтите — стратегия, счетчик метрики и метки не сохранятся.
Способ удобен, если нужно скопировать много кампаний. Вы сразу можете приступить к редактированию и внести изменения в несколько кампаний одновременно.
Выгружаем через XLS/XLSX
Зайдите в личный кабинет Директа и в меню «Действия» в левом нижнем углу выберите пункт «Управление кампаниями с помощью XLS/XLSX».
Чтобы скопировать РК, нужно сначала сохранить их на компьютер
На вкладке «Выгрузка в XLS/XLSX» выберите нужную кампанию и формат файла.
Если нужно выгрузить архивные объявления, отметьте соответствующий чекбокс
На вкладке «Загрузка из XLS/XLSX» выберите файл, который выгружали ранее, при необходимости изменив регион. Установите действие «Создать новую кампанию» и нажмите «Продолжить».
При загрузке файла можно установить регион для всех объявлений
Можно копировать кампании на разные аккаунты, но за раз только одну. Поэтому способ не подойдет, если нужно скопировать много кампаний сразу. Стратегия и номер счетчика метрики не переносятся, статистика обнуляется.
Заказываем копии у менеджера
Метод доступен только агентствам. Чтобы им воспользоваться, нужно написать письмо с просьбой скопировать кампании менеджеру Яндекса, который обслуживает ваш аккаунт. Можно скопировать несколько кампаний сразу на разные аккаунты. Сохраняются все параметры, в том числе — накопленный CTR. Если хотите сохранить текущий CTR и цены клика, этот способ для вас. Однако все запросы обрабатываются в порядке очереди в рабочее время, и копии появятся личном кабинете не сразу.
Если нужно скопировать кампании одного клиента, можно воспользоваться формой в интерфейсе Директа.
Откроется форма, в которой нужно указать логин и номера кампаний. В ней можно быстро и удобно отметить нужные объявления.
В форме можно настроить копирование статусов и другие параметры
Копируем через сервисы автоматизации
Рассмотрим на примере сервиса Сеодроид. Кликните по кнопке «Копирование кампании» под нужной кампанией.
В интерфейсе Сеодроида можно скопировать любую кампанию
Укажите название новой кампании и аккаунт, на котором хотите ее создать. Выберите режим и нажмите «Скопировать».
Через Сеодроид можно копировать кампании на разные аккаунты. Ставки, корректировки ставок, CTR и архивные объявления не сохраняются. Зато можно скопировать кампании, даже если у вас нет доступа для редактирования в аккаунт Директа, достаточно доступа на чтение. Другие способы в таком случае будут недоступны.
Если нужно скопировать кампании, чтобы создать отдельные под каждый регион, сделать это через Сеодроид проще всего. Достаточно выбрать нужные регионы и режим копирования «Разные копии на выделенные регионы».
Сравним способы в таблице
У каждого метода есть преимущества и недостатки. Однако они имеют значения только в контексте ваших задач. Выбирать стоит в зависимости от того, возможно ли скопировать кампанию с нужными параметрами в конкретной ситуации. Мы собрали в таблицу все возможности и функции, которые могут понадобиться вам при копировании, и отметили, для каких способов они доступны, а для каких — нет.
Способы копирования | Интерфейс | Директ Коммандер | Менеджер | XLS/XLSX | Бид-менеджер |
Копирование внутри одного аккаунта | + | + | + | + | + |
Копирование между разными аккаунтами | — | + | + | + | + |
Копирование одной кампании | + | + | + | + | + |
Копирование нескольких кампаний одновременно | + | + | + | — | — |
Создание кампаний сразу для разных регионов | — | — | — | — | + |
Сохранение меток | + | — | + | + | + |
Сохранение стратегии | + | + | + | — | + |
Сохранение корректировок ставок | + | нет, если копирование через файл | + | — | — |
Сохранение ставок | + | + | + | + | — |
Сохранение статистики | — | — | + | — | — |
Сохранение счетчика метрики | + | нет, если копирование через файл | + | — | + |
Возможность скопировать в любое время | + | + | — | + | + |
При наличии доступа для чтения | — | — | + | — | + |
Архивные объявления | + | — | — | можно выбрать | — |
Воспользуйтесь таблицей, чтобы узнать, какой метод подойдет вам. Например, если прямому рекламодателю нужно скопировать одну кампанию в пределах своего аккаунта с переносом архивных объявлений, которые могут еще пригодиться, это можно сделать через интерфейс Директа и выгрузку/загрузку файлов XLS. Агентству, которому нужно продублировать 5 кампаний для разных клиентских аккаунтов с сохранением меток, стратегии, ставок и статистики, придется отправлять письмо личному менеджеру. А размножить одну кампанию на несколько регионов можно только через бид-менеджер Сеодроид.
Ведение Директа
Таблица для транслитерации по версии Яндекса
Примечание: если нужно получить подсветку в яндексе, а воспользуйтесь нашим инструментом для ручной генерации seo url — которые понимает и яндекс и гугл. Ниже представлена только теория.
В Яндексе на данный момент (апрель 2012 года) используется стандарт «Транслитерация имен для загранпаспорта РФ» (Приказ Министерства внутренних дел Российской Федерации от 31 декабря 2003 г. N 1047 г. )
Таблица № 1. Правила транслитерации русских букв латиницей для Яндекса
Кириллица | Транслит (латиница) |
---|---|
а | a |
б | b |
в | v |
г | g |
д | d |
е | e |
ё | ye |
ж | zh |
з | z |
и | i |
й | y |
к | k |
л | l |
м | m |
н | n |
о | o |
п | p |
р | r |
с | s |
т | t |
у | u |
ф | f |
х | kh |
ц | ts |
ч | ch |
ш | sh |
щ | shch |
ъ | « |
ы | y |
ь | ‘ |
э | e |
ю | yu |
я | ya |
Таблица № 2. Дифтонги (сочетания гласной буквы и «й»)
Кириллица | Транслит (латиница) |
---|---|
ай | ay |
ей | ey |
ий | iy |
ой | oy |
уй | uy |
ый | yy |
эй | ey |
юй | yuy |
ей | yay |
Меняем стили таблицы в статистике Яндекс Директа
Если вас не устраивает, как отображается таблицы статистики в Яндекс Директе, то это можно поправить.
Мне, например, не нравиться большая простыня отчета на страницах статистики в Директе, например по поисковым запросам. Она выходит почти в 2 раза за пределы экрана. Если уменьшать масштаб страницы, то уменьшаются и другие элементы, помимо самой страницы.
Для браузеров есть плагин Stylish, который позволяет менять стили на странице в браузере. Скачать его для хрома можно тут https://chrome.google.com/webstore/detail/stylish-custom-themes-for/fjnbnpbmkenffdnngjfgmeleoegfcffe?hl=ru
В нем можно прописать стили CSS, которые хотите поменять на странице
Для этого кликаем на плагин и выбираем Создать стиль (спрятан за 3 точками)
Появиться новое окно, в котором вводим Названия стиля, свой код и на какой странице он должен применяться:
Применять будем на всех станицах, которые соответствуют регулярному выражению :
.*direct\.yandex\.ru\/registered\/.*show_stat=1.*
Код стиля:
/* Строка заголовка таблицы */
.b-stat-table_type_mol .b-stat-table__head-col {
padding: 3px 3px;
}
.b-stat-table__head-col-wrap_sorted_yes {
padding-left: 5px;
}
.b-stat-table_type_mol .b-stat-table__row-col {
padding: 3px 3px;
}
.b-stat-table_type_mol .b-stat-table__row-col_type_slices {
white-space: normal;
}
.b-stat-table__head {
white-space: normal;
}
/* Столбец с поисковыми запросами */
.b-mol-stat-data__search-query-wrap {
width: 250px;
}
.b-stat-table_type_mol .b-stat-table__head-col {
padding: 3px 3px;
}
/* Цвета таблицы */
.b-stat-table__row-col {
border-bottom: 1px solid #A5A5A5;
}
.b-stat-table_type_mol .b-stat-table__row-col {
border-left: 1px solid #A5A5A5;
}
Сохраняем. Теперь при включенном плагине на странице статистики будет более компактная таблица:
Если у вас есть свои подобные стили, поделитесь со мной 🙂
Автор: Москалец Андрей • Дата создания: 2019-11-19
Как в Яндекс.Метрике импортировать данные отчетов из таблиц и графиков в Excel
В этой статье мы рассмотрим детально процесс выгрузки данных из отчетов Яндекс.Метрика в отдельный документ с разбивкой данных по дням, неделям и месяцам.
Например, стандартная функция экспорта в Метрике, позволяет выгружать:
1. Данные из графика. Выгружаются в документ параметры и показатели на основе которых формируется график отчета за выбранные период.
2. Данные из таблицы. В документ переносится данные из таблицы отчета по выделенным полям с сохранением показателей и метрик.
Давайте разберем на примере все возможности выгрузки данных в .XLSX и .CSV.
Решения
Предположим, нам нужно выгрузить данные по трафику из поисковых систем Яндекс и Google с разбивкой по месяцам за весь последний год.
Как это реализовать?
Стандартными отчетами в интерфейсе Метрики получить такие данные не получиться.
В табличном отчете вы получите только общие данные за выбранный период, а на графике данные можно увидеть только в сплывающем окошке, при наведении курсора, что не совсем удобно, так как запомнить, а тем более сохранить и перенести значения в отдельный документ не получится.
Именно для таких случаев нужна выгрузка значений из графика и таблицы.
1. Переходим в нужный отчёт и указываем временной интервал;
2. Далее выбираем вывод данных по месяцам;
3. Указываем галочками в таблице ниже требуемые параметры, а напротив ненужных полей — снимаем галочки. В нашем примере отмечаем только поисковые системы Яндекс и Google;
4. Переходим в правый верхний угол отчёта и выбираем выгрузку Данные графика. Файл сформируется за несколько секунд и будет сохранен на ваш компьютер.
Получаем данные в файле с разбивкой по месяцам. Вот такие значения можно получить в сохраненном нами файле:
Как видите, в столбце Период указаны месяца, а в двух других столбцах количество переходов из каждой поисковой системы.
Однако, Яндекс.Метрика позволяет выгружать данные не только из графика, но и из таблицы.
Выполняем все ранее описанные действия, то теперь выбираем Данные таблицы. Выгрузка такого отчета займет чуть больше времени и будет иметь немного иной вид, дублируя таблицу из отчета с данными группировок.
Важно! Отчёт можно с лёгкостью изменить, поменяв в нем группировки, добавив дополнительные метрики, настроить детализацию по дням или неделям и выгрузить показатели за любой другой период по другим параметрам.
Поздравляю! Теперь с этими данными удобно работать: строить на их основе графики и диаграммы, составлять сводные таблицы и отчёты, добавлять в презентацию и пересылать клиентам!
Остались вопросы?
Мы решили довольно простую задачу, но если у вас остались вопросы, то оставляйте ваши комментарии в форме ниже под этой записью и не забывайте подписываться на новые инструменты и статьи блога!
Сохраните ссылкуЧитайте дальше:
Метки #аналитика, #яндекс.метрикаВставка таблиц — Яндекс.Wiki. Справка
Используйте динамические таблицы для сортировки значений, определения типов данных для отображения в столбцах и установки необходимых ячеек. Вы можете использовать динамические таблицы как есть или встраивать их в страницы.
Чтобы встроить динамическую таблицу на страницу:
Щелкните > на боковой панели.
Настройте параметры внедрения.
Скопируйте код встраивания и вставьте его на страницу.
Динамические таблицы можно редактировать прямо со страницы, если во время встраивания не выбран параметр «Только чтение».Все изменения автоматически применяются к основной таблице и ко всем ее появлению на других страницах.
Строки в динамических таблицах можно быстро отсортировать по столбцам:
Щелкните заголовок столбца.
Щелкните значок еще раз, чтобы отсортировать строки в обратном порядке.
- Сортировка таблиц по нескольким столбцам одновременно
Таблицы можно упорядочивать, используя несколько типов сортировки. Типы сортировки указываются в порядке убывания приоритета.
Чтобы создать новый порядок сортировки:
Щелкните на боковой панели.
Выберите столбец и порядок сортировки.
Вы можете фильтровать встраиваемые таблицы, чтобы отображались только определенные строки и столбцы. Для этого:
Получите код для встраивания и поместите его в текст страницы.
- Чтобы выбрать столбцы для отображения, добавьте параметр
columns
к коду вашей таблицы.Чтобы узнать больше об использовании этого параметра, см. Выбор столбцов для отображения. Чтобы отфильтровать строки на основе значений, установленных в определенных ячейках, добавьте параметр
filter
в код своей таблицы. Дополнительные сведения об использовании этого параметра см. В разделе Настройка фильтров отображения строк.
Чтобы открыть исходную таблицу, которую вы использовали для встраивания:
Щелкните в нижней части таблицы.
Документация по Supermetrics | Яндекс.Таблицы прямого хранилища данных
Продукты
- Суперметрики для Google Таблиц
- Суперметрики для Google Data Studio
- Суперметрики для Excel
- Суперметрики для BigQuery
- Суперметрики для DWH и облачного хранилища
- API Supermetrics
Источники данных
- Рекламные данные + Google Analytics
- Adform
- Adobe Analytics
- Adobe Analytics 2.0
- AdRoll
- Ahrefs
- Apple App Store / iTunes общедоступные данные
- Поисковая реклама Apple
- Awin
- Инструменты Bing для веб-мастеров
- CallRail
- Criteo
- Рекламная библиотека Facebook
- Facebook реклама
- Сеть аудитории Facebook
- Facebook Insights
- Публичные данные Facebook
- Google Менеджер рекламы
- Google AdSense
- Google Рекламы
- Гугл Аналитика
- Google Analytics 4
- Google Campaign Manager
- Google Дисплей и Видео 360
- Google Мой бизнес
- Google Search Ads 360
- Консоль поиска Google
- Google Trends
- HubSpot
- Статистика Instagram
- Публичные данные Instagram
- Klaviyo
- LinkedIn Ads
- Страницы LinkedIn
- Mailchimp
- Microsoft Advertising
- Moz
- Netvisor
- Оптимизировать
- Outbrain Amplify
- Реклама в Pinterest
- Pinterest Органический
- Публичные данные Pinterest
- Quora Ads
- Публичные данные Reddit
- Salesforce
- Salesforce Marketing Cloud
- Searchmetrics
- SEMrush Analytics
- Проекты SEMrush
- Shopify
- Smarp
- Snapchat маркетинг
- StackAdapt
- Полоса
- Табула
- Торговый стол
- TikTok Ads
- Публичные данные Tumblr
- Реклама в Твиттере
- Twitter Премиум
- Публичные данные Twitter
- Verizon Media DSP
- Нативная реклама Verizon Media
- Публичные данные Vimeo
- Публичные данные ВКонтакте
- Яндекс.Прямой
- Поля
- Таблицы хранилища данных
- Обновления
- Яндекс.Метрика
- YouTube
© 2021 Supermetrics
Условия использования · Политика конфиденциальности
Данные Яндекс.Метрики | Документация ClickHouse
- Начало работы
- Примеры наборов данных
Набор данных состоит из двух таблиц, содержащих анонимные данные о посещениях ( hits_v1
) и посещениях ( посещений_v1
) Яндекс.Метрика. Подробнее о Яндекс.Метрике читайте в разделе История ClickHouse.
Набор данных состоит из двух таблиц, любую из которых можно загрузить как сжатый файл tsv.xz
или как подготовленные разделы. В дополнение к этому, расширенная версия таблицы просмотров
, содержащей 100 миллионов строк, доступна в виде TSV по адресу https://datasets.clickhouse.tech/hits/tsv/hits_100m_obfuscated_v1.tsv.xz и в виде подготовленных разделов по адресу https: / /datasets.clickhouse.tech/hits/partitions/hits_100m_obfuscated_v1.tar.xz.
Получение таблиц из подготовленных разделов
Загрузка и импорт таблицы совпадений:
curl -O https://datasets.clickhouse.tech/hits/partitions/hits_v1.tar
tar xvf hits_v1.tar -C / var / lib / clickhouse # путь к каталогу данных ClickHouse
# проверить права доступа к распакованным данным, при необходимости исправить
sudo service clickhouse-server перезапуск
clickhouse-client --query "ВЫБРАТЬ СЧЕТЧИК (*) ИЗ datasets.hits_v1"
Скачивание и импорт посещений:
curl -O https: // datasets.clickhouse.tech/visits/partitions/visits_v1.tar
tar xvf visit_v1.tar -C / var / lib / clickhouse # путь к каталогу данных ClickHouse
# проверить права доступа к распакованным данным, при необходимости исправить
sudo service clickhouse-server перезапуск
clickhouse-client --query "ВЫБРАТЬ СЧЕТЧИК (*) ИЗ datasets.visits_v1"
Получение таблиц из сжатого файла TSV
Загрузите и импортируйте обращения из сжатого файла TSV:
curl https://datasets.clickhouse.tech/hits/tsv/hits_v1.tsv.xz | unxz --threads = `nproc`> hits_v1.цв
# Проверить контрольную сумму
md5sum hits_v1.tsv
# Контрольная сумма должна быть равна: f3631b6295bf06989c1437491f7592cb
# теперь создаем таблицу
clickhouse-client --query "СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ наборов данных"
clickhouse-client --query "СОЗДАТЬ ТАБЛИЦУ datasets.hits_v1 (WatchID UInt64, JavaEnable UInt8, строка заголовка, GoodEvent Int16, EventTime DateTime, EventDate Date, CounterID UInt32, ClientIP UInt32, ClientIP6 FixedString (16), RegionID UInt32, UserID UInt64, CounterClass Int8, OS UInt8, UserAgent UInt8, строка URL, строка Referer, строка URLDomain, строка RefererDomain, Refresh UInt8, IsRobot UInt8, RefererCategories Array (UInt16), URLCategories Array (UInt16), URLRegions Array (UInt32), RefererRegions (UInt32), RefererRegions), RefererRegions (UInt32), RefererRegions) ResolutionWidth UInt16, ResolutionHeight UInt16, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, FlashMinor2 String, NetMajor UInt8, NetMinor UInt8, UserAgentMajor UInt16, UserAgentMinor FixedPring (2), String UIEnable UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8, Javashone UInt8 , IPNetworkID UInt32, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, IsArtif ical UInt8, WindowClientWidth UInt16, WindowClientHeight UInt16, ClientTimeZone Int16, ClientEventTime DateTime, SilverlightVersion1 UInt8, SilverlightVersion2 UInt8, SilverlightVersion3 UInt32, SilverlightVersion4 UIntounce, PageCharset String, UINT32, Isldot, IsldotUInt32, PageCharset UInt32, IsldotUInt32, Isldot, CodeVersion UInt32, Isldot32 , IsEvent UInt8, IsParameter UInt8, DontCountHits UInt8, WithHash UInt8, HitColor FixedString (1), UTCEventTime DateTime, Age UInt8, Sex UInt8, Income UInt8, Interests UInt16, Robotness UInt8, GeneralInterests Array (UInt1632), RemoteIP6 ), WindowName Int32, OpenerName Int32, HistoryLength Int16, BrowserLanguage FixedString (2), BrowserCountry FixedString (2), SocialNetwork String, SocialAction String, HTTPError UInt16, SendTiming Int32, DNSTiming Int32, ConnectTiming Int32, ResponseStartTiming Intiming, Intimse32, ResponseStartTiming Intetch32, ResponseStartTiming Intetch32, ResponseStartTiming Intetch32 RedirectTiming Int32, DO MInteractiveTiming Int32, DOMContentLoadedTiming Int32, DOMCompleteTiming Int32, LoadEventStartTiming Int32, LoadEventEndTiming Int32, NSToDOMContentLoadedTiming Int32, FirstPaintTiming Int32, RedirectCount INT8, SocialSourceNetworkID Uint8, SocialSourcePage String, ParamPrice Int64, ParamOrderID String, ParamCurrency FixedString (3), ParamCurrencyID UInt16, GoalsReached Array (UInt32) , Строка OpenstatServiceName, Строка OpenstatCampaignID, Строка OpenstatAdID, Строка OpenstatSourceID, Строка UTMSource, Строка UTMMedium, Строка UTMCampaign, Строка UTMContent, Строка UTMTerm, Строка FromTag, HasGCLID UInt8, RefererHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt64, URLHash UInt String, ShareTitle String, ParsedParams Nested (Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), IslandID FixedString (16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree () PARTITION BY toYYYYMM (EventDate) ЗАКАЗАТЬ (Co unterID, EventDate, intHash42 (UserID)) ОБРАЗЕЦ ПО intHash42 (UserID) НАСТРОЙКИ index_granularity = 8192 "
# импорт данных
кошка hits_v1.цв | clickhouse-client --query "INSERT INTO datasets.hits_v1 FORMAT TSV" --max_insert_block_size = 100000
# при желании вы можете оптимизировать таблицу
clickhouse-client --query "OPTIMIZE TABLE datasets.hits_v1 FINAL"
clickhouse-client --query "ВЫБРАТЬ СЧЕТЧИК (*) ИЗ datasets.hits_v1"
Скачать и импортировать посещения из сжатого tsv-файла:
curl https://datasets.clickhouse.tech/visits/tsv/visits_v1.tsv.xz | unxz --threads = `nproc`> visit_v1.tsv
# Проверить контрольную сумму
md5сумма посещений_v1.цв
# Контрольная сумма должна быть равна: 6dafe1a0f24e59e3fc2d0fed85601de6
# теперь создаем таблицу
clickhouse-client --query "СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ наборов данных"
clickhouse-client --query "СОЗДАТЬ ТАБЛИЦУ datasets.visits_v1 (CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8 Строка, Строка StartURL, Строка RefererDomain, Строка StartURLDomain, Строка EndURL, Строка LinkURL, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, Строка SearchPhrase, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array (UInt16) Array (UIntategions), массив URLC16 (UIntategories) UInt32), RefererRegions Array (UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID с фиксированным идентификатором UIntring6, Client 16 (16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt 32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UIntone8, ClientT NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Возраст UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserLanguage UInt16, Браузер UInt16, BrowserLanguage UInt16, Браузер UInt16, Браузер UInt16 , Массив Params (строка), Вложенные цели (ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID UInt32), Массив WatchIDs (UInt64), ParamSumPrice Int64, ParamCurrency FixedString (3), ParamCurrencyID UInt16, ClickLogID ClickEventID Int32, ClickGoodEvent Int32, C lickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, Строка ClickURL, ClickAttempt UIntoryMarket32, ClickOntategory, ClickOttempt UIntoryMarkT32, ClickOttempt UIntoryMarkat32, ClickOttempt , Строка ClickMarketPPName, Строка ClickAWAPSCampaignName, Строка ClickPageName, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, Строка ClickOptions, Строка ClickGroupBannerID Int32, OpenstatServiceNameTM, OpenstatMServiceNameTM, UenstatMServiceNameTM, OpenstatMServiceName String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, TraficSource Nested (ID Int8, SearchEngineID UInt16, Adv EngineID UInt8, PlaceID UInt16, SocialSourceNetworkID UInt8, строка домена, строка SearchPhrase, строка SocialSourcePage), Attendance FixedString (16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, Нормальный UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled uint8, WebVisorActivity UInt32, ParsedParams Уплотненный (Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), Market Nested (Тип UInt8, GoalID UInt32, OrderID String, OrderPrice Int64, PP UInt32, DirectPlaceID UInt32, DirectOrderID UInt32, DirectBannerID UInt32, GoodID String, Good Строка имени, GoodQuantity Int32, GoodPrice Int64), IslandID FixedString (16)) ENGINE = CollapsingMergeTree (Sign) РАЗДЕЛЕНИЕ ПО toYYYYMM (StartDate) ORDER BY (CounterID, StartDate, intHash42 (UserID), VisitID) SAMPLE BY intHashINGS (User_ID) SETTular = 8192 "
# импорт данных
кошка visits_v1.цв | clickhouse-client --query "INSERT INTO datasets.visits_v1 FORMAT TSV" --max_insert_block_size = 100000
# при желании вы можете оптимизировать таблицу
clickhouse-client --query "OPTIMIZE TABLE datasets.visits_v1 FINAL"
clickhouse-client --query "ВЫБРАТЬ СЧЕТЧИК (*) ИЗ datasets.visits_v1"
Примеры запросов
Учебник ClickHouse основан на наборе данных Яндекс.Метрики, и рекомендуемый способ начать работу с этим набором данных — просто пройти обучение.
Дополнительные примеры запросов к этим таблицам можно найти среди stateful-тестов ClickHouse (они называются test.попадает в
и тест . там заходит
).
Системные таблицы съедают мой диск
Системные таблицы съедают мой диск
Примечание 1: Системная база данных хранит виртуальные таблицы ( частей, , таблиц, столбцов и т. Д. ) и таблицы * _log .
Виртуальные таблицы не сохраняются на диске. Они отражают память ClickHouse (структуры c ++). Их нельзя изменить или удалить.
Таблицы журнала именуются с постфиксом * _log и имеют механизм MergeTree.
Вы можете удалить / переименовать / обрезать * _log таблицы в любое время. ClickHouse воссоздает их примерно за 7 секунд (период очистки).
Примечание 2: Таблицы журнала с числовыми постфиксами (_1 / 2/3…)
query_log_1 query_thread_log_3
являются результатами обновлений Clickhouse. Когда новая версия Clickhouse запускается и обнаруживает, что схема таблицы системного журнала несовместима с новой схемой, Clickhouse переименовывает старую таблицу query_log в имя с префиксом и создает таблицу с новой схемой.Вы можете удалить такие таблицы, если вам не нужны такие исторические данные.
Вы можете отключить все / любое из них
Не создавать таблицы журнала вообще (для того, чтобы эти изменения вступили в силу, требуется перезапуск).
$ cat /etc/clickhouse-server/config.d/z_log_disable.xml
xml version = "1.0"?>
Мы не рекомендуем удалять query_log
и query_thread_log
, поскольку ведение журнала запросов можно легко отключить без перезапуска через профили пользователей:
$ cat / etc / clickhouse-server / users.d / z_log_queries.xml
<профили>
<по умолчанию>
0
0
Подсказка: z_log_disable.xml
назван с ** z _ ** в начале, это означает, что эта конфигурация будет применена последней и переопределит все другие файлы конфигурации с этими разделами (конфигурации применяются в алфавитном порядке).
Вы можете настроить TTL
Пример для query_log
. Удаляет разделы с данными старше 14 дней:
$ cat /etc/clickhouse-server/config.d/query_log_ttl.xml
xml version = "1.0"?>
система
query_log
ENGINE = MergeTree РАЗДЕЛЕНИЕ ПО (event_date)
ЗАКАЗАТЬ (event_time)
TTL event_date + ИНТЕРВАЛ 14-ДНЕВНОГО УДАЛЕНИЯ
НАСТРОЙКИ ttl_only_drop_parts = 1
7500
После этого необходимо перезапустить ClickHouse и удалить или переименовать существующую систему.query_log, затем CH создает новую таблицу с этими настройками.
ПЕРЕИМЕНОВАТЬ ТАБЛИЦУ system.query_log НА system.query_log_1;
Важной частью здесь является ежедневное разбиение на разделы PARTITION BY (event_date)
и ttl_only_drop_parts = 1
. В этом случае ClickHouse удаляет целые разделы. Удаление разделов — очень простая операция для CPU / Disk I / O.
Обычный TTL (без ttl_only_drop_parts = 1
) — это операция с большим объемом операций ввода-вывода ЦП / диска, которая перезаписывает части данных без просроченных строк.
Вы можете добавить TTL без перезапуска ClickHouse (и удаления или переименования таблицы):
ALTER TABLE system.query_log ИЗМЕНИТЬ TTL event_date + INTERVAL 14 DAY;
ИЗМЕНИТЬ ТАБЛИЦУ system.query_log ИЗМЕНИТЬ НАСТРОЙКУ ttl_only_drop_parts = 1;
Но в этом случае ClickHouse удалит только целые месячные разделы (будут хранить данные старше 14 дней).
Еще один способ настройки TTL для системных таблиц
Этот способ просто добавляет TTL к таблице и оставляет ежемесячное (по умолчанию) разделение (будут хранить данные старше 14 дней).
$ cat /etc/clickhouse-server/config.d/query_log_ttl.xml
xml version = "1.0"?>
система
query_log
event_date + ИНТЕРВАЛ 30-ДНЕВНОГО УДАЛЕНИЯ
После этого вам нужно перезапустить ClickHouse и удалить или переименовать существующую таблицу system.query_log, тогда CH создаст новую таблицу с этой настройкой TTL.
Вы можете отключить вход на уровне сеанса или в профиле пользователя (для всех или определенных пользователей)
Но только для журналов, созданных на уровне сеанса ( query_log
/ query_thread_log
)
В этом случае перезапуск не требуется.
Давайте отключим ведение журнала запросов для всех пользователей (профиль = по умолчанию, все остальные профили наследуют его).
кот /etc/clickhouse-server/users.d/log_queries.xml
<профили>
<по умолчанию>
0
0
Последнее изменение
2021 г.08.12
: Общие исправления и обновления. (5969b688)Успокаивающийся Clickhouse :: Блог :: TheOrangeOne
Clickhouse — это движок базы данных, ориентированный на столбцы, в основном предназначенный для аналитики. Он был разработан и развернут Яндексом в своем предложении для аналитики, но Plausible, мой любимый поставщик аналитики, использует его для хранения аналитических данных, поскольку он больше подходит для этого, чем PostgreSQL.
К сожалению, официальный док-контейнер довольно интенсивен. Как только Plausible запускается, Clickhouse перескакивает примерно на 10% использования ЦП и поддерживает 30 МБ / с записи в каталог базы данных.Мои почасовые снимки ZFS занимают более 1 ГБ каждый! Сервер, на котором я запускаю Plausible, достаточно мощный, но даже это просто безумие!
Сначала я подумал, что это ошибка в Plausible, так как она возникала только во время работы Plausible. Однако после того, как возникла проблема и сказали, что производственные серверы Plausible не , похоже, страдают от этой проблемы, пришло время копнуть глубже.
Прежде всего, давайте взглянем на каталог данных на предмет очевидных вещей:
$ df -hs clickhouse /
8.2G кликхаус
Ну, это точно не так! Давайте исследуем & mldr;
# Глядя на данные
Глядя на структуру файловой системы clickhouse /
(красивый простой макет!), Большая часть использования пришла из таблиц system.query_log
и system.query_thread_log
. Эти таблицы с метко названными названиями отвечают за регистрацию всех запросов, выполняемых Clickhouse, и для меня в них было более 20 миллионов строк, по в каждой, ! После просмотра документации он включен для помощи в отладке.Для большинства людей все эти данные на самом деле не нужны, и определенно не стоит жертвовать огромным объемом использования диска по сравнению с фактическими сохраненными данными.
# Файл журнала
Если посмотреть на файл журнала Clickhouse ( /var/log/clickhouse/clickhouse-server.log
), он оказался невероятно подробным и выводил гораздо больше, чем нужно. Уровень журнала по умолчанию установлен на , трассировка
, что в основном означает, что регистрируется абсолютно все, даже больше, чем обычные журналы отладки
.Уровень журнала , трассировка
соответствует мантре помощи при отладке, но, опять же, в большинстве сред он не нужен.
# Успокоение
Итак, учитывая то, как ведет себя Clickhouse, и регистрирует слишком много данных как в системных таблицах, так и в файлах журналов, как мы можем сделать так, чтобы снизить активность Clickhouse? Скорее всего, это дополнительная работа по ведению журнала как в таблицах, так и в файлах журналов, которая использует дополнительные ресурсы.
# Остановить ведение журнала запросов
Первый шаг и, вероятно, тот, который имеет наибольшее значение, — полностью отключить ведение журнала запросов.Это должно уменьшить количество циклов ЦП, затрачиваемых на сбор данных. Это выполняется с помощью переменных log_queries
и log_query_threads
в users.xml
:
<профили>
<по умолчанию>
0
0
# Уменьшить ведение журнала
Шаг 2 — уменьшить уровень журнала как для файлового регистратора, так и для любых других журналов таблиц, которые мы не можем полностью отключить.Это изменение сделано в config.xml
. Я установил уровень , предупреждение
, так что все еще очевидно, когда что-то не так, но все это входит в оболочку, так что все в порядке. Все журналы таблиц полностью отключены.
предупреждение
true
Для упрощения отладки я также отправляю журналы на консоль с
, поэтому его можно увидеть с помощью журналов docker-compose
.
Помимо уменьшения уровня журнала, я переместил файлы журнала на точку монтирования tmpfs
. Изначально я сделал это, чтобы уменьшить количество операций записи на диски, но это все равно есть на всякий случай, если что-то изменится.
# Освободите место на диске
Последний шаг — освободить место на диске, которое мы потеряли из-за чрезмерно подробных журналов. Поскольку все было зарегистрировано в таблицах, это все по-прежнему. Вероятно, это не сильно повлияет на производительность во время выполнения, но использование диска увеличилось с 8 ГБ до 200 МБ, что очень хорошо!
- Войдите в оболочку Clickhouse:
docker-compose exec clickhouse bash
- Обрезать существующие журналы:
clickhouse-client -q "ВЫБРАТЬ имя ИЗ системы.таблицы WHERE name LIKE '% log%'; "| xargs -I {} clickhouse-client -q" TRUNCATE TABLE system. {}; "
- Quit:
\ q
# Review
Прочитав документацию Clickhouse, вы обнаружите, что ее легко настроить для любого масштаба — неудивительно, учитывая, что ее использует Яндекс. С учетом сказанного, хотя настройки по умолчанию могут иметь смысл в таком масштабе, для меньшего варианта использования они не особенно подходят.
В настоящее время я все еще убежден, что в Plausible есть небольшая ошибка в проверках работоспособности, выполняющих слишком много запросов, но это еще один день расследования.
После внедрения этих изменений не только использование ресурсов упало с обрыва, но Plausible даже кажется немного более быстрым!
ST Долг и текущая часть Долгосрочный долг | 121 | 171 | 94 | 294 | — | |||||||||||
Краткосрочный долг | Краткосрочный долг | — | — | |||||||||||||
Текущая часть долгосрочного долга | — | — | — | 294 | — | |||||||||||
Кредиторская задолженность | 160 | 129 | ||||||||||||||
Рост кредиторской задолженности | 17.43% | 66,35% | 32,71% | 24,26% | — | |||||||||||
Налог на прибыль к уплате | 155 | 129 | 59 | 73 | 145 | 97 | 64 | 92 | 62 | |||||||
Дивиденды к выплате | — | — | — | — | 40 | 24 | 33 | 28 | ||||||||
Прочие краткосрочные обязательства | 90 | 57 | 40 | 58 | 35 | 429 | 619 | 240 9 0549 | ||||||||
Итого оборотные активы ТОЛЬКО ДЛЯ РАСЧЕТНЫХ ЦЕЛЕЙ | 3,926 | 1,937 | 1,324 | 1,403 | 1,228 | 2268 | 1869 | |||||||||
Запасы ТОЛЬКО ДЛЯ РАСЧЕТНЫХ ЦЕЛЕЙ | 65 | 13 | 4 | — | — | Денежные средства 905 СРОЧНЫЕ ОПЛАТЫ | ДЕНЕЖНЫЕ СРЕДСТВА 905 ИЛИ СРОЧНЫЕ ОПЛАТЫ | 1,422 | 993 | 1,151 | 1,035 | |||||
Коэффициент тока | 4.71 | 2,58 | 3,09 | 2,27 | 5,13 | |||||||||||
Коэффициент быстрой скорости | 4,63 | 2,57 | 3,08 | 2,27 | 62 5,13 905 | 2,31 | 1,86 | 4,32 | ||||||||
Долгосрочная задолженность | 1,299 | 175 | 181 | — | 307 | Капитализированная аренда | 1,126 | — | — | — | 307 | |||||
Неконвертируемая задолженность | 1,126 | — | — | — | — | — | (294) | 307 | ||||||||
Капитализированные обязательства по аренде | — | — | — | — | — | — | И сборы | — | — | — | — | — | ||||
Отложенные налоги | 30 | 2 | (28) | (21) | (21) | 905 Отложенные налоги — Кредит52 | 31 | 23 | 17 | 17 | ||||||
Отложенные налоги — дебет | 22 | 30 | 51 | 38 | 11 | |||||||||||
Прочие обязательства | ||||||||||||||||
Отложенное налоговое обязательство — необлагаемые резервы | — | — | — | — | — | |||||||||||
Прочие обязательства (искл.Доходы будущих периодов) | 63 | 38 | 8 | 23 | 18 | |||||||||||
Доходы будущих периодов | — | — | — | — | — | — | 9052,249 | 993 | 641 | 658 | 582 | |||||
Неакционерные резервы | — | — | — | — | Итого | 32.26% | 21,19% | 17,16% | 29,03% | 31,12% | ||||||
Привилегированные акции (балансовая стоимость) | — | — | — | — | Привилегированные акции, подлежащие выкупу | — | — | — | — | — | ||||||
Невозвратные привилегированные акции | — | — | — | 905 | выпусков приоритетных акций для ESOP | — | — | — | — | — | ||||||
Гарантии ESOP — привилегированные акции | — | — | — 905 | |||||||||||||
Обыкновенный капитал (всего) | 4,407 | 3,138 | 2,578 | 9 0548 1,4391,263 | ||||||||||||
Номинальная / балансовая стоимость обыкновенных акций | 4 | 4 | 4 | 5 | 5 | |||||||||||
Дополнительный выплачиваемый капитал | 1,096 | 1,005 | 286 | 272 | ||||||||||||
Нераспределенная прибыль | 1,987 | 1,967 | 1,607 | 1,182 | 905 905 905 905 905 | — | — | — | ||||||||
Совокупная корректировка пересчета / нереализованная для.Exch. Прибыль | 243 | 78 | 118 | 32 | 15 | |||||||||||
Нереализованная прибыль / убыток Рыночные ценные бумаги | — | — | — | — | — | Запасы | — | — | — | — | — | |||||
Прочие ассигнованные резервы | — | — | — | — | — | — | — | — | — | |||||||
Казначейские акции | (0) | (7) | (155) | (66) | 137 | |||||||||||
Общий капитал / Всего активов | 63.23% | 66,96% | 69,04% | 63,45% | 67,56% | |||||||||||
Всего Собственный капитал | 4,407 | 3,138 | 2,578 | 905 Собственный капитал / совокупные активы63,23% | 66,96% | 69,04% | 63,45% | 67,56% | ||||||||
Накопленная доля меньшинства | 314 | 905|||||||||||||||
Итого собственный капитал | 4,722 | 3,694 | 3,094 | 1,609 | 1,287 | |||||||||||
Обязательства и собственный капитал 48649 905 |
почему лань s Яндексу нужна собственная система MapReduce и принципы ее работы / Блог Яндекса / Sudo Null IT News
Последние шесть лет Яндекс работал над системой под кодовым названием YT (по-русски мы называем это «Yt»).Это основная платформа для хранения и обработки больших объемов данных — о ней мы уже говорили на YaC 2013. С тех пор она продолжала развиваться. Сегодня я расскажу о том, как начиналось развитие YT, что в нем появилось нового и что еще мы планируем сделать в ближайшее время. Кстати, 15 октября в офисе Яндекса мы поговорим не только о YT, но и о других наших инфраструктурных технологиях: Media Storage, Yandex Query Language и ClickHouse. На встрече мы раскроем секрет — расскажем, сколько систем MapReduce в Яндекс.Какую проблему решаем?
По роду своей деятельности Яндекс постоянно сталкивается с необходимостью хранить и обрабатывать данные таких объемов, с которыми обычному пользователю никогда не приходится иметь дело. Журналы и индексы поиска, пользовательские данные, картографическая информация, промежуточные данные и результаты алгоритмов машинного обучения — все это может занимать сотни петабайт дискового пространства. Для эффективной обработки таких объемов традиционно используется парадигма MapReduce, позволяющая добиться хорошего баланса между вычислительной эффективностью и простотой пользовательского кода.
В той или иной форме вычисления, подобные MapReduce, используются во всех крупнейших компаниях, занимающихся большими данными: Google, Microsoft, Facebook, Yahoo и других. Кроме того, де-факто MapReduce давно стал стандартом при работе с данными гораздо более скромного размера — не в последнюю очередь благодаря успешной реализации с открытым исходным кодом в фреймворке Hadoop MapReduce и наличию развитой экосистемы, которая предоставляет удобные аналитические инструменты поверх Уменьшение карты.
Конечно, далеко не все задачи успешно ложатся на модель MapReduce.Основное ограничение заключается в том, что он включает пакетное выполнение, при котором значительные объемы данных проходят через целую цепочку преобразований. Эти преобразования занимают минуты, часы, а иногда и многие дни. Такой способ работы не подходит для интерактивных ответов пользователям, поэтому, помимо вычислений MapReduce, традиционно используются такие системы, как хранилище KV (хранилище ключ-значение), которые позволяют читать и записывать данные (а также, возможно, некоторые вычисления. на них) с малой задержкой. Таких систем в мире много десятков: начиная с классических СУБД (Oracle, Microsoft SQL Server, MySQL, PostgreSQL), подходящих для хранения десятков и сотен терабайт данных, и заканчивая NoSQL-системами (HBase, Cassandra),
В случае MapReduce наличие нескольких разных и одновременно используемых систем не имеет особого смысла.Дело в том, что все они, по сути, решат одну и ту же проблему. Однако для KV-хранилищ степень разнообразия задач и общий уровень специфичности намного выше. В Яндексе мы используем сразу несколько таких систем. Часть данных хранится в MySQL, который зарекомендовал себя с точки зрения надежности и разнообразия функций. Там, где объем данных велик и важна скорость обработки, мы используем ClickHouse, проприетарную СУБД Яндекса. Наконец, последние три года мы активно работали над задачей создания хранилища KV в рамках YT.Мы используем его, когда требуется высокая надежность хранения, поддержка транзакций, а также интеграция с вычислениями MapReduce.
Почему бы не использовать стек Hadoop?
Для значительной части нашей собственной инфраструктуры больших данных существуют общедоступные продукты, решающие аналогичные проблемы. В первую очередь, конечно, речь идет об экосистеме Hadoop, на основе которой — теоретически — можно построить весь стек вычислений: от распределенной файловой системы (HDFS) и фреймворка MapReduce до репозиториев KV (HBase , Cassandra), инструменты для аналитики (Hive, Impala) и системы обработки данных (Spark).
Для малых и средних компаний, работающих с большими данными, Hadoop часто является безоговорочным выбором. В свою очередь, крупные игроки либо активно используют и развивают Hadoop (например, Yahoo и Facebook), либо создают собственную инфраструктуру (Google, Microsoft).
Выбирая между этими двумя возможностями, Яндекс пошел вторым путем. Это решение было непростым и, конечно, нельзя считать единственно правильным. Было учтено множество факторов. Постараемся кратко резюмировать наиболее значимые:
- Исторически сложилось так, что в Яндексе наибольший объем вычислительного кода написан на C ++; в то же время Hadoop в основном ориентирован на платформу Java.Само по себе это не смертельно — вы всегда можете написать адаптеры для поддержки старого кода для C ++ и разработать новые на Java. Однако стоит признать, что за годы разработки компания накопила немалый опыт именно в работе с C ++, а разработка на Java представлена гораздо скромнее.
- Примеры успешного использования Hadoop в таких компаниях, как Yahoo и Facebook, показывают, что для эффективного использования Hadoop обычно не берется его ванильная версия, а выполняется форк с последующей глубокой доработкой.Для его создания крайне желательно или даже необходимо иметь в компании разработчиков ядра Hadoop. Эти специалисты крайне редки даже по меркам американского ИТ-рынка, поэтому для Яндекса нанять их в достаточном количестве — очень сложная задача.
- Возможно, вышеупомянутый форк платформы никогда не будет вливаться в основную ветку разработки и больше не будет совместим с этой веткой. Тогда преимущество использования готовых экосистемных решений будет ограничиваться двумя наборами инструментов: которые вы можете «взять с собой» в момент разделения, и которые можно передавать по форку.
- Но зачем делать форк Hadoop? Почему бы не использовать общедоступные и развивающиеся версии, по возможности участвуя в их разработке? Дело в том, что, хотя сам Hadoop довольно хорош, он далек от совершенства. При работе над собственной инфраструктурой в Яндексе мы неоднократно сталкивались с задачами, которые можно было решить только ценой очень радикальных изменений наших систем. Поскольку у нас недостаточно знаний в области разработки Hadoop, мы не можем вносить столь масштабные изменения в общедоступные ветки.Такие радикальные исправления почти наверняка не пройдут проверку кода в разумные сроки.
- Также можно было предположить, что для полноценной интеграции Hadoop внутри компании не обязательно иметь высококвалифицированных специалистов по этой платформе — достаточно ограничиться услугами крупных интеграторов решений Hadoop, например, Cloudera. Однако здравый смысл и опыт близких нам по активности компаний показывают, что хотя такая помощь может быть полезна на первом этапе внедрения, сложные задачи, требующие значительных доработок кодовой базы Hadoop, все равно придется решать самостоятельно ( см., например, опыт работы с почтой.RU ).
Конечно, отказавшись от повторного использования готовых Hadoop-инструментов, мы сильно усложнили свою задачу, потому что нет возможности конкурировать с Hadoop-сообществом, насчитывающим многие сотни и тысячи разработчиков по всему миру. С другой стороны, как указывалось выше, фактическая невозможность получить по разумной цене критические изменения экосистемы для Яндекса, а также опыт компаний, использующих Hadoop, перевешивали все преимущества.
Учитывая сделанный нами выбор, мы вынуждены активно работать над наиболее актуальными частями инфраструктуры, вкладывая основные усилия в улучшение небольшого количества ключевых систем: самой платформы YT, а также инструментов, созданных на ее основе. .
Что мы теперь знаем?
Из вышесказанного следует, что YT как минимум является системой MapReduce. Верно, но не все. С самого начала YT создавался с целью стать основой для решения широкого круга вычислительных задач в области больших данных.
За три года, прошедшие со дня публикации отчета о YT на YaC, система претерпела значительное развитие. Многие из упомянутых тогда проблем были успешно решены. Однако нам не скучно, потому что компания (а вместе с ней и инфраструктура) активно развивается.Так что новые задачи приходят каждый день.
Кратко опишем текущую архитектуру YT.
Кластер
YT — это многокомпонентная система, единицей развертывания которой является кластер . Теперь мы поддерживаем кластеры с общим количеством серверов ( узел, ) до 10 000. На таком количестве машин мы можем хранить сотни петабайт данных, а также планировать и выполнять вычисления на сотнях тысяч ядер ЦП.
Большинство наших кластеров YT полностью расположены в одном центре обработки данных.Это сделано потому, что в процессе вычислений MapReduce важно иметь однородную сеть между машинами, чего практически невозможно достичь в наших масштабах, если они географически разделены. Из этого правила есть исключения: некоторые кластеры YT, в которых внутренние потоки данных невелики, тем не менее распределяются между несколькими DC. Так что полный отказ одного или нескольких из них не влияет на работу системы.
ДФС
Самый нижний уровень YT — это распределенная файловая система (DFS).Ранние реализации DFS были похожи на классические HDFS или GFS. Данные хранятся на дисках узлов кластера в виде небольших (обычно до 1 ГБ) фрагментов, называемых фрагментами . Информация обо всех блоках, доступных в системе, а также о том, какие файлы и таблицы присутствуют в DFS и из каких блоков они состоят, находится в памяти главных серверов .
Пространство имен (структура каталогов, имена файлов и таблиц в них, мета-атрибуты, права доступа и т. Д.) нашего DFS называется Cypress . В отличие от большинства традиционных файловых систем, Cypress поддерживает транзакционность, то есть позволяет атомарно выполнять сложные операции со своей структурой и данными. Например, в рамках транзакции Cypress можно атомарно загрузить в систему несколько файлов, а также отметить в мета-атрибутах факт прихода нового фрагмента данных. Cypress также поддерживает блокировку системы на узлах. Мы активно используем эту возможность на практике: один из кластеров YT распределен между дата-центрами и практически не хранит чанки, но его кипарис используется различными инфраструктурными процессами как высокодоступное хранилище метаданных и служба координации (по аналогии с Chubby, Zookeeper или etcd).
Учитывая количество машин, составляющих кластеры, отказы оборудования происходят каждый день и не являются уникальным явлением. Система разработана таким образом, чтобы выдерживать большинство типичных отказов автоматически, без вмешательства человека. В частности, в системе отсутствует так называемая единая точка отказа (SPoF), то есть ее работа не может быть прервана взломом одного сервера. Более того, с практической точки зрения важно, чтобы система продолжала работать в ситуации, когда большие подмножества произвольного размера (например, два случайно выбранных сервера в кластере) или даже целые структурные группы машин (скажем, стойки) ) неудача.
Для распределенной DFS главный сервер, если он один, формирует естественный SPoF, поскольку при его выключении система перестает принимать и передавать данные. Следовательно, с самого начала было реплицировано мастер-серверов . В простейшем случае мы можем предположить, что вместо одного главного сервера у нас есть три, состояние которых поддерживается идентичным. Система может продолжать работать, если какой-либо из трех главных серверов выйдет из строя. Такое переключение происходит полностью автоматически и не вызывает простоев.Синхронизация между набором главных серверов обеспечивается с использованием одной из разновидностей консенсусного алгоритма . В нашем случае мы используем библиотеку собственной разработки — она называется Hydra. Ближайшим аналогом Hydra с открытым исходным кодом является алгоритм Raft. Близкие идеи (алгоритм ZAB) используются в системе Apache Zookeeper.
Описанная схема с тремя реплицированными мастер-серверами хороша с точки зрения отказоустойчивости, но не позволяет масштабировать кластер под нужные нам тома.Дело в том, что по количеству метаданных мы остаемся ограниченными памятью отдельного мастер-сервера. Итак, около года назад мы реализовали прозрачную для пользователя систему сегментирования метаданных блоков, которую мы называем многоячеечной. При его использовании метаданные распределяются (как говорится, сегмент ) между разными триплетами главных серверов. Внутри каждого триплета по-прежнему работает Hydra, обеспечивая отказоустойчивость.
Обратите внимание, что сегментирование метаданных фрагментов в HDFS в настоящее время не поддерживается. Вместо этого предлагается использовать менее удобную федерацию HDFS — проект сомнительной полезности, потому что для небольших объемов данных он не имеет смысла, а опыт его использования в крупных компаниях, судя по отчетам, не всегда положительный.
Отказоустойчивость, конечно же, важна не только на уровне метаданных, но и на уровне данных, хранящихся в кусках. Для этого мы используем два метода. Первый — это репликация , то есть хранение каждого чанка в нескольких (обычно трех) копиях на разных серверах. Второй — кодирование стирания , то есть разбиение каждого фрагмента на небольшое количество частей, вычисление дополнительных частей с контрольными суммами и сохранение всех этих частей на разных серверах.
Последний метод особенно интересен. Если для хранения тома X используется обычная тройная репликация, необходимо потратить еще 2X на дополнительные реплики, затем с использованием соответствующих кодов стирания эти накладные расходы уменьшаются до X / 2. Учитывая объемы, с которыми нам приходится иметь дело (десятки и сотни петабайт) ) выигрыш огромен. В рамках наших существующих систем кодирование со стиранием доступно уже около четырех лет. Обратите внимание, что аналогичная поддержка в Hadoop (так называемая EC-HDFS) стала доступна менее года назад.
Таблицы
В отличие от пакета HDFS с Hadoop Mapreduce, где основной видимой для пользователя единицей хранения является файл, хотя файлы YT DFS присутствуют, они не используются так активно. Вместо этого данные в основном хранятся в таблицах, — наборах строк, состоящих из столбцов данных. При разработке системы мы приложили немало усилий, чтобы добиться эффективного и компактного хранения данных в таблицах. Мы объединяем идеи форматов хранения jarred (Hadoop ORC, Parquet) с различными алгоритмами сжатия блоков (lz4, gzip, brotli и т. Д.)).
Для пользователя такие детали реализации прозрачны: он просто устанавливает макет таблицы (указывает имена и типы столбцов), желаемый алгоритм сжатия, метод репликации и т. Д. Если в Hadoop пользователи вынуждены представлять таблицы в виде набора файлов, содержащих данные в определенном формате, пользователи YT используют термины таблиц в целом и их частей: они выполняют сортировку, операции сопоставления, сокращения и объединения, считывают таблицы по диапазонам строк и т. д.
MapReduce Scheduler
Большинство вычислений с данными, которые мы храним, выполняется в модели MapReduce.Как уже было сказано, общий пул вычислительной мощности кластера составляет сотни тысяч ядер. Их использование контролируется центральным планировщиком. Он разбивает большие вычисления (так называемые операции ), такие как отображение, сортировка, сокращение и т. Д., На отдельные локальные части ( задание ), распределяет ресурсы между ними, отслеживает их выполнение и обеспечивает отказоустойчивость путем перезапуска части вычислений в случае, если отказов.
Мы выделяем два основных ресурса для планирования: CPU и память.Чтобы разделить ресурсы между операциями, мы используем очень гибкую схему, Hierarchical Dominant Resource Fair Share, которая позволяет группировать вычисления в древовидную структуру и устанавливать ограничения (нижние и верхние) для отдельных поддеревьев. В частности, в рамках единого кластера на разных проектах одновременно проводятся как производственные, так и испытательные схемы. В том же кластере некоторые ресурсы выделяются для специальной аналитики.
За день на типичном большом кластере YT выполняется более 250 тысяч операций, всего 100 миллионов заданий.
На данный момент активный планировщик в кластере всегда один, но для отказоустойчивости в системе всегда есть пассивные резервные реплики. Когда основной планировщик выходит из строя на время порядка десяти секунд, он переключается на другую свою реплику. Последний восстанавливает состояние вычислительных операций и продолжает их выполнение.
Теперь планировщик является единственной наиболее загруженной машиной во всем кластере. Код планировщика неоднократно оптимизировался с учетом количества заданий (сотни тысяч) и операций (тысячи), которыми необходимо управлять одновременно.Нам удалось добиться высокой степени параллелизма, поэтому теперь мы фактически полностью используем ресурсы одной машины. Однако для дальнейшего роста размеров кластеров такой подход кажется тупиковым, поэтому мы активно работаем над созданием нового распределенного планировщика.
В настоящее время слой YT MapReduce ежедневно используется многими сотнями разработчиков, аналитиков и менеджеров Яндекса для выполнения аналитических расчетов с данными. Также его используют десятки различных проектов, которые автоматически подготавливают данные для наших основных сервисов.
КВ накопитель
Как уже неоднократно говорилось, расчеты MapReduce не охватывают весь спектр стоящих перед нами задач. Классические таблицы MapReduce (мы называем их статическими ) отлично подходят для эффективного хранения больших объемов данных и их обработки в операциях MapReduce. С другой стороны, это не способ заменить KV-накопитель. Действительно, типичное время чтения строки из статической таблицы измеряется сотнями миллисекунд. Запись в такую таблицу занимает не меньше времени и возможна только в конце, поэтому нет оснований говорить о каком-либо использовании таких таблиц.
Около трех лет назад в рамках YT мы начали работу над созданием новых динамических таблиц , подобных тем, которые используются в таких системах, как HBase и Cassandra. Для этого нам потребовалось провести множество улучшений базовых слоев (Hydra, DFS). В результате у нас действительно есть возможность создавать динамические таблицы для пользователя в рамках общего пространства имен MapReduce. Они поддерживают эффективные операции чтения и записи строк и их диапазонов по первичному ключу. Наша система отличается транзакционностью и строгой согласованностью (так называемый уровень изоляции snapshot ), а также поддержкой распределенных транзакций — то есть возможностью атомарно изменять несколько строк одной таблицы или даже несколько разных таблиц в одной транзакции.
С точки зрения ближайших аналогов наши динамические таблицы близки к классическим идеям BigTable и HBase, но адаптированы для поддержки более сильной транзакционной модели. В то же время, несмотря на схожие базовые принципы, нам не кажется реалистичным добавлять аналогичные функции к существующим системам с открытым исходным кодом, скажем, в HBase, путем фиксации исправлений. (Например, см. Билет, в котором обсуждается перенос части кода из проекта HydraBase, который разрабатывается на Facebook, на HBase.Пример особенно показателен из-за того, что функциональность HydraBase, которая увеличивает доступность системы за счет горячей репликации региональных серверов, чрезвычайно важна для наших приложений, и мы поддерживаем ее внутри YT.)
В верхней части этих таблиц, у нас также есть возможность распределенно выполнять интерактивные запросы, включая фильтрацию, агрегирование и простейшие типы объединений. (Среди общедоступных систем такие возможности предоставляет, например, Impala или Presto.) В Яндексе крупнейшим пользователем динамических таблиц является Баннерная система, которая хранит информацию о кликах и показах рекламы и предоставляет рекламодателям возможность анализировать свои кампании. Как и любой достойный распределенный репозиторий KV, YT может обрабатывать многие миллионы операций чтения и записи в секунду.
Какие у нас планы?
Даже из приведенного выше описания легко понять, что система активно развивается. Действительно, учитывая масштаб и амбициозность стоящих перед нами задач, трудно придумать хотя бы один аспект системы, который нельзя было бы улучшить после получения четкой и хорошо измеримой выгоды.
В заключительной части стоит выделить ряд долгосрочных девелоперских проектов, которыми мы занимаемся в рамках YT.
Межцентровая репликация
Компании масштаба Яндекса не могут позволить себе зависеть от одного центра обработки данных, и фактически кластеры YT развертываются сразу в нескольких. Задача синхронизации данных между ними одновременно сложна и важна, поскольку она позволяет перенести некоторые заботы об отказоустойчивости с высокоуровневых сервисов на основную инфраструктуру.
В случае, когда объем хранимых данных невелик, мы традиционно развертываем инсталляции YT между центрами обработки данных, которые могут выдержать потерю целых центров обработки данных. С другой стороны, у этого подхода есть несколько недостатков. В частности, разработка и обновление таких инсталляций между центрами обработки данных — очень нетривиальная задача. Дело в том, что требуется обеспечить максимально близкое к 100% время безотказной работы.
Система из набора полунезависимых кластеров, по одному в каждом центре обработки данных, выглядит более удобной с операционной точки зрения.Поэтому мы часто используем отдельные кластеры с настроенными автоматическими процессами для репликации данных между статическими таблицами в них.
Мы также учимся реплицировать динамические таблицы — это позволяет нам реализовывать различные режимы репликации (синхронный, асинхронный) и запись кворума в наборе центров обработки данных.
Дальнейшее масштабирование мастер-серверов
Итак, в YT мы узнали, как сегментировать часть метаданных главного сервера, относящуюся к чанкам. Но пользователи в большинстве случаев работают не напрямую с чанками, а с деревом файлов, таблиц и каталогов, то есть с Cypress.Мы по-прежнему храним это дерево в памяти одного мастер-сервера (трех с учетом репликации), что, естественно, ограничивает количество узлов в нем на уровне около 100 миллионов. По мере роста числа пользователей и расширения кластеров нам, вероятно, придется решать проблему сегментирования этого фрагмента метаданных.
Интеграция статических и динамических таблиц
Несмотря на то, что изначально динамические таблицы создавались «отдельно» от модели MapReduce и статических таблиц, довольно быстро стали очевидны преимущества возможности объединения этих инструментов в одном вычислении.
Например, вы можете построить длинную цепочку MapReduce, вычисляя статическую таблицу с индексом для сервиса, а затем легким движением руки превратить ее в динамическую, загрузить в память и дать передовой- конец сервиса возможность сбора интересующих его данных с задержкой, измеряемой в миллисекундах.
Или, скажем, можно в процессе выполнения сложных вычислений MapReduce подать заявку на получение справочных данных в динамическую таблицу, выполнив так называемое соединение на стороне карты.
Интеграция динамики и статики в рамках YT — это большой и сложный проект, который еще далек от завершения, однако он позволяет кардинально упростить и оптимизировать решение ряда задач, которые традиционно считаются сложными.
Облачная мощность
Не секрет, что значительную часть парка серверов Яндекса составляют так называемые поисковые кластеры , состоящие из машин, которые непосредственно хранят данные поискового индекса и отвечают на запросы пользователей.