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

Результаты опроса: Как лучше хранить ссылки на записи - (RefTableId, Company, RefRecId)
myTempTable - временная таблица 4 21.05%
recordLinkList 2 10.53%
map(DataAreaId, recordLinkList) 0 0%
set([refTableId, refRecId, refCompanyId]) 3 15.79%
map([refTableId, refCompanyId], set(refRecId)) 2 10.53%
map(refTableId, map(refCompanyId, set(refRecId))) 1 5.26%
другое - написал сообщение в теме 5 26.32%
не знаю/мне все равно 2 10.53%
Голосовавшие: 19. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2011, 11:04   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Но если ссылок будет немного, тогда выбор, скорее всего, падет на ядрёные классы-коллекции, а тут уже очень важно определиться с тем, что будет использоваться в качестве ключа. Выбор же ключа
Не-не-не... Вопрос наоборот - какой ключ лучше выбирать для того или иного ядерного класса? И кстати, почему для ядерного класса? Тут предлагали экстремальные варианты с хранением в текстовом файле и/или во внешней таблице.

не понимаю как выбор ключа зависит от будущего использования.
есть три ключевых поля - (RefTableId, Company, RefRecId).
эти поля единственным образом указывают на конкретную запись.
как и что тут можно выбирать?

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

или я чего-то не понимаю?

Цитата:
Сообщение от gl00mie Посмотреть сообщение
К слову, мне лично в последнее время нравится хранить во всяких там Map'ах записи временных таблиц
а какой ключ стоит использовать в map'ах?
(помним, что уникально определяют запись три поля (RefTableId, Company, RefRecId))
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2011, 11:24   #22  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mazzy Посмотреть сообщение
не понимаю как выбор ключа зависит от будущего использования.
есть три ключевых поля - (RefTableId, Company, RefRecId).
эти поля единственным образом указывают на конкретную запись.
как и что тут можно выбирать?
Ну как минимум можно выбирать между
map(Company, map(RefTableId, set(RefRecId)))
map(RefTableId, map(Company, set(RefRecId)))
Старый 07.07.2011, 11:50   #23  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
как минимум, можно выбирать между шестью вариантами.
я их привел в самом начале.

какие плюсы и минусы видите ВЫ у этих вариантов?
какие варианты и в каких случаях использовали бы Вы?

=====================
Еще раз:
я не спрашиваю что использовать в моем проекте.
я хотел бы обсудить сами варианты.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2011, 11:52   #24  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вопрос наоборот - какой ключ лучше выбирать для того или иного ядерного класса?
Я, наверно, сегодня особенно туплю Лучше с какой точки зрения? Исходя из каких задач по использованию хранимых данных?
Цитата:
Сообщение от mazzy Посмотреть сообщение
И кстати, почему для ядерного класса?
Быстродействие. Во всяком случае, это - первый критерий, который мне приходит в голову, но, разумеется, могут быть иные критерии выбора, которые почему-то упорно замалчиваются.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Тут предлагали экстремальные варианты с хранением в текстовом файле и/или во внешней таблице.
Почему бы нет? Можно еще с использованием стеганографии по какой-нить картинке данные размазать, и чем это будет не вариант для формулировки "потом [утилита] как-то обрабатывает"?
Цитата:
Сообщение от mazzy Посмотреть сообщение
не понимаю как выбор ключа зависит от будущего использования.
Цитата:
Сообщение от mazzy Посмотреть сообщение
есть три ключевых поля - (RefTableId, Company, RefRecId). эти поля единственным образом указывают на конкретную запись.
Я, вероятно, захотел бы сгруппировать данные по компаниям, чтобы минимизировать число [очень тормознутых] переключений между ними - это один вариант. А, может, мне нужны только сами по себе записи без других данных из соотв. компаний, тогда я могу прописать код компании в свойство company() табличного буфера и выбирать записи из другой компании, не переключаясь в нее, - это другой вариант. А, может, я хочу сделать уникальный индекс по RecId без кода компании в нем, зная, что Аксапта выделяет RecId для таблицы в целом, и ищу записи в разных компаниях, которые могли бы нарушить уникальность этого индекса (мало ли, записи могли быть созданы прямыми SQL-запросами) - это третий вариант...
Цитата:
Сообщение от mazzy Посмотреть сообщение
выбирать можно только последовательность и варианты хранения. но это особенности реализации, а не особенности алгоритма.
ну да, сортируйте пузырьком, и будет вам счастье...
Цитата:
Сообщение от mazzy Посмотреть сообщение
а особенности реализации зависят от выбранных инструментов, а не от способа использования. или я чего-то не понимаю?
"в действительности все не так, как на самом деле". Сдаюсь...
Цитата:
Сообщение от mazzy Посмотреть сообщение
а какой ключ стоит использовать в map'ах?
(помним, что уникально определяют запись три поля (RefTableId, Company, RefRecId))
Внимание, вопрос: с какого перепуга меня должна в текущей формулировке задачи волновать уникальность комбинаций {RefTableId, Company, RefRecId} ? По мне так в качестве ключа при вставке в Map вполне прокатит map.elements(). Другое дело, если информацию о записях надо обрабатывать в какой-то последовательности... но об этом ведь ничего не сказано.

