Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ключ партишена в DB2 и Oracle / 8 сообщений из 8, страница 1 из 1
08.02.2012, 18:27
    #37652340
emctl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
Добрый день всем.
Признаюсь честно, что я ораклист и сейчас столкнулся с DB2, поэтому заранее прошу прощения, если что-то не так объясняю.

Итак, есть хранилище данных, в которых фактовые таблицы партицированны по полю "id заказа" (а-ля hash partitioning). Если рассматривать, что пользователи будут оперировать с большим количеством строк, а не отдельными заказами, и в большинстве случаев агрегация будет по какой-то определённой дате, то я бы предпочёл партицировать таблицу по дате.
Мне объяснили, что поскольку таблицы партицированы по коду заказа, то при обработке нескольких заказов одновременно это будет оптимальнее, если они разнесены по разным партишенам.
Это немного не сопоставимо с моим "заточенным под оракл" понятием. В оракле вычитка данных идёт поблочно, поэтому если все заказы будут размещены в одном партишене (а соответственно, несколько записей могут быть в одном блоке) за какой-то день, то только этот партишен будет просканен и дальше только записи из этого партишена будут дальше джоинится, агрегироваться и т.д.

Расскажите пожалуйста, почему подход для DB2 другой, где я чего недопонимаю?
...
Рейтинг: 0 / 0
08.02.2012, 19:02
    #37652394
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
emctl,

тут речь о других партишенах идёт. О кластере shared nothing, каждый участник которого (обычно отдельный физический сервер) называется partition. Чтобы они работали одновременно, данные желательно распределить по ним равномерно.
...
Рейтинг: 0 / 0
08.02.2012, 19:07
    #37652408
emctl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
Т.е., если две таблицы, которые джоинятся, будут партицированны по одному полю, то они будут джоинится на отдельном сервере, а результат будет передаваться "мастер серверу", который будет уже собирать всё в кучу и выдавать результат?
Я правильно понимаю работу?
...
Рейтинг: 0 / 0
08.02.2012, 21:38
    #37652649
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
emctlТ.е., если две таблицы, которые джоинятся, будут партицированны по одному полю, то они будут джоинится на отдельном сервере, а результат будет передаваться "мастер серверу", который будет уже собирать всё в кучу и выдавать результат?
Я правильно понимаю работу?

В принципе да, но есть ньюансы ... :)

Почитай здесь:

1. Database Partitioning, Table Partitioning, and MDC for DB2 9 - http://www.redbooks.ibm.com/abstracts/sg247467.html?Open
2. Dimensional Modeling: In a Business Intelligence Environment - http://publib-b.boulder.ibm.com/abstracts/sg247138.html?Open
3. DB2 9 for Linux, UNIX, and Windows Advanced Database Administration Certification Study Guide - http://my.safaribooksonline.com/book/databases/db2/9781583470800
4. Data Modeling Techniques for Data Warehousing - http://publib-b.boulder.ibm.com/abstracts/sg242238.html?Open

С уважением,
Вадим.
...
Рейтинг: 0 / 0
09.02.2012, 08:29
    #37652979
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
Я думаю что товарищу ТС надо вовсе не партиционирование таблицы по разным серверам db2 а именно разделение таблицы по отдельным tablespace. Вот здесь об этом написано Table partitioning

в частности цитата:


Table partitioning is a data organization scheme in which table data is divided across multiple storage objects called data partitions or ranges according to values in one or more table columns. Each data partition is stored separately. These storage objects can be in different table spaces
, in the same table space, or a combination of both.


там же есть пример:

Код: plsql
1.
2.
3.
4.
CREATE TABLE customer (l_shipdate DATE, l_name CHAR(30)) 
IN ts1, ts2, ts3, ts4, ts5 
PARTITION BY RANGE(l_shipdate) (STARTING FROM ('01/01/2006') 
ENDING AT ('12/31/2006') EVERY (3 MONTHS))



