powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Украина - вперёд с Vertica!
25 сообщений из 52, страница 2 из 3
Украина - вперёд с Vertica!
    #38623661
loki1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSAlexander RyndinА сейчас говоришь про сегментацию и мастера, и детайла по PK.

P.S. Ну ты сравнил файловую помойку Hadoop и Vertica. У них же вообще абсолютно разные принципы хранения данных, зеркалирования и прочее. Они даже близко не похожи. Поэтому поведение Хадупа на Вертику генерировать не корректно. Так же как и например поведение Нетизы, которая по принципам хотя и ближе к Вертике, но так же отличий столько, что поведение совершенно разное (я уж молчу про ГринПлам).
BTW интересно, есть ли у хваленой вертики что-то подобное:
https://www.google.com/patents/US20110093499
или http://www.teradata.com/web-seminars/PayPal-Dealing-with-Natural-Data-Skew/
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623663
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984,

Алгоритмы будут зависеть от ситуации (статистики и подходящих проекций). Если измерение небольшое, то все измерение просто зеркалируется по нодам, если большое, то произойдет BROADCAST по частям, если на факте висит сортировка по FK, то вместо обьединения через хэш-таблицы (HASH JOIN) произойдет соединение путем объедения записей упорядоченных значений колонок (MERGE JOIN).

Ситуацию, чтобы Вертика не смогла эффективно распределить между серверами соединение или агрегацию, уведя большой объем работ на инициализирующую ноду и заставив ее все собирать я видел пару раз в жизни и то это были запросы на соединение больших фактовых таблиц и больших измерений с количеством джойнов более полсотни. Но опять же, под такие большие запросы имеет смысл делать реоптимизацию структуры хранения данных. Например, никто не мешает сделать JOIN проекцию на факт+измерения, если этим измерения всегда цепляются INNER JOIN. В таком случае без разницы, как сегментируются измерения и факты, их джойн проекция будет лежать сразу в одном месте по нужным полям измерений с фактами и все это лежат рядом на серверах. Этакая материальная проекция, позволяющая дематериализовать нужные поля измерений в факты без затрат по кодированию и сопровождению. В ситуации с 30 миллионами клиентов конечно смысла возится с такой проекцией нет, но вот если их хотя бы миллионов 100, наверное имеет смысл уже подумать ее сделать.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623672
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinОчень простой и довольно распространенный кейс: есть табличка-измерение - 30 млн. клиентов, а также табличка фактов с операциями этих клиентов (для простоты пускай это будут звонки/смс). Допустим 20% звонков/смс сделаны с 2-10 служебных номеров (Яндекс-такси, Сбербанковский информатор и т.д.). Как тогда будешь пилить данные между узлами?

Стандартное решение дня МРР: сегментировать и то и то по своим ключам. Получаем равномерное распределение данных, но проблему джойнов.
В Вертике можно измерению сказать unsegmented all nodes, тогда оно расклонируется по всем нодам, 30 млн записей - фигня, физического места займут немного, лицензий вообще не потратится дополнительных, зато не будет поражняка в сети кластера и производительность вырастет.
Плюс у Вертики всегда есть доп.проекции, которые и сегментируются, и сортируются по другим правилам нежели таблица (суперпроекция).
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623677
loki1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,

у нас конкретный пример от Александра: есть 30 МЛН клиентов, есть операции по ним. Среди этих 30 МЛН есть 5 клиентов, чьи операции занимают 20% от всей таблицы. Допустим у нас 100 параллельных процессов обработки, на которых хранятся данные.
Если размазывать данные по клиентам, то на 5 из 100 серверов данных окажется больше в разы. То, что называется skew.

Если таблица с операциями будет распределена по своему ключу, то проблема встанет всё равно, т.к. предположительно все равно в момент join будет распределение по ключу клиента. Как конкретно в вертике решена эта проблема?
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623678
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984ASCRUS,

у нас конкретный пример от Александра: есть 30 МЛН клиентов, есть операции по ним. Среди этих 30 МЛН есть 5 клиентов, чьи операции занимают 20% от всей таблицы. Допустим у нас 100 параллельных процессов обработки, на которых хранятся данные.
Если размазывать данные по клиентам, то на 5 из 100 серверов данных окажется больше в разы. То, что называется skew.

Если таблица с операциями будет распределена по своему ключу, то проблема встанет всё равно, т.к. предположительно все равно в момент join будет распределение по ключу клиента. Как конкретно в вертике решена эта проблема?

