AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2013, 09:45   #1  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Производительность и ключ 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  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
исторически сложилось, на заре почти все идентификаторы были строковые, 64 битов вроде не было
Старый 04.10.2013, 10:15   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от twilight Посмотреть сообщение
а почему, собственно, в Аксапте используется строковой InventDimId?
Исторически все нумераторы (за очень редким исключением) буквенно-цифровые для того, чтобы:
1. можно было задавать суффиксы-префиксы (для разных целей)
2. можно было использовать более компактную нумерацию (не только цифры, но и буквенный алфавит)

http://axapta.mazzy.ru/lib/numbersequenceformat/

а также
http://axapta.mazzy.ru/lib/numbersequence/
За это сообщение автора поблагодарили: twilight (1).
Старый 04.10.2013, 10:16   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Следуя логике AX 2012 MS должен был переделать ключ на recid Не успел или не захотел...
__________________
Ivanhoe as is..
Старый 04.10.2013, 10:17   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
гады они со своим новым подходом
Старый 04.10.2013, 10:36   #6  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Цитата:
Сообщение от mazzy Посмотреть сообщение
Исторически все нумераторы (за очень редким исключением) буквенно-цифровые для того, чтобы:
1. можно было задавать суффиксы-префиксы (для разных целей)
2. можно было использовать более компактную нумерацию (не только цифры, но и буквенный алфавит)

http://axapta.mazzy.ru/lib/numbersequenceformat/

а также
http://axapta.mazzy.ru/lib/numbersequence/
1. Для каких целей можно использовать префиксы / суффиксы в InventDim? Я вижу только вариант, если передавать из одной базы в другую и при этом использовать старый inventDim, но это какой то очень редкий случай и никто не мешает в новой базе сгенерировать новый inventDim по комбинации аналитик.
2. Компактная нумерация это хорошо, если бы InventDimId печатался в документах или выводился на формах, а так с точки зрения БД компактнее как раз число.
__________________
I could tell you, but then I would have to bill you.
Старый 04.10.2013, 10:38   #7  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
гады они со своим новым подходом
Ну так сначала они насильственно переделали все строки на UNICODE, в результате чего размер ключа увеличился в два раза. Потом они начали георически бороться с последствиями. Причем смысл перехода на unicode не очень понятен. Если у нас в БД стоит немецкая кодовая таблица, то даже если кодировка поддерживает кирилицу и китайские ироглифы, все равно вся сортировка в системе будет немецкой, а не русской или китайской. То есть - столько гемора, а по большому счету - 50% проблем интернационализации не решено...
Старый 04.10.2013, 10:42   #8  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Цитата:
Сообщение от ice Посмотреть сообщение
исторически сложилось, на заре почти все идентификаторы были строковые, 64 битов вроде не было
RecId всегда был и в сопоставлениях прводок по поставщикам / клиентам связь по нему была всегда.
__________________
I could tell you, but then I would have to bill you.
Старый 04.10.2013, 10:43   #9  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Следуя логике AX 2012 MS должен был переделать ключ на recid Не успел или не захотел...
Вот тоже так думаю. InventTrans, например, связывается с InventTransOrigin по RecId.
__________________
I could tell you, but then I would have to bill you.
Старый 07.10.2013, 09:13   #10  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,740 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от twilight Посмотреть сообщение
RecId всегда был и в сопоставлениях прводок по поставщикам / клиентам связь по нему была всегда.
RecId не был int64. при миграции данных связь по RecId только мешает
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.10.2013, 09:44   #11  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ice Посмотреть сообщение
RecId не был int64. при миграции данных связь по RecId только мешает
А почему мы привязались к recid ?
Можно было просто использовать числовой идентификатор. Номерные серии легко до этого допиливаются, чтобы возвращать целочисленное значение.