PS. А почему бы не хранить записи в виде Map [companyId -> RecordSortedList]?.. хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы...

Последний раз редактировалось gl00mie; 07.07.2011 в 12:00. Причина: PostScriptum
Старый 07.07.2011, 12:16   #25  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
PS. А почему бы не хранить записи в виде Map [companyId -> RecordSortedList]?.. хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы...
об этом и речь.
Map [companyId -> RecordSortedList] не позволяет хранить данные из разных таблиц.

ок. я понял. поррасуждать чисто теоретически желающих нет.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2011, 13:01   #26  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от gl00mie Посмотреть сообщение
в качестве ключа при вставке в Map вполне прокатит map.elements().
Тогда уж вместо Map можно использовать Set, вариант 4.
Цитата:
Сообщение от gl00mie Посмотреть сообщение
хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы...
Можно вместо RecordSortedList взять SysRecordSortedList. TableId там уже запоминается. Остаётся добавить добавить public метод getTableId.
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.07.2011, 13:32   #27  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Можно вместо RecordSortedList взять SysRecordSortedList. TableId там уже запоминается. Остаётся добавить добавить public метод getTableId.
мысль интересная.
правда SysRecordSortedList тоже хранит записи из одной таблицы.
переменная tableid одна для всех записей.

еще есть класс SysRecordSubset, который хранит recid в контейнере.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2011, 16:22   #28  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Цитата:
Сообщение от gl00mie Посмотреть сообщение
По мне так в качестве ключа при вставке в Map вполне прокатит map.elements()
Тогда уж вместо Map можно использовать Set, вариант 4.
Map с "незначащим" целочисленным ключом и произвольным типом значений и Set с тем же самым типом значений - это отнюдь не одно и то же с точки зрения производительности. Set, как и Map, сортирует значения ключа, поэтому если в нем хранить, к примеру, записи таблицы, то он, я так понимаю, будет сортировать их по всем полям, что может оказаться совершенно излишне.
Старый 07.07.2011, 16:32   #29  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...если в нем хранить, к примеру, записи таблицы... совершенно излишне.
Я кажется только въехал, почему мы друг друга не понимаем.
В самом начале, и в названии темы я говорил про ССЫЛКИ НА записи.

Нет необходимости хранить сами записи.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2011, 19:10   #30  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
В самом начале, и в названии темы я говорил про ССЫЛКИ НА записи. Нет необходимости хранить сами записи.
Это я понял, но коль скоро мы говорим "вообще", то...
Цитата:
Сообщение от gl00mie Посмотреть сообщение
мне лично в последнее время нравится хранить во всяких там Map'ах записи временных таблиц: и на диск ничего не выпадает, в отличие от самих временных таблиц, и данные типизированы и понятны; контейнеры в этом плане я лично просто "не перевариваю".
Старый 08.07.2011, 10:05   #31  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Тут предлагали экстремальные варианты с хранением в текстовом файле...
А чем хранение в текстовом файле экстремально?
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу.

Миллион раз отсортировать мап/сет - это уже действительно экстремальный вариант, особенно если последующая обработка еще будет и выполняться последовательно.
__________________
Dynamics AX Experience

Последний раз редактировалось CDR; 08.07.2011 в 10:13.
Старый 08.07.2011, 10:14   #32  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от CDR Посмотреть сообщение
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу.

Если последующая обработка будет выполняться последовательно, то миллион раз отсортировать мап/сет - это уже действительно экстремальный вариант.
Сортировка выполняется для того, чтобы обеспечить уникальность. Чтобы каждая запись присутствовала один раз.