В предыдущем посте ответ.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623687
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984,

Гм, а я недостаточно подробно объяснил как ? :)
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623696
loki1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vovakaloki1984ASCRUS,

у нас конкретный пример от Александра: есть 30 МЛН клиентов, есть операции по ним. Среди этих 30 МЛН есть 5 клиентов, чьи операции занимают 20% от всей таблицы. Допустим у нас 100 параллельных процессов обработки, на которых хранятся данные.
Если размазывать данные по клиентам, то на 5 из 100 серверов данных окажется больше в разы. То, что называется skew.

Если таблица с операциями будет распределена по своему ключу, то проблема встанет всё равно, т.к. предположительно все равно в момент join будет распределение по ключу клиента. Как конкретно в вертике решена эта проблема?

В предыдущем посте ответ.
Не увидел в момент написания поста. По сути это то же самое, что гонять по сети эти 30 млн в момент join, только снижается нагрузка на сеть, зато растёт объём хранимых данных в N=кол-во параллельных процессов. В принципе справедливо, чем-то надо жертвовать.

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

Или если есть возможность распределить данные по паре ключей, опять же проблемы не будет. Например если у сети магазинов есть гипермаркеты и магазины у дома, остатки можно сегментировать по паре магазин+товар и skew не будет.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623698
loki1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS, вы нет, vovaka да.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623706
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984,

Я с этим сталкивался просто :) Не из книжек пример.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623711
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VovakaAlexander RyndinОчень простой и довольно распространенный кейс: есть табличка-измерение - 30 млн. клиентов, а также табличка фактов с операциями этих клиентов (для простоты пускай это будут звонки/смс). Допустим 20% звонков/смс сделаны с 2-10 служебных номеров (Яндекс-такси, Сбербанковский информатор и т.д.). Как тогда будешь пилить данные между узлами?

Стандартное решение дня МРР: сегментировать и то и то по своим ключам. Получаем равномерное распределение данных, но проблему джойнов.
В Вертике можно измерению сказать unsegmented all nodes, тогда оно расклонируется по всем нодам, 30 млн записей - фигня, физического места займут немного, лицензий вообще не потратится дополнительных, зато не будет поражняка в сети кластера и производительность вырастет.
Плюс у Вертики всегда есть доп.проекции, которые и сегментируются, и сортируются по другим правилам нежели таблица (суперпроекция).Если это измерение из 30 млн. записей раскопировать по всем нодам, то, мне кажется, и JOIN будет происходить несколько медленее. А потом, когда я еще чего нибудь захочу сгруппировать по столбцам, отличным от ключа секционирования, то начнется еще большее веселье.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623717
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984Vovakaпропущено...


В предыдущем посте ответ.
А вообще пример довольно надуманный конечно. Оракл его везде приводит, т.к. только в этом случае может потягаться с MPP. Если кол-во таких клиентов с большим числом операций будет больше чем кол-во единиц параллелизма, то проблема вообще исчезнет.
Хэш алгоритмы, которые распределяют данные по нодам не столь умны, чтобы каждого такого клиента положить на свою ноду. Есть ненулевая вероятность, что при разбиении на секции они могут упасть на одну ноду.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623719
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Ryndinloki1984,

Я с этим сталкивался просто :) Не из книжек пример.

Абонентскую базу явно проще клонировать по нодам MPP. Винты сейчас большие и недорогие. У Facebook кластер Вертики 255 серверов и на каждом 15 х 4ТБ дисков, какой raid не знаю правда, но все равно сильно.

Кстати, на пилот в FB кроме Вертики не вышел ни один из вендоров больше, к чему бы это? :) Пилот правда был на 1 ПТ, но что это за проблема для именитых вендоров? ;)
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623725
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinЕсли это измерение из 30 млн. записей раскопировать по всем нодам, то, мне кажется, и JOIN будет происходить несколько медленее.

Это почему это? Джойны будут локально на нодах происходить.

Alexander RyndinА потом, когда я еще чего нибудь захочу сгруппировать по столбцам, отличным от ключа секционирования, то начнется еще большее веселье. Ну да, тут хуже. Но в Вертике можно сделать проекцию и под такой запрос и опять все полетит, но в жертву принесем физическое место.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38623732
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loki1984ASCRUS,