Кстати, при одинаковом объеме занимаемого в памяти места, целочисленные ключи, по идее, должны работать в БД быстрее чем строковые. Поэтому InventDimId, InventTransId и.т.п. напрашиваются на то чтобы быть целочисленными (ну или int64)
За это сообщение автора поблагодарили: handy-comp (1).
Старый 07.10.2013, 10:47   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от twilight Посмотреть сообщение
1. Для каких целей можно использовать префиксы / суффиксы в InventDim? Я вижу только вариант, если передавать из одной базы в другую и при этом использовать старый inventDim, но это какой то очень редкий случай и никто не мешает в новой базе сгенерировать новый inventDim по комбинации аналитик.
думайте дальше.
для того, чтобы отделить inventDim с ячейками и паллетами от обычных,
для того, чтобы отделить inventDim на разных юр.лицах, если юр.лица разделяют общий склад.
да, мало ли для чего?

Цитата:
Сообщение от twilight Посмотреть сообщение
2. Компактная нумерация это хорошо, если бы InventDimId печатался в документах или выводился на формах, а так с точки зрения БД компактнее как раз число.
Не знай... Наработался я с "компактной нумерацией" в Конкорде. Где для разных целей выделялись числовые диапазоны. Ну его нафих. Пусть лучше будет больше возможностей с префиксами и суффиксами. Пусть эти возможности будут даже за счет небольшой потери производительности.
Старый 07.10.2013, 11:15   #13  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от fed Посмотреть сообщение
Ну так сначала они насильственно переделали все строки на UNICODE, в результате чего размер ключа увеличился в два раза. Потом они начали георически бороться с последствиями. Причем смысл перехода на unicode не очень понятен. Если у нас в БД стоит немецкая кодовая таблица, то даже если кодировка поддерживает кирилицу и китайские ироглифы, все равно вся сортировка в системе будет немецкой, а не русской или китайской. То есть - столько гемора, а по большому счету - 50% проблем интернационализации не решено...
Вот далась тебе эта сортировка - раньше хранить нормально вместе немецкий и китайский нельзя было. Вообще. А теперь можно и это хорошо. Потом, что есть "правильная" сортировка для данных хранящихся вперемешку на английском, русском, мандаринском, французском и немецком ? Нет ее. Или есть, но разная с точки зрения китайца и француза, так что - в морг. Да, есть накладные расходы в виде "распухающих" из-за UNICODE ключевых полей, с этим в том числе борются введением суррогатных ключей.

По мне так большинство выкладок типа "строка быстрее int64" - скорее из области перфекционизма, но учитывая как в MS любят "наворачивать" архитектуру - будьте уверены, переведут и INVENTDIM на связи по RECID, ничтоже сумняшеся. А потом то же сделают с DATAAREAID (по аналигии с PARTITIONID). А потом - нормализуют связку {DATAAREAID;PARTITIONID} вынеся ее во внешнюю таблицу и ссылаясь на нее по RECID.. А потом.. Перфекционизм, итить его

Хотя, может они и правы - время покажет
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.10.2013, 11:20   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Vadik Посмотреть сообщение
По мне так большинство выкладок типа "строка быстрее int64" ...
Что правда ?
Я всегда был уверен в обратном. По крайней мере для строк занимающих 8 и более байт.
Старый 07.10.2013, 11:30   #15  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Logger Посмотреть сообщение
Что правда ?
Правда. Строка хранимая в юникоде как правило "длиннее" int64, это факт. А вот постулат о том что int64 "быстрее" (и насколько "быстрее") - неплохо было бы доказать
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.10.2013, 11:46   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Vadik Посмотреть сообщение
Правда. Строка хранимая в юникоде как правило "длиннее" int64, это факт. А вот постулат о том что int64 "быстрее" (и насколько "быстрее") - неплохо было бы доказать
Попробую сделать сделать пример как дойдут руки.
Мнение свое сложил на основе обсуждений на SQL.ru - там были темы, где народ обсуждал оптимальную схему БД для биллинга. Однозначно высказывались в пользу целочисленных идентификаторов по сравнению со строковыми. Основной аргумент - на больших объемах (а в биллинге они большие) сравнение по числам (как следствие, поиск и.т.п.) должно идти значительно быстрее.
За это сообщение автора поблагодарили: fed (2), Vadik (0).
Старый 07.10.2013, 11:51   #17  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Logger Посмотреть сообщение
Попробую сделать сделать пример как дойдут руки
Буду премного благодарен. В качестве затравки - у меня в INVENTDIM 4518730 записей, singleton_lookup-ы по INVENTDIMID составляют 99.997% ко всем чтениям (статистика снята с продуктива). Вот давайте эти singleton_lookup-ы и попробуем "разогнать" сменой связи c INVENTDIMID на RECID
__________________
-ТСЯ или -ТЬСЯ ?
Старый 07.10.2013, 14:27   #18  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Цитата:
Сообщение от mazzy Посмотреть сообщение
для того, чтобы отделить inventDim с ячейками и паллетами от обычных,
А что это дает?

