Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Константин ЛисянскийДа, но есть факт - за последние три года более сотни крупных компаний заменили Оракл на Терадату в качестве корпоративного хранилища данных. ЗА прошлый год не было ни одной замены в обратную сторону (в предыдущие годы только несколько, которые также можно поставить под вопрос). Конкретно у меня нет такой статистики. Ни в ту ни в другую сторону, так что примем это на веру. Константин Лисянский BirkhoffТо есть куски базы данных распределяются между серверами?Абсолютно верно. С одним уточнением - куски КАЖДОЙ таблицы (каждого индекса тоже), включая даже таблицы системного каталога. Вот это кстати очень интересно. А как происходит процесс добавления нового сервера в кластер? Делается ли распределение данных автоматически или это делает администратор? Есть ли выделенный сервер, к которому все обращаются с запросами где что лежит, или каждый узел знает все о каждом другом? И как происходит апдейт данных и распределение проапдейченных данных по узлам? И как обеспечивается отказоустойивость кластера в котором 300 серверов. Ведь вероятность выхода из строя какого то из узлов резко возрастает? Потом как можно распараллелить в такой схеме операцию типа Distinct count? Константин ЛисянскийВ какой версии CBO от Оракл перестал иметь необходимость принимать от разработчика хинты для нормальной работы? :) Начиная с 10й Oracle предупреждает, что использовать хинты - мешать работе сервера. Rule based optimizer не суппортится и в будущем может вообще исчезнуть. Константин ЛисянскийНи одна СУБД, использующая хэширование не использует хэширование для доступа к данным, только Терадата. Если данные в Оракле распартиционированы хешем, неужели он потом не используется для извлечения? :) Константин Лисянский BirkhoffВ Oracle для переживания падения узлов есть Real Application Clusters.Всё здорово, но где Вы видели систему на Оракл, состоящую хотя бы из десятка узлов (не говоря о сотнях)?Ну вы же сами говорите, что у Терадаты модель shared nothing. У Oracle это не так. Поэтому масштабирование достигается не кластеризацией на 300 серверов, а железом и дисковыми массивами. Константин Лисянский BirkhoffА дублирование и страйпинг на уровне СУБД делается, например с помощью ASM (Automatic Storage Management)Не знаю, что это такое. Можно ли, например, в Оракл средствами СУБД продублировать только одну критически важную таблицу?В силу опять же другой модели дублируются все таблицы, хотя допускаю, что можно придумать схему, при которой будет дублироваться только одна, но не уверен что это нужно. Константин Лисянский BirkhoffP.S. Вообще, неблагодарное это занятие - рассказывать чем твой продукт лучше, чем продукт конкурента, а тем более чем конкурент хуже :) Конкуренты обычно знают свой продукт лучше и могут найти ответ.Согласен на все сто. На то она и конкуренция. Я не старался сказать, что Оракл хуже. Я просто хотел показать, какие свойства есть у Терадаты и как они обеспечивают ей конкурентные преимущества. Несмотря на провокационность Ваших вопросов :) Да я в общем-то не провоцирую, а пытаюсь получить ответы на вопросы, которые меня интересуют :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 15:54 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffНу вы же сами говорите, что у Терадаты модель shared nothing. У Oracle это не так. Поэтому масштабирование достигается не кластеризацией на 300 серверов, а железом и дисковыми массивами. Странно, а в доке по 10g пишут, что при помощи RAC платформы shared nothing поддерживаются, и даже некие рекомендации есть как partitioning в этом случае лучше организовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 16:15 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Андрей Прохоров BirkhoffНу вы же сами говорите, что у Терадаты модель shared nothing. У Oracle это не так. Поэтому масштабирование достигается не кластеризацией на 300 серверов, а железом и дисковыми массивами. Странно, а в доке по 10g пишут, что при помощи RAC платформы shared nothing поддерживаются, и даже некие рекомендации есть как partitioning в этом случае лучше организовать. Честно говоря первый раз об этом слышу. (из чего, конечно, не следует, что этого нет :) ) А можете показать, где в документации об этом написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 16:52 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffЧестно говоря первый раз об этом слышу. (из чего, конечно, не следует, что этого нет :) ) А можете показать, где в документации об этом написано? Data Warehousing Guide 10g Release 1 (10.1) Page 5-28 "... In Oracle Real Application Clusters environments on shared-nothing platforms (MPPs), each hash partition of sales should preferably have affinity to only one node in order to avoid remote I/Os ..." Вероятно, пример Teradata и DB2 постепенно и Oracle начинает склонять к shared nothing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 17:04 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffВот это кстати очень интересно. А как происходит процесс добавления нового сервера в кластер? Делается ли распределение данных автоматически или это делает администратор? Подключается новый узел (сервер), запускается утилита reorg. Дальше всё делается автоматически. При этом часть данных с существующих узлов мигрируют на новый. BirkhoffЕсть ли выделенный сервер, к которому все обращаются с запросами где что лежит, или каждый узел знает все о каждом другом? Такого выделенного сервера нет. Существуют виртуальные прецессы (называются Parsing Engine - PE), которые управляют в том числе и пользовательскими сессиями. Каждый процесс обслуживает до 120 соединений. Такие процессы конфигурируются так, что они работают на нескольких узлах системы. Процессы, работающие на разныз узлах общаются посредством коммуникационного слоя, состоящего из железки (коммутатор BYNET) и соответствующего софта (если сообщаются процессы внутри одного узла, трафик остаётся локальным через драйвер BYNET). BirkhoffИ как происходит апдейт данных и распределение проапдейченных данных по узлам? Похоже, я этот вопрос не до конца понял. Если имеется в виду добавление нового узла, часть данных мигрирует, это я уже упомянул. Если имеется в виду операция UPDATE, то если она касается так называемого PRIMARY INDEX (набора столбцов, по которым производится распределение данных), то при его изменении с большой вероятностью запись отправляется на другой узел. BirkhoffИ как обеспечивается отказоустойивость кластера в котором 300 серверов. Ведь вероятность выхода из строя какого то из узлов резко возрастает? Для этого существует понятие клики. Клика - это группа, как правило из четырёх узлов, имеющих физический доступ к одному и тому же RAID-масиву (в конфигурации с 300 узлами таких массивов будет много). Соответственно, если один ужел из клики умирает, то виртуальные процессы мигрируют на оставшиеся узлы, но физически они по-прежнему обрабатывают свою часть данных. BirkhoffПотом как можно распараллелить в такой схеме операцию типа Distinct count? Могу пока только привести пан запроса. Запрос: Код: plaintext План: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Видно, что непараллельных шагов здесь нет. Очевидно, распараллеливается. Тонкостей реализации именно DISTINCT COUNT не знаю. Сорри. BirkhoffНачиная с 10й Oracle предупреждает, что использовать хинты - мешать работе сервера. Rule based optimizer не суппортится и в будущем может вообще исчезнуть. Вот это я и имел в виду. То есть в 9ке хинты всё ещё нужны. В Терадате они отсутствуют напрочь. BirkhoffЕсли данные в Оракле распартиционированы хешем, неужели он потом не используется для извлечения? :) ОК. Требуются пояснения. Дело в том, что в Терадате при создании таблицы вы должны указать набор столбцов, который будет использоваться для хэширования (PRIMARY INDEX). Хэш-функция в Терадате всегда выдаёт один и тот же результат для одного и того же входного значения (т.е это не round robbin и не генератор случайных чисел). Файловая система Терадаты в пределах одной и той же конфигурации (количество единиц параллелизма) ВСЕГДА отправляет запись с одним и тем же значением PRIMARY INDEX на одну и ту же единицуу параллелизма (в Терадате она называется Access Module Processor - AMP). Соответвенно, если нам требуется извлечь эту запись (т.е выполнить запрос вида SELECT ... FROM t1 WHERE PI = ...), то мы всегда знаем какой AMP хранит эту запись. В Оракл значение столбца (столбцов), по которым производится хеширование не даст возможности напрямую извлечь запись. Нужен дополнительный индекс. В Терадате же Primary Index - это не индекс, а функция. BirkhoffНу вы же сами говорите, что у Терадаты модель shared nothing. У Oracle это не так. Поэтому масштабирование достигается не кластеризацией на 300 серверов, а железом и дисковыми массивами. Масштабирование в случае Терадаты достигается железом и дисковыми массивами. Кластеризация - это несколько другое. Тем более, в Терадате тоже есть понятие кластер, но оно используется несколько по-другому (это ещё один софтверный механизм повышения отказоустойчивости системы). Разница между масштабируемостью Терадаты (и в целом архитектуры MPP) и масштабируемостью Оркл (и в целом СУБД, работающих на SMP-платформах) заключается в том, что у Терадаты масштабируемость линейная (т.е при добавлении новых узлов, производительность растёт прямо пропорционально), а в СУБД на SMP-платформах этого нет в силу того, что производительность SMP-систем нелинейно зависит от количества процессоров (в силу возрастающего оверхеда на межпроцессорное взаимодействие). Побочный эффект - в случае Терадаты нужно меньше процессоров для получения системы аналогичной производительности. BirkhoffВ силу опять же другой модели дублируются все таблицы, хотя допускаю, что можно придумать схему, при которой будет дублироваться только одна, но не уверен что это нужно. Опять-таки, разница между "можно придумать" и "активно используется" довольно велика. Представьте себе ситуацию, когда громадная (миллиарды записей) таблица хранится в одной копии на дисовом массиве, который внезапно выходит из строя. Что делаем? Ставим новый массив и заливаем данные из бэкапа или грузим повторно из источников. Как долго? Долго. Если есть FALLBACK-таблица, то система просто продолжает работать и журналировать все изменения, пока мы не поднимем упавший массив. После этого система автоматом синхронизирует таблицы. BirkhoffДа я в общем-то не провоцирую, а пытаюсь получить ответы на вопросы, которые меня интересуют :) Как говорится в известной рекламе - Вэлком !!! С радостью буду отвечать и на другие вопросы. С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 17:22 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Андрей Прохоров BirkhoffЧестно говоря первый раз об этом слышу. (из чего, конечно, не следует, что этого нет :) ) А можете показать, где в документации об этом написано? Data Warehousing Guide 10g Release 1 (10.1) Page 5-28 "... In Oracle Real Application Clusters environments on shared-nothing platforms (MPPs), each hash partition of sales should preferably have affinity to only one node in order to avoid remote I/Os ..." Вероятно, пример Teradata и DB2 постепенно и Oracle начинает склонять к shared nothing. Какая-то странная эта цитата. Больше нигде в документации про shared nothing нет, даже в руководстве по администрированию кластера. Нужно покопать этот вопрос. Мне кажется, если это и есть, то это какая-то экзотика, которая никем не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 17:45 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Константин Лисянский BirkhoffИ как происходит апдейт данных и распределение проапдейченных данных по узлам? Похоже, я этот вопрос не до конца понял. Если имеется в виду добавление нового узла, часть данных мигрирует, это я уже упомянул. Если имеется в виду операция UPDATE, то если она касается так называемого PRIMARY INDEX (набора столбцов, по которым производится распределение данных), то при его изменении с большой вероятностью запись отправляется на другой узел. Собственно я имел в виду, что происходит при обновлении хранилища (вставке новых записей, или апдейте) Блокируется ли доступ пользователям, пока записи расползаются по серверам или какой то другой механизм работает? Константин Лисянский BirkhoffПотом как можно распараллелить в такой схеме операцию типа Distinct count?Могу пока только привести пан запроса. Видно, что непараллельных шагов здесь нет. [....] Очевидно, распараллеливается. Тонкостей реализации именно DISTINCT COUNT не знаю. Сорри. Судя по этому плану (насколько я его понял), параллельно данные считываются из разных партиций таблиц в SPOOL 4, а по спулу уже идет агрегация. Хотя там и написано all-AMP, но если spool один, то как по нему можно устроить параллельную обработку? Константин Лисянский BirkhoffЕсли данные в Оракле распартиционированы хешем, неужели он потом не используется для извлечения? :)ОК. Требуются пояснения. Дело в том, что в Терадате при создании таблицы вы должны указать набор столбцов, который будет использоваться для хэширования (PRIMARY INDEX). Хэш-функция в Терадате всегда выдаёт один и тот же результат для одного и того же входного значения (т.е это не round robbin и не генератор случайных чисел). Файловая система Терадаты в пределах одной и той же конфигурации (количество единиц параллелизма) ВСЕГДА отправляет запись с одним и тем же значением PRIMARY INDEX на одну и ту же единицуу параллелизма (в Терадате она называется Access Module Processor - AMP). Соответвенно, если нам требуется извлечь эту запись (т.е выполнить запрос вида SELECT ... FROM t1 WHERE PI = ...), то мы всегда знаем какой AMP хранит эту запись. В Оракл значение столбца (столбцов), по которым производится хеширование не даст возможности напрямую извлечь запись. Нужен дополнительный индекс. В Терадате же Primary Index - это не индекс, а функция.Не согласен (или не понял). Например, вот как создается секционированная таблица с типом партишининга hash. Код: plaintext 1. 2. 3. 4. Константин ЛисянскийПобочный эффект - в случае Терадаты нужно меньше процессоров для получения системы аналогичной производительности. Ок. Возможно. Константин Лисянский BirkhoffВ силу опять же другой модели дублируются все таблицы, хотя допускаю, что можно придумать схему, при которой будет дублироваться только одна, но не уверен что это нужно.Опять-таки, разница между "можно придумать" и "активно используется" довольно велика. Представьте себе ситуацию, когда громадная (миллиарды записей) таблица хранится в одной копии на дисовом массиве, который внезапно выходит из строя. Что делаем? Ставим новый массив и заливаем данные из бэкапа или грузим повторно из источников. Как долго? Долго. Если есть FALLBACK-таблица, то система просто продолжает работать и журналировать все изменения, пока мы не поднимем упавший массив. После этого система автоматом синхронизирует таблицы.Вот этот момент я не понял. RAID массив сам дублирует данные в таблицах на случай выхода из строя дисков в массиве. В этом смысле от нас не требуется никаких дополнительных действий по распределению данных по дискам. Это делает сам RAID (ну или ASM если мы его используем) Поэтому если диск выходит из строя - заменяем диск и данные сами переходят на новый диск. Никакой остановки системы тут даже не требуется. Вот с случае shared nothing без использования клик, о которых вы сказали, такое принудительное дублирование, наверное, имеет смысл. Но не в случае Оракла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 18:00 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Birkhoff Не согласен (или не понял). Например, вот как создается секционированная таблица с типом партишининга hash Код: plaintext 1. 2. 3. 4. Принципиальное отличие partitioning в Teradata от partitioning в Informix, DB2, Oracle, MS SQL заключается, что по значению deptno запись можно быстро найти внутри партишона, а не просто определить в каком разделе она лежит. При этом для поиска используется хэш индекс достаточно хитрой структуры. Этот индекс гораздо компактнее и менее трудоемок при модификации чем B+дерево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 18:17 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Андрей ПрохоровПринципиальное отличие partitioning в Teradata от partitioning в Informix, DB2, Oracle, MS SQL заключается, что по значению deptno запись можно быстро найти внутри партишона, а не просто определить в каком разделе она лежит. При этом для поиска используется хэш индекс достаточно хитрой структуры. Этот индекс гораздо компактнее и менее трудоемок при модификации чем B+дерево.Ок, теперь понятнее. Да, красиво. Хотя в Oracle ничего не мешает внутри партиции построить индекс и искать по нему. Хотя для DWH hash партиции редко (если вообще) используются, обычно какие то другие, призванные сузить спектр поиска до партиции или нескольких. Тогда при оптимизации запроса, будет вычисляться не партиция для каждой записи, а из каких партиций вообще имеет смысл данные доставать, а какие не трогать. Техника называется partition pruning. В случае хэш партиций, думаю селект пойдет по всем патрициям без разбора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 18:50 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffСобственно я имел в виду, что происходит при обновлении хранилища (вставке новых записей, или апдейте) Блокируется ли доступ пользователям, пока записи расползаются по серверам или какой то другой механизм работает? Это смотря как вставлять. Если по одной записи - то блокировка на уровне ROW HASH со всеми вытекающими последствиями. А если исползуются утилиты быстрой загрузки данных FASTLOAD и MULTILOAD, то таблица на время загрузки переводится в недоступное для выполнения запросов состояние. В общем, Терадата - типичный блокировочник, если Вы именно это хотели узнать. BirkhoffСудя по этому плану (насколько я его понял), параллельно данные считываются из разных партиций таблиц в SPOOL 4, а по спулу уже идет агрегация. Хотя там и написано all-AMP, но если spool один, то как по нему можно устроить параллельную обработку? Спул то один, но он тоже распределяется по узлам. Как я уже говорил, в терадате все таблицы распределяются. К тому же, можно видеть, что в спул 4 ожидается одна запись. Вероятно, на этом этапе уже все считается. Кстати - небольшое терминологическое отступление. Партиция в Терадате означает несколько другое. Это понятие логическое, а не физическое. То есть, партиция не показывает физическое место на диске, где хранятся записи. И, вообще, в Терадате записи не хранятся в фиксированных местах (особенности её файловой системы). В общем, речь идёт не о хш-партишионинге, а о хэш-дистрибьюшене. Пардон за большое количество иностранных слов. По параллельной обработке - остаюсь на своём. С тонкостями реализации не знаком. BirkhoffТаблспейсы могут быть физически разнесены по дискам и когда мы делаем select - Oracle будет вычислять хэш-функцию для каждого deptno и по ней поймет в каком таблспейсе лежит конкретная запись. А план запроса с указанием метода доступа не приведёте? А как он поймёт, в каком тейблспейсе искать? В терадате, например для этого хэш-карты используются. Правда, тейблспейсов там нету. Вообще, там файловая система проще - меньше объектов. Никаких тейблспейсов создавать не надо. Только CREATE TABLE с указанием PRIMARY INDEX. Дальше всё автоматически. То есть: CREATE TABLE dept (deptno INTEGER, deptname VARCHAR(32)) UNIQUE PRIMARY INDEX (deptno); Интересно, каков будет размер оператора создания таблицы, приведённого Вами, если количество хэш-партишинов будет 65535 (как в Терадате)? И как эти партишионы разнести по тейблспейсам и дискам эффективно? И что происходит при добавлении новых дисков, тейблспейсов, партишионов? Как вообще этим всем управлять можно? BirkhoffВот этот момент я не понял. RAID массив сам дублирует данные в таблицах на случай выхода из строя дисков в массиве. В этом смысле от нас не требуется никаких дополнительных действий по распределению данных по дискам. Это делает сам RAID (ну или ASM если мы его используем) Поэтому если диск выходит из строя - заменяем диск и данные сами переходят на новый диск. Никакой остановки системы тут даже не требуется. Вот с случае shared nothing без использования клик, о которых вы сказали, такое принудительное дублирование, наверное, имеет смысл. Но не в случае Оракла. Всё что происходит на уровне RAID - то же самое и в Терадате. А, вот, что произойдёт, если дисковый массив выйдет из строя, например, горят два диска в линейке или из-за сбоя по питанию вылетает вся коробка? В Терадате существует второй дисковый массив (в другой клике), на котором хранится вторая копия таблицы, с которой можно продолжать работать. Кстати, есть ещё один механизм повышения надёжности - называется DUAL ACTIVE - это когда в режиме активный-активный работают две системы (то есть, полное дублирование систем, но при этом обе работают в активном резиме, выполняя запросы). На данный момент несколько клиентов успешно эксплуатируют такие системы (как правило, их разносят географически для обеспечения защиты от неприятностей типа стихийных бедствий). BirkhoffХотя в Oracle ничего не мешает внутри партиции построить индекс и искать по нему. Да, но это дополнительный индекс, как я уже говорил. Место занимает, обслуживания требует, опять-таки. BirkhoffХотя для DWH hash партиции редко (если вообще) используются, обычно какие то другие, призванные сузить спектр поиска до партиции или нескольких. Это ключевое (и я бы сказал, решающее) отличие Оракл от Терадаты, в которой хэш-распределение играет определяющую роль. И эта роль заключается не в сужении поиска, а в равномерном распределении данных для распределения нагрузки по единицам параллелизма. BirkhoffТогда при оптимизации запроса, будет вычисляться не партиция для каждой записи, а из каких партиций вообще имеет смысл данные доставать, а какие не трогать. Техника называется partition pruning. В Терадате такая же фича имеется. Называется PARTITIONED PRIMARY INDEX. Оно уже для сужения поиска и используется. А partition pruning в Терадате называется partition elimination. А ещё отдельные партиции бэкапить можно. Ну, это, наверное, и Оракл может тоже. Ну, и ещё раз замечу, что партиция в данном случае - понятие логическое, не определяющее физического размещения данных. Это важно для лёгкости администрирования. В терадате нет необходимости производить операцию реорганизации данных (то бишь, выгружать данные, пересодавать спейсы, партишионы, таблицы), загрузать заново, пересоздавать индексы. Всё Терадата делает автоматически. Ещё одна вещь, которую следует упомянуть - Терадата не боится фулл-сканов и умеет их очень эффективно выполнять, поскольку эта операция очень хорошо параллелится (в случае равномерного распределения данных, что, как правило имеет место). Если Вы делаете в Оракл партишионинг не по хэш, а какими-то другими способами, то равномерного распределения данных между единицами параллелизма достичь невозможно. Соответственно, фулл-сканы будут не такими эффективными, как в Терадате. Соответственно, запросы типа ad hoc (характерные для хранилищ данных) не будут выполняться также эффективно, соответственно, нужно строить индексы, обслуживать их и со страхом ждать запросов, под которые не построены индексы :) С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 19:22 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Константин ЛисянскийА если исползуются утилиты быстрой загрузки данных FASTLOAD и MULTILOAD, то таблица на время загрузки переводится в недоступное для выполнения запросов состояние.Отсюда вопрос - насколько быстро это происходит в случае распределенной системы. Например, есть у нас 300 узлов, и пошел апдейт. Не станет ли тут узким местом как раз распределенность? И кто подает сигнал, что все таблицы обновились, можно снимать блокировку? И куда коннектятся пользователи? На любой узел или на какой то конкретный? Константин ЛисянскийПо параллельной обработке - остаюсь на своём. С тонкостями реализации не знаком.Собственно вопрос был даже не по Терадате, а вообще, как в даже в теории распараллелить distinct count. Ну ОК, допустим Терадата это как-то все-таки делает. :) Константин Лисянский BirkhoffТаблспейсы могут быть физически разнесены по дискам и когда мы делаем select - Oracle будет вычислять хэш-функцию для каждого deptno и по ней поймет в каком таблспейсе лежит конкретная запись.А план запроса с указанием метода доступа не приведёте? А как он поймёт, в каком тейблспейсе искать? Ну когда таблица создается ведь указывается какой тип партишининга и по какому полю. Соответственно каждая партиция фактически представляет из себя отдельную таблицу (к которой даже можно принудительно обратиться), а оптимизатор просто вычисляет в каких их этих таблиц лежат наши данные. Если партиция LIST - то смотрит какие значения полей куда попали. Естественно если таблица партиционированна по одному типу, а из запроса не ясно куда лезть, то будет или фулскан или использование индексов. Индексы могут быть как локальными (внутри партиции) так и глобальными (по всей большой таблице) Константин ЛисянскийИнтересно, каков будет размер оператора создания таблицы, приведённого Вами, если количество хэш-партишинов будет 65535 (как в Терадате)?Да можно просто написать что партиций будет 100 - и он их сам насоздает. Оператор будет даже короче. Я, честно говоря, не помню навскидку какое максимальное количество партиций может быть. Но так как идеология отлична от Терадаты, то это важно больше для Терадаты, чем для Оракла. Константин ЛисянскийИ как эти партишионы разнести по тейблспейсам и дискам эффективно? И что происходит при добавлении новых дисков, тейблспейсов, партишионов? Как вообще этим всем управлять можно?Этим всем в основном администратор управляет. Автоматом мало что делается. Но честно говоря не вижу тут большой проблемы. Константин ЛисянскийВсё что происходит на уровне RAID - то же самое и в Терадате. А, вот, что произойдёт, если дисковый массив выйдет из строя, например, горят два диска в линейке или из-за сбоя по питанию вылетает вся коробка? В Терадате существует второй дисковый массив (в другой клике), на котором хранится вторая копия таблицы, с которой можно продолжать работать. Имхо, какая-то надуманная проблема. Нужно или дисковый массив покупать или UPS ставить :) Но если бобма в здание попала с сервером, то и тут есть разные технологии типа Data Guard, которые позволяют практически в реальном времени создавать дубль базы на дургом сервере и в случае полного уничтожения основного сервера - поднять резервный. Видимо что то похожее на Dual Active. Хотя я понял вашу мысль, для Терадаты такой способ вполне годится. Константин Лисянский BirkhoffХотя в Oracle ничего не мешает внутри партиции построить индекс и искать по нему.Да, но это дополнительный индекс, как я уже говорил. Место занимает, обслуживания требует, опять-таки.Не думаю, что это основной bottleneck :) Константин ЛисянскийЕсли Вы делаете в Оракл партишионинг не по хэш, а какими-то другими способами, то равномерного распределения данных между единицами параллелизма достичь невозможно.А нужно ли? Чтобы здесь было полное счастье нужно не только чтобы данные были распределены равномерно, но и чтобы запросы, которые запускают пользователи выбирали равномерные порции данных из партиций. Если первого еще благодаря хешированию можно добиться, то второго уж врядли. :) Константин ЛисянскийСоответственно, фулл-сканы будут не такими эффективными, как в Терадате. Соответственно, запросы типа ad hoc (характерные для хранилищ данных) не будут выполняться также эффективно, соответственно, нужно строить индексы, обслуживать их и со страхом ждать запросов, под которые не построены индексы :) Ну, это уже маркетинг пошел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 20:12 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffХотя в Oracle ничего не мешает внутри партиции построить индекс и искать по нему. В этом случае слишком дорого будет обходится загрузка данных. Teradata используя свойство хэш индекса может гораздо быстрее перемещать данные между узлами, чем обычная СУБД с индексом по партишону. BirkhoffХотя для DWH hash партиции редко (если вообще) используются, обычно какие то другие, призванные сузить спектр поиска до партиции или нескольких. Тогда при оптимизации запроса, будет вычисляться не партиция для каждой записи, а из каких партиций вообще имеет смысл данные доставать, а какие не трогать. Техника называется partition pruning. В случае хэш партиций, думаю селект пойдет по всем патрициям без разбора. Поиск по всем партициям (AMP-ам) будет вестись только если нет ограничений на поле deptno. Однако в этом случае можно использовать так называемый Partitioned Primary Index, когда происходит секционирование данных по заданному полю уже внутри AMP-а. В этом случае поиск будет вестись параллельно, но не по всему AMP-а, а по его части, что у Teradata называется Partition Elimination. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 21:58 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Андрей Прохоров BirkhoffХотя в Oracle ничего не мешает внутри партиции построить индекс и искать по нему. В этом случае слишком дорого будет обходится загрузка данных. Teradata используя свойство хэш индекса может гораздо быстрее перемещать данные между узлами, чем обычная СУБД с индексом по партишону. Спорно. Можно показать только экспериментом на одной и той же структуре и тех же данных. К тому же в DWH обычно отводится некий промежуток времени в течение которого данные перегружаются-индексы перестраиваются и т.д. Не уверен, что расползание данных по кластеру в Терадате работает быстрее, чем перестроение локального индекса в обновленной партиции. (Если вообще требуется его перестроение) Или это время реально критично. Насчет partitioning elimination я понял. В принципе, технология похожа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 22:14 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffСпорно. Можно показать только экспериментом на одной и той же структуре и тех же данных. Утверждаю на основании экспериментов, хотя полноценным бенчмарком их назвать не могу. BirkhoffНе уверен, что расползание данных по кластеру в Терадате работает быстрее, чем перестроение локального индекса в обновленной партиции. (Если вообще требуется его перестроение) Вероятно Вы что-то не поняли, т.к. получается бессмысленное сравнение. К тому же вставка записи в таблицу с индексом без изменения индекса - это что-то новое в практике СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 22:37 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Андрей Прохоров BirkhoffСпорно. Можно показать только экспериментом на одной и той же структуре и тех же данных. Утверждаю на основании экспериментов, хотя полноценным бенчмарком их назвать не могу.Ну ок,могу это допустить. Андрей Прохоров BirkhoffНе уверен, что расползание данных по кластеру в Терадате работает быстрее, чем перестроение локального индекса в обновленной партиции. (Если вообще требуется его перестроение) Вероятно Вы что-то не поняли, т.к. получается бессмысленное сравнение. К тому же вставка записи в таблицу с индексом без изменения индекса - это что-то новое в практике СУБД.Под перестроением имел в виду его уничтожение и затем воссоздание. Если происходит только апдейт индекса - это другой вопрос. Насчет того, что я не понял. Я думаю, что расползание данных по кластеру занимает время. Перестроение (или апдейт) индекса тоже. Вопрос, - что дольше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 23:12 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
BirkhoffНу ок,могу это допустить. Можно посмотреть отчет того же Winter, посвященный Teradata. BirkhoffПод перестроением имел в виду его уничтожение и затем воссоздание. Если происходит только апдейт индекса - это другой вопрос. Под перестройкой я подразумевал модификацию индексного дерева, т.к. при вставке количества строк примерно равного количеству страниц в листьях индекса происходит практически полное обновление стуктуры индекса. BirkhoffНасчет того, что я не понял. Я думаю, что расползание данных по кластеру занимает время. Перестроение (или апдейт) индекса тоже. Вопрос, - что дольше? Узлы связаны через свитч, а для коммуникации используется специализированный сетевой протокол. В результате пропускная способность межузловых соединений по порядку величины соответствует пропускной способности дисковой подсистемы узла. Так что при выполнении redistribution (расползание) узлу не приходится скучать в ожидании очередной порции данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 23:44 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Birkhoff Отсюда вопрос - насколько быстро это происходит в случае распределенной системы. Например, есть у нас 300 узлов, и пошел апдейт. Не станет ли тут узким местом как раз распределенность? Смотря какой UPDATE. Если пошёл UPDATE по PRIMARY INDEX (столбцам, по которым выполняется распределение данных), то, действительно, будет трафик между узлами. Однако, первичные индексы в большинстве случаев (хотя, не всегда) совпадают с первичными ключами, а кому надо апдейтить первичные ключи? В случае апдейта столбцов, не входящих в первичный индекс, все апдейты происходят локальло в пределах одного AMP без пересылки записей между узлами. Но, на самом деле, межузловой трафик - это тоже не страшно. Он есть постоянно, поскольку джойны очень часто требуют перераспределения данных между узлами. На это существует коммутатор с очень приличной пропускной способностью. BirkhoffИ кто подает сигнал, что все таблицы обновились, можно снимать блокировку? Lock Manager BirkhoffИ куда коннектятся пользователи? На любой узел или на какой то конкретный? На конкретный. На котором имеется PARSING ENGINE. Как я уже писал, один PE может обрабатывать до 120 сессий. Система конфигурируется так, чтобы распределить PE между узлами. В принципе, все узлы равноправны, то есть, по большоу счёту, не важно к каму узлу коннектиться пользователь. BirkhoffСобственно вопрос был даже не по Терадате, а вообще, как в даже в теории распараллелить distinct count. Ну ОК, допустим Терадата это как-то все-таки делает. :) Я это понял. В противном случае не спросили бы :) BirkhoffНу когда таблица создается ведь указывается какой тип партишининга и по какому полю. Соответственно каждая партиция фактически представляет из себя отдельную таблицу (к которой даже можно принудительно обратиться), а оптимизатор просто вычисляет в каких их этих таблиц лежат наши данные. Интересно, а если часть таблиц с партициями, а часть - без. Как при этом джойны выполняются? А если у разных таблиц разный партишионинг? BirkhoffЭтим всем в основном администратор управляет. Автоматом мало что делается. Но честно говоря не вижу тут большой проблемы. Ну, если речь идёт о сотняз или тысячах объектов, за каждым из которых нужно следить, то желательно поменьше действий в расчёте на один объект выполнять. В противном случае администрирование в кошмар превращается. И если речь идёт о терабайтных системах, то лишний раз данные перезагружать - тысячу раз подумаешь. BirkhoffИмхо, какая-то надуманная проблема Да. нет. Выход из строя RAID-массива вполне вероятная вещь. Хорошо, не бомба. Дрогнула рука техника - вместо вышедшего из строя диска выдернул соседний из этой же линейки. Да, мало ли что ещё может произойти... BirkhoffНо если бобма в здание попала с сервером, то и тут есть разные технологии типа Data Guard, которые позволяют практически в реальном времени создавать дубль базы на дургом сервере и в случае полного уничтожения основного сервера - поднять резервный. Видимо что то похожее на Dual Active. Ну, не совсем. Если в случае Data Guard нужно резервный сервер поднимать, то в случае Dual Active он постоянно работает и приносит пользу. BirkhoffДа, но это дополнительный индекс, как я уже говорил. Место занимает, обслуживания требует, опять-таки. Не думаю, что это основной bottleneck :) Конечно, нет, но индексов нужно больше. А это - больше дискового пространства, больше администрирования. В целом работает правило, что Терадата требует меньше дискового простанства чем любая другая СУБД (кроме, пожалуй, Sybase IQ, который в этом плане делает всех :) BirkhoffА нужно ли? Чтобы здесь было полное счастье нужно не только чтобы данные были распределены равномерно, но и чтобы запросы, которые запускают пользователи выбирали равномерные порции данных из партиций. Если первого еще благодаря хешированию можно добиться, то второго уж врядли. :) В смысле одинаковое количество строк с каждого диска (единицы параллелизма)? В принципе, да, это непростая задача. Но, давайте рассмотрим простейший случай - отсутствие каких-либо индексов. Имеем таблицу в миллион записей, систему из 100 устройств параллелизма (10-узловая машина с Терадатой). Соответственно, на каждом узле будет храниться по 10 тысяч записей (примерно, при условии, что первичный индекс выбран правильно). Запросы с выборкой по первичному индексу нас мало интересуют - они выполняются очень быстро, правктически всегда за одно чтение с диска. Других индексов нет. Есть запрос на выборку по полю, не являющемуся первичным индексом (по полу, например). В этом случае все 100 устройств параллелизма будут сканировать свою часть таблицы, сотоящую из 10 тыс. записей. Это вполне предсказуемая нагрузка. Ясно, что, поскольку наши записи перемешаны в случайном порядке, количество записей с мужским или женским полом будет примерно одинаковым на каждом устройстве параллелизма. Имеет это какой-то смысл или я слишком увлёкся? BirkhoffНу, это уже маркетинг пошел :) Сорри, не хотел :) С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 23:50 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
По поводу COUNT DISTINCT. Допустим, есть таблица заказов: order_id, order_date, customer_id, product_id, amount Вполне логично допустить, что первичным индексом будет order_id для равномерного распределения таблицы по дискам. Теперь надо вычислить сколько уникальных клиентов сделали заказы в течение года. SELECT count(DISTINCT customer_id) FROM orders; Как посчитать параллельно? Первое соображение - в силу хэширования потенциально на каждом диске имеются записи содержащие все значения customer_id. Давайте первым шагом перераспределим данные между узлами по столбцу customer_id. Это параллельная операция, её длительность в общем случае пропорциональна количеству записей в таблице. В результате получим, что все записи с Васей Пупкиным лежат на одном узле, с Петей Таракановым - на другом и т.д. Теперь осталось для того, чтобы найти DISCTINCT записи отсортировать каждый кусочек таблицы локально на каждом устройстве параллелизма. Опять-таки это параллельная операция. Длительность пропрциональна N*logN/nAMPS (где nAMPS - количество единиц параллелизма). Вот и всё. Можно и по-другому - сначала сортируем данные локально по столбцу customer_id (N*logN) и убираем дубликаты. Потом перераспределяем данные по столбцу customer_id (их уже будет меньше, поскольку мы убрали дубликаты локально). Потом повторно выполняем сортировку и устранение дубликатов. Не знаю, какой из способов эффективнее. Скорее всего, при разной демографии данных по-разному. На это и существует оптимизатор, чтобы выбрать между ними. Но видно то, что операцию DISTINCT COUNT можно выполнять параллельно. Я думаю, что этими двумя вариантами дело не ограничивается, наверняка есть ещё алгоритмы. Но дальше думать ломает - спать уже пора. Кстати, мне почему-то кажется, что это не самая сложная в распараллеливании задача. На ум приходят нарастающие и скользящие итоги и прочие OLAP-операции, которые тоже выполняются в Терадате параллельно. Спокойной ночи :) С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 00:37 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Что-то не спится мне :) Поковырялся тут в интернете (славься Гугл, великий и могучий :). Нашёл интересную статейку . Как в воду глядел. Два алгоритма, которые я описал в предыдущем посте упоминаются как базовые. Я ещё не рассказал о третьем базовом алгоритме, поскольку счёл его неэффктивным (это когда локально отсортированные записи отправляются на координационный узел, где производится глобальная сортировка). Оказывается, этот алгоритм эффективен на небольшом количестве DISTINCT групп. В общем, авторы развивают эту идею и предагают несколько модифицированных алгоритмов, которые получаются путём "скрещивания" первого, второго и третьего. Любопытная статья для общего развития. Да, ещё нашёл презентацию по Терадате. Тоже довольно интересная. В картинках объясняет архитектурные принципы и преимущества Терадаты. Ну, теперь уж, точно спокойной ночи :) С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 00:59 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Продолжает неспаться :)) Тема-то оказалась очень интересной. Это всё про паралелизм. Вот, нашёл ещё одну презентацию по Терадате , в которой есть небольшой пассаж про параллельные алгоритмы (см. стр. 39): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Опять-таки без подробностей, но кое-какие выводы сделать можно. Скорее всего, применяются адаптивные алгоритмы (в терминах статьи, ссылку на которую я привёл постом выше) - When local cache fills, spill lowest hit items to global Удачи! С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 01:32 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Коллеги, Может быть я покажусь занудным, но мне кажется этот топик, несмотря на интересную PR дискуссию, не соответствует теме форума. Вероятно, для него более подходит форум "Другие СУБД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 09:46 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
JimmyКоллеги, Может быть я покажусь занудным, но мне кажется этот топик, несмотря на интересную PR дискуссию, не соответствует теме форума. Вероятно, для него более подходит форум "Другие СУБД". Ну это как посмотреть, ведь обсуждаются особенности Оракла и Терадаты с точки зрения их использования в DWH. А это как раз тема нашего форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 10:18 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Тем более, что Оракл, вроде бы здесь не относят к "Другим СУБД". Вероятно, имелось в виду "Сравнение СУБД". Однако, там, как правило, не обсуждаются вопросы DWH. Так что, присоединяюсь к backfire. НАверное, всё-таки, по теме. К тому же, разве не интересно было узнать, как работают параллельные алггоритмы агрегирования? По поводу PR - я максимально стараюсь придерживаться технического сравнения. Возможно, иногда заносит. Приношу извинения, если это кого-то обижает. С уважением, Константин Лисянский http://lissianski.narod.ru P.S. Если читаете этот топик, наверняка, интересно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 10:37 |
|
||
|
Что за зверь такой Teradata
|
|||
|---|---|---|---|
|
#18+
Не в тему топика, но коль зашла речь о вопросах обсуждаемых в форуме, мне думается, что вопросы ETL тоже welcome в наш форум, а то они рассыпаны по всему сайту, или выйти с предложение к Gross-модератору, чтоб завел такой форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2005, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=32919792&tid=1871718]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 294ms |
| total: | 457ms |

| 0 / 0 |