у нас конкретный пример от Александра: есть 30 МЛН клиентов, есть операции по ним. Среди этих 30 МЛН есть 5 клиентов, чьи операции занимают 20% от всей таблицы. Допустим у нас 100 параллельных процессов обработки, на которых хранятся данные.
Если размазывать данные по клиентам, то на 5 из 100 серверов данных окажется больше в разы. То, что называется skew.

Если таблица с операциями будет распределена по своему ключу, то проблема встанет всё равно, т.к. предположительно все равно в момент join будет распределение по ключу клиента. Как конкретно в вертике решена эта проблема?
Еще раз. Данные фактов не будут размазываться по клиентам. Это контрпродуктивно. Так же, как и по городам, полу и прочему :) Данные фактов будут сегментироваться по уникальному ключу, чаще всего это PK. Но помимо сегментации данные фактов будут на каждом сервере храниться в упорядоченном виде, если в сортировке хранения проекции указать Код Клиента. С учетом того, что Вертика колонориентированный сервер, каждой ноде кластера получить с фактов список ключей клиентов и попросить другие ноды дослать ей по этому списку нужные записи для соединения дело миллисекунд. Не нужно будет даже полную копию измерения собирать со всех нод и рассылать на все ноды. BROADCAST будет минимальным. Если же на сам запрос к фактам еще накладывается общий фильтр по другим полям, это вообще будет замечательно выглядеть - оптимизатор наложит фильтр, очертит круг нужных записей, с них получит на каждой ноде ид клиентов, соберет по спискам с других нод, далее в зависимости от запроса сверху каждая нода проведет дальнейшие действия (сортировка, агрегация, окна, ...).

Если же соединений очень много и измерения большие, то проще всего даже не зеркалировать их по нодам, указав Вертике в явном виде, а просто сделать преджойн проекцию с денормализацией звезды (полей измерений в факт).
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38624077
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VovakaAlexander RyndinЕсли это измерение из 30 млн. записей раскопировать по всем нодам, то, мне кажется, и JOIN будет происходить несколько медленее.

Это почему это? Джойны будут локально на нодах происходить.

Alexander RyndinА потом, когда я еще чего нибудь захочу сгруппировать по столбцам, отличным от ключа секционирования, то начнется еще большее веселье. Ну да, тут хуже. Но в Вертике можно сделать проекцию и под такой запрос и опять все полетит, но в жертву принесем физическое место.
А проекция это что?? эдакое Materialized view?
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38624105
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSкаждой ноде кластера получить с фактов список ключей клиентов и попросить другие ноды дослать ей по этому списку нужные записи для соединения дело миллисекунд. Не нужно будет даже полную копию измерения собирать со всех нод и рассылать на все ноды. BROADCAST будет минимальным.
Клевая фича. Броадкаст будет не фактов а измерения. Кстати гринплам так не умеет. Он даже и сортировку внутри нод не делает.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38624212
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakА проекция это что?? эдакое Materialized view?

Ну больше всего похоже на матвью, да. Это набор колонок таблицы (или нескольких для преджойн проекций), которые хранятся (дублируя данные в суперпроекции) по своим правилам сортировки и сегментирования. Оптимизатор выбирает наиболее подходящую проекцию для запроса.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38625693
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakASCRUSкаждой ноде кластера получить с фактов список ключей клиентов и попросить другие ноды дослать ей по этому списку нужные записи для соединения дело миллисекунд. Не нужно будет даже полную копию измерения собирать со всех нод и рассылать на все ноды. BROADCAST будет минимальным.
Клевая фича. Броадкаст будет не фактов а измерения. Кстати гринплам так не умеет. Он даже и сортировку внутри нод не делает.
Там еще один нюанс - Вертике можно же указать способ хранения для столбцов (encoding). Возвращаясь к тому примеру с 20% 5 клиентов от всей таблицы. В фактовой таблице делаем сортировку по полю account_id и назначаем ему ENCODING RLE. Теперь этот столбец будет хранится как КодКлиента:КоличествоИдущихПодрядЗаписей. При чтении контейнеров для запроса Вертика изначально уже не будет просматривать значения колонки клиента по всем записям таблицы, которые легли в этот блок, там будет ровно столько записей на эту колонку, сколько уникальных значений во всех записях этого контейнера кода клиента там присутствует. То есть моментально, вне зависимости от размера контейнера (они по мере ухода в историчность еще и укрупняются, дефрагментируясь). В этом плане кодирование хранения великая штука. Например у нас есть большой символьный код группы, групп ограниченное число, поиск по нему идет, но сортировка не выгодна по каким то причинам. Делаем ENCODING BLOCK_DICT и Вертика в контейнерах вместо самих кодов хранит значения счетчика, а все коды, используемые в записях хранимого контейнера записывает как словарик в начало контейнера кодируя внутренним счетчиком. Теперь при работе с таким кодом группы достаточно просто считать заголовок контейнера и сразу увидеть все значения, которые присутствуют в этом контейнере по этому полю. Так как записей в одном контейенере на таблицу могут быть миллионы, очень экономичный способ поиска информации без дополнительных на хранение или процессорное время, как это происходит при алгоритмах индексации данных, упорядоченного хранения и т.д. Ну а если учесть, что на каждый хранимый контейнер в заголовок пишется его статистика по полям, то вообще быстрый поиск информации без полного просмотра данных на хороших скоростях шуршит. В Нетизе помнится тоже статистика по блокам хранения данных хранится, но в отличие от Вертики у них блоки фиксированной длины, на больших объемах их много просматривать приходится, у Вертики в этом плане склонность к автоматическому укрупнению хранения данных по мере их устаревания мне кажется правильно сделано.
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38625717
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это как раз уже все умеют
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38634889
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakКлевая фича. Броадкаст будет не фактов а измерения. Кстати гринплам так не умеет. Он даже и сортировку внутри нод не делает.