Цитата:
Сообщение от mazzy Посмотреть сообщение
для того, чтобы отделить inventDim на разных юр.лицах, если юр.лица разделяют общий склад.
А чем не нравится аналитика Владелец?

Цитата:
Сообщение от mazzy Посмотреть сообщение
да, мало ли для чего?
На проектах, которые я видел, InventDimId использовался только по прямому назначению и никак не модифицировался, потому и спрашиваю.
__________________
I could tell you, but then I would have to bill you.
Старый 08.10.2013, 17:39   #19  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Тут думаю уместно будет вспомнить, что в InventDim построен кластерный индекс по InventDimId.
В таком случае, использование всяких префиксов и суффиксов в ключевом поле удорожает процесс вставки данных, т.к. приводит к фрагментации, т.е. лучше бы этим не пользоваться, тем более что выгода не очевидна.
Излишняя длинна ключа кластерного индекса тоже не на пользу, кластерный индекс используется для поиска по некластерным и значения ключа будет дублироваться для всех некластерных индексов. Отсюда опять удорожание процесса вставки и модификации данных, излишняя трата дискового пространства.
Т.е. для вставки и обновления данных конечно выгодней было бы иметь InventDimId типа Int64.

С другой стороны вопрос насколько выгодней и какого эффекта мы хотим достичь. Потому как на чтение данных эти изменения повлияют в меньшей степени, да и будет ли вообще заметен эффект на объемах типа 4,5 млн записей ...
Старый 08.10.2013, 18:08   #20  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от handy-comp Посмотреть сообщение
Т.е. для вставки и обновления данных конечно выгодней было бы иметь InventDimId типа Int64
Интенсивная вставка ? Обновления ? Мы все еще индекс на InventDim по InventDimId обсуждаем ? Напомню, основной способ доступа - singleton_lookup

Цитата:
Тут думаю уместно будет вспомнить, что в InventDim построен кластерный индекс по InventDimId.
В таком случае, использование всяких префиксов и суффиксов в ключевом поле удорожает процесс вставки данных, т.к. приводит к фрагментации
А можно "на пальцах" показать как префиксы в номерной серии приводят к усиленной фрагментации при вставке ? А то мне как-то казалось что при выделении в рамках одной сессии значение номерной серии монотонно возрастает, а в случае множественных сессий и неиспользования предварительного выделения номеров из серии фрагментация даже меньше чем при индексе по RecId и множественных инстансах AOS
__________________
-ТСЯ или -ТЬСЯ ?
Теги
ax2012, inventdim, производительность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
InventDim::findOrCreate ice DAX: Программирование 24 23.12.2010 10:43
Вопросы по ReleaseUpdate DAX 2009 ansoft DAX: Программирование 7 31.08.2010 12:21
lookup для ItemId iz InventTable + InventDim + InventSum stalker25 DAX: Программирование 6 20.07.2009 15:50
InventDim.findOrCreateBlank - простое сложно? Pavlo AKA Panok DAX: Программирование 5 25.10.2004 16:50
Работа с InventDim... NJD DAX: Программирование 11 17.06.2004 14:42

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:10.