Как бы ни выполнялась обработка - последовательно или в произвольном порядке - не думаю, что наличие дублей в выборке предполагается хоть кем-то. А обеспечивать уникальность ДО записи... Все равно потребуется мап/сет/таблица с сортировкой
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2011, 10:31   #33  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Сортировка выполняется для того, чтобы обеспечить уникальность. Чтобы каждая запись присутствовала один раз.

Как бы ни выполнялась обработка - последовательно или в произвольном порядке - не думаю, что наличие дублей в выборке предполагается хоть кем-то. А обеспечивать уникальность ДО записи... Все равно потребуется мап/сет/таблица с сортировкой
А в исходной постановке задачи разве предполагается, что возникнет дублирование?
По-моему, одноразовый просмотр всех записей исключает дублирование в разрезе (RefTableId, Company, RefRecId).
Поэтому если сортировка в исходной постановке нужна только для обеспечения уникальности, то выполнять ее миллион раз впустую - не самое удачное решение.
__________________
Dynamics AX Experience

Последний раз редактировалось CDR; 08.07.2011 в 10:33.
Старый 08.07.2011, 10:39   #34  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от CDR Посмотреть сообщение
А в исходной постановке задачи разве предполагается, что возникнет дублирование?
Хороший вопрос. В конкретном исходом вопросе указания не было.

Если же рассуждать теоретически, в целом,
то стоит исходить из того, что дубли будут.
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2011, 10:56   #35  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В теории могут быть задачи, требующие обработки каждой комбинации, даже дублирующей. И не факт что быстрее будет собирать только уникальные значения и хранить количество дублей.
Старый 08.07.2011, 11:05   #36  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а вот этого не очень понимаю.

т.е. я могу представить следующий сценарий:
= алгоритм перебирает данные по ваучерам
= перебирает накладные и связанные сними LedgerTrans, TaxTrans
= идет от какой-нибудь custVendTrans и связанные с ними LedgerTrans, TaxTrans
= перебирает банковские проводки и связанные с ними LedgerTrans, TaxTrans
и т.п.

другими словами, отрабатывают специализированные алгоритмы для каждого модуля, причем обрабатываются и "общие" для модулей финансовые проводки.

некие записи по условию отбираются для дальнейшей обработки (поправить/изменить/скопировать/удалить)

в этом случае дубли обрабатывать не надо.

===============
я не могу представить себе алгоритма, который должен обрабатывать информацию о дублях.
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2011, 11:25   #37  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Если же рассуждать теоретически, в целом,
то стоит исходить из того, что дубли будут.
Цитата:
Сообщение от mazzy Посмотреть сообщение
я не могу представить себе алгоритма, который должен обрабатывать информацию о дублях.
__________________
Dynamics AX Experience
Старый 08.07.2011, 11:32   #38  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Пример:
В выборке есть дублирующие записи. Задача - сделать их уникальными, поместив в новое поле уникальное значение.

To CDR: Учитывать что дубли есть и обрабатывать их - это разные вещи
Старый 08.07.2011, 12:00   #39  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от CDR Посмотреть сообщение
S.Kuskov правильно сказал - если нужно работать с дублями, то будет не тройка значений (RefTableId, Company, RefRecId), а четверка-пятерка-и-так-далее. Т.е. добавляете еще одно поле и снова работаете с уникальными значениями.

Без потери общности вполне достаточно предположить, что хранятся уникальные тройки (RefTableId, Company, RefRecId)
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2011, 12:04   #40  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mazzy Посмотреть сообщение
Без потери общности вполне достаточно предположить, что хранятся уникальные тройки (RefTableId, Company, RefRecId)
Если до вставки есть гарантия что тройки уникальны то дополнительной проверки, которая автоматически происходит при использовании set или map, хорошо бы избежать
Теги
recid, запись, как правильно, ссылки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Long running process switches from one company to another company Blog bot DAX Blogs 0 27.01.2010 20:05
dynamicsaxtraining: Create new company. Demo data Blog bot DAX Blogs 0 19.11.2009 14:05
emeadaxsupport: Query execution failed for data set 'Company' Blog bot DAX Blogs 0 28.10.2009 00:06
Создание company, domain, virtual company из X++ DmitrySincerity DAX: Программирование 9 16.01.2009 18:17
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.