Вы хотите сказать что greenplum, сортировку делает только на мастер-ноде?
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38635522
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLMantisIvan DurakКлевая фича. Броадкаст будет не фактов а измерения. Кстати гринплам так не умеет. Он даже и сортировку внутри нод не делает.

Вы хотите сказать что greenplum, сортировку делает только на мастер-ноде?
нет, сортировку он делает на всех нодах паралельно. Но он НЕ ХРАНИТ данные отсортированными (так как я понял делает Вертика и Террадата) !!!
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38635748
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakSQLMantisпропущено...


Вы хотите сказать что greenplum, сортировку делает только на мастер-ноде?
нет, сортировку он делает на всех нодах паралельно. Но он НЕ ХРАНИТ данные отсортированными (так как я понял делает Вертика и Террадата) !!!

проекция (поправте меня если я не прав) - это еще одна копия данных на ноде, которая отсортирована в порядке указанном при ее создании.
Чем это отличается от индекса?
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38636019
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLMantisIvan Durakпропущено...

нет, сортировку он делает на всех нодах паралельно. Но он НЕ ХРАНИТ данные отсортированными (так как я понял делает Вертика и Террадата) !!!

проекция (поправте меня если я не прав) - это еще одна копия данных на ноде, которая отсортирована в порядке указанном при ее создании.
Чем это отличается от индекса?
Это вообще про какую субд вопрос???
В гринпламе никаких проекций нет
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38636064
Фотография Vovaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLMantisпроекция (поправте меня если я не прав) - это еще одна копия данных на ноде, которая отсортирована в порядке указанном при ее создании.
Чем это отличается от индекса?

Да, так. При создании таблицы в Вертике создается суперпроекция со всеми колонками, сортированная, сегментированная, партиционированная по заданным правилам. Создание доп. проекций означает новую физическую копию части колонок таблицы (или колонок разных таблиц в преджойн проекциях) со своими правилами физического хранения (сортировка, сегментирование). Оптимизатор выберет наиболее подходящую. Больше всего это похоже на матвью. Индексы с успехом заменяют сортировка и формат кодирования хранения данных. Есть еще группировка колонок, когда можно указать набор колонок, которые физически будут храниться вместе. А-ля row storage внутри колоночного :)
...
Рейтинг: 0 / 0
Украина - вперёд с Vertica!
    #38636274
SQLMantis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VovakaДа, так. При создании таблицы в Вертике создается суперпроекция со всеми колонками, сортированная, сегментированная, партиционированная по заданным правилам. Создание доп. проекций означает новую физическую копию части колонок таблицы (или колонок разных таблиц в преджойн проекциях) со своими правилами физического хранения (сортировка, сегментирование). Оптимизатор выберет наиболее подходящую. Больше всего это похоже на матвью. Индексы с успехом заменяют сортировка и формат кодирования хранения данных. Есть еще группировка колонок, когда можно указать набор колонок, которые физически будут храниться вместе. А-ля row storage внутри колоночного :)

Спасибо, большое. Стало интересно и я вчера почитал документацию.
Действительно интересная возможность. А почему слияние только inner?
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Украина - вперёд с Vertica!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]