ну и конечно бенефиты от разделения таблицы по фрагментам

Improved performance for business intelligence style queries
Query processing is enhanced to automatically eliminate data partitions based on predicates of the query. This is known as data partition elimination, and can benefit many decision support queries.
...
Рейтинг: 0 / 0
09.02.2012, 09:08
    #37653001
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
emctl,

Вот тут еще по русски написано Введение в DB2 9: Часть 2. Секционирование таблиц в DB2 9
...
Рейтинг: 0 / 0
09.02.2012, 15:13
    #37653967
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
emctl,

В двух словах, без отсылки к первоисточникам :)

У DB2-хи есть два вида партиционирования.
1. размазывание таблицы по разным узлам кластера (требуется DB2 Partitioning Feature) с тем, что каждый обрабатывает свой кусок (при объединении двух таких таблиц обработка происходит распределённо, общение узлов - "каждый с каждым", хотя и есть координирующий "мастер" узел, который для разных коннектов может быть различен; тут главная задача - равномерно размазать и по возможности обеспечить collocation данных).
Видимо речь не о нём.

2. Разделение таблицы на партиции в рамках одной ноды/stand-alone сервера (в общем то же, что и у Оракла).
Что даёт:
1. Ну, простое удобство по частям добавлять/откусывать партиции (в архив там данные отправлять, прочий maintenance осуществлять).
2. Возможность на массовых вставках работать с индексами значительно меньшего размера (sic!)
3. В определённых случаях получать table scan'ы не по всей таблице, а по небольшим частям, т.е. получать пользу от частично отсортированных данных (join'ить по кусочкам при join'е по партиционному ключу и т.д.)
4. При включённом внутри-партиционном параллелизме возможность параллельно выполнять подзапросы (выполняющиеся в рамках одного запроса) на разных частях таблицы (которые в свою очередь можно распихать по разным физическим stotage'ам, впрочем, как и одну партицию). На самом деле сомнительное удовольствие, но можно, к примеру, отправить "архивную" часть таблицы на "медленные" диски и вообще по-разному извращаться.
Наверное всё.

Работа (update) с некоторым заданным set'ом заказов (пусть и большим) вообще партиционированности таблицы ортогональна.
Партиционированность - на уровень выше уровня физического хранения, по сему может быть абсолютно не влияющей на указанную ситуацию (а при должном старании может оказаться влияющей отрицательно).

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

Далее, уже на физическом уровне, можно постараться физически положить совместно используемые записи близко друг к другу.
См. пара картинок про кластерные индексы и про prefetch .
Что, впрочем, тоже может никак не помогать, если нужные записи расположены достаточно далеко друг от друга.

Ну, про Multi-Dimentional Clustering уже упоминалось.


В итоге, вcё зависит от того как выбираются требуемые записи (по одной/скопом), общего их количества, процента выбираемых и т.п.

Partitioning по дате как правило один из самых естественных, при этом даже если они вместе с ID монотонно возрастают, partitioning по ID выглядит сомнительным, если только у нас нет запросов на выборку по диапазону ID.

Т.е. по-моему никакого недопонимания нет. Возможно недопонимание возникло у советчиков - партиционирование таблицы внутри ноды (как замена стандартному паттерну "сделать множество таблиц и объединить их одним вью") появилось в DB2 заметно позднее партиционирования на кластере (которому уже ну не менее 15 лет).

Тонкие отличия с Ораклом начинаются в обработке параметризованных запросов и Bind Variable Peeking, где параметр является партиционным ключом.
...
Рейтинг: 0 / 0
09.02.2012, 16:45
    #37654249
emctl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключ партишена в DB2 и Oracle
Всем спасибо, за ссылки особенно.
Я думаю, мне стоит лучше ознакомится с патицированием, а потом уже самому разобраться что где и как тут устроенно.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Ключ партишена в DB2 и Oracle / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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