04.10.2013, 09:45 | #1 |
MCTS
|
Производительность и ключ InventDim
Разрабатываю OLAP для DAX 2012.
В тестовой базе около 1 000 000 InventDim. Для атрибута InventDimId SQL выводит рекомендательное сообщение: Используйте числовые ключевые столбцы для атрибутов, у которых 500 000 и больше членов. В связи с этим возник такой вопрос: а почему, собственно, в Аксапте используется строковой InventDimId? Все равно Аксапта генерирует его автоматически, обычный пользователь его не видит. Таблица InventDim часто бывает довольно большая. Не лучше ли с точки зрения производительности, если бы InventDimId был бы типа int64?
__________________
I could tell you, but then I would have to bill you. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
04.10.2013, 09:52 | #2 |
Участник
|
исторически сложилось, на заре почти все идентификаторы были строковые, 64 битов вроде не было
|
|
04.10.2013, 10:15 | #3 |
Участник
|
Исторически все нумераторы (за очень редким исключением) буквенно-цифровые для того, чтобы:
1. можно было задавать суффиксы-префиксы (для разных целей) 2. можно было использовать более компактную нумерацию (не только цифры, но и буквенный алфавит) http://axapta.mazzy.ru/lib/numbersequenceformat/ а также http://axapta.mazzy.ru/lib/numbersequence/ |
|
|
За это сообщение автора поблагодарили: twilight (1). |
04.10.2013, 10:16 | #4 |
Участник
|
Следуя логике AX 2012 MS должен был переделать ключ на recid Не успел или не захотел...
__________________
Ivanhoe as is.. |
|
04.10.2013, 10:17 | #5 |
Участник
|
гады они со своим новым подходом
|
|
04.10.2013, 10:36 | #6 |
MCTS
|
Цитата:
Сообщение от mazzy
Исторически все нумераторы (за очень редким исключением) буквенно-цифровые для того, чтобы:
1. можно было задавать суффиксы-префиксы (для разных целей) 2. можно было использовать более компактную нумерацию (не только цифры, но и буквенный алфавит) http://axapta.mazzy.ru/lib/numbersequenceformat/ а также http://axapta.mazzy.ru/lib/numbersequence/ 2. Компактная нумерация это хорошо, если бы InventDimId печатался в документах или выводился на формах, а так с точки зрения БД компактнее как раз число.
__________________
I could tell you, but then I would have to bill you. |
|
04.10.2013, 10:38 | #7 |
Moderator
|
Ну так сначала они насильственно переделали все строки на UNICODE, в результате чего размер ключа увеличился в два раза. Потом они начали георически бороться с последствиями. Причем смысл перехода на unicode не очень понятен. Если у нас в БД стоит немецкая кодовая таблица, то даже если кодировка поддерживает кирилицу и китайские ироглифы, все равно вся сортировка в системе будет немецкой, а не русской или китайской. То есть - столько гемора, а по большому счету - 50% проблем интернационализации не решено...
|
|
04.10.2013, 10:42 | #8 |
MCTS
|
RecId всегда был и в сопоставлениях прводок по поставщикам / клиентам связь по нему была всегда.
__________________
I could tell you, but then I would have to bill you. |
|
04.10.2013, 10:43 | #9 |
MCTS
|
Вот тоже так думаю. InventTrans, например, связывается с InventTransOrigin по RecId.
__________________
I could tell you, but then I would have to bill you. |
|
07.10.2013, 09:13 | #10 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
07.10.2013, 09:44 | #11 |
Участник
|
А почему мы привязались к recid ?
Можно было просто использовать числовой идентификатор. Номерные серии легко до этого допиливаются, чтобы возвращать целочисленное значение. Кстати, при одинаковом объеме занимаемого в памяти места, целочисленные ключи, по идее, должны работать в БД быстрее чем строковые. Поэтому InventDimId, InventTransId и.т.п. напрашиваются на то чтобы быть целочисленными (ну или int64) |
|
|
За это сообщение автора поблагодарили: handy-comp (1). |
07.10.2013, 10:47 | #12 |
Участник
|
Цитата:
Сообщение от twilight
1. Для каких целей можно использовать префиксы / суффиксы в InventDim? Я вижу только вариант, если передавать из одной базы в другую и при этом использовать старый inventDim, но это какой то очень редкий случай и никто не мешает в новой базе сгенерировать новый inventDim по комбинации аналитик.
для того, чтобы отделить inventDim с ячейками и паллетами от обычных, для того, чтобы отделить inventDim на разных юр.лицах, если юр.лица разделяют общий склад. да, мало ли для чего? Не знай... Наработался я с "компактной нумерацией" в Конкорде. Где для разных целей выделялись числовые диапазоны. Ну его нафих. Пусть лучше будет больше возможностей с префиксами и суффиксами. Пусть эти возможности будут даже за счет небольшой потери производительности. |
|
07.10.2013, 11:15 | #13 |
Модератор
|
Цитата:
Сообщение от fed
Ну так сначала они насильственно переделали все строки на UNICODE, в результате чего размер ключа увеличился в два раза. Потом они начали георически бороться с последствиями. Причем смысл перехода на unicode не очень понятен. Если у нас в БД стоит немецкая кодовая таблица, то даже если кодировка поддерживает кирилицу и китайские ироглифы, все равно вся сортировка в системе будет немецкой, а не русской или китайской. То есть - столько гемора, а по большому счету - 50% проблем интернационализации не решено...
По мне так большинство выкладок типа "строка быстрее int64" - скорее из области перфекционизма, но учитывая как в MS любят "наворачивать" архитектуру - будьте уверены, переведут и INVENTDIM на связи по RECID, ничтоже сумняшеся. А потом то же сделают с DATAAREAID (по аналигии с PARTITIONID). А потом - нормализуют связку {DATAAREAID;PARTITIONID} вынеся ее во внешнюю таблицу и ссылаясь на нее по RECID.. А потом.. Перфекционизм, итить его Хотя, может они и правы - время покажет
__________________
-ТСЯ или -ТЬСЯ ? |
|
07.10.2013, 11:20 | #14 |
Участник
|
|
|
07.10.2013, 11:30 | #15 |
Модератор
|
Правда. Строка хранимая в юникоде как правило "длиннее" int64, это факт. А вот постулат о том что int64 "быстрее" (и насколько "быстрее") - неплохо было бы доказать
__________________
-ТСЯ или -ТЬСЯ ? |
|
07.10.2013, 11:46 | #16 |
Участник
|
Цитата:
Мнение свое сложил на основе обсуждений на SQL.ru - там были темы, где народ обсуждал оптимальную схему БД для биллинга. Однозначно высказывались в пользу целочисленных идентификаторов по сравнению со строковыми. Основной аргумент - на больших объемах (а в биллинге они большие) сравнение по числам (как следствие, поиск и.т.п.) должно идти значительно быстрее. |
|
|
За это сообщение автора поблагодарили: fed (2), Vadik (0). |
07.10.2013, 11:51 | #17 |
Модератор
|
Буду премного благодарен. В качестве затравки - у меня в INVENTDIM 4518730 записей, singleton_lookup-ы по INVENTDIMID составляют 99.997% ко всем чтениям (статистика снята с продуктива). Вот давайте эти singleton_lookup-ы и попробуем "разогнать" сменой связи c INVENTDIMID на RECID
__________________
-ТСЯ или -ТЬСЯ ? |
|
07.10.2013, 14:27 | #18 |
MCTS
|
А что это дает?
Цитата:
На проектах, которые я видел, InventDimId использовался только по прямому назначению и никак не модифицировался, потому и спрашиваю.
__________________
I could tell you, but then I would have to bill you. |
|
08.10.2013, 17:39 | #19 |
Участник
|
Тут думаю уместно будет вспомнить, что в InventDim построен кластерный индекс по InventDimId.
В таком случае, использование всяких префиксов и суффиксов в ключевом поле удорожает процесс вставки данных, т.к. приводит к фрагментации, т.е. лучше бы этим не пользоваться, тем более что выгода не очевидна. Излишняя длинна ключа кластерного индекса тоже не на пользу, кластерный индекс используется для поиска по некластерным и значения ключа будет дублироваться для всех некластерных индексов. Отсюда опять удорожание процесса вставки и модификации данных, излишняя трата дискового пространства. Т.е. для вставки и обновления данных конечно выгодней было бы иметь InventDimId типа Int64. С другой стороны вопрос насколько выгодней и какого эффекта мы хотим достичь. Потому как на чтение данных эти изменения повлияют в меньшей степени, да и будет ли вообще заметен эффект на объемах типа 4,5 млн записей ... |
|
08.10.2013, 18:08 | #20 |
Модератор
|
Цитата:
Цитата:
Тут думаю уместно будет вспомнить, что в InventDim построен кластерный индекс по InventDimId.
В таком случае, использование всяких префиксов и суффиксов в ключевом поле удорожает процесс вставки данных, т.к. приводит к фрагментации
__________________
-ТСЯ или -ТЬСЯ ? |
|