AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

Umfrageergebnis anzeigen: Как лучше хранить ссылки на записи - (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%
Teilnehmer: 19. Sie dürfen bei dieser Umfrage nicht abstimmen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 07.07.2011, 11:04   #21  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von gl00mie Beitrag anzeigen
Но если ссылок будет немного, тогда выбор, скорее всего, падет на ядрёные классы-коллекции, а тут уже очень важно определиться с тем, что будет использоваться в качестве ключа. Выбор же ключа
Не-не-не... Вопрос наоборот - какой ключ лучше выбирать для того или иного ядерного класса? И кстати, почему для ядерного класса? Тут предлагали экстремальные варианты с хранением в текстовом файле и/или во внешней таблице.

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

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

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

Zitat:
Zitat von gl00mie Beitrag anzeigen
К слову, мне лично в последнее время нравится хранить во всяких там Map'ах записи временных таблиц
а какой ключ стоит использовать в map'ах?
(помним, что уникально определяют запись три поля (RefTableId, Company, RefRecId))
__________________
полезное на axForum, github, vk, coub.
Alt 07.07.2011, 11:24   #22  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.450 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von mazzy Beitrag anzeigen
не понимаю как выбор ключа зависит от будущего использования.
есть три ключевых поля - (RefTableId, Company, RefRecId).
эти поля единственным образом указывают на конкретную запись.
как и что тут можно выбирать?
Ну как минимум можно выбирать между
map(Company, map(RefTableId, set(RefRecId)))
map(RefTableId, map(Company, set(RefRecId)))
Alt 07.07.2011, 11:50   #23  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
как минимум, можно выбирать между шестью вариантами.
я их привел в самом начале.

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

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

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

Geändert von gl00mie (07.07.2011 um 12:00 Uhr) Grund: PostScriptum
Alt 07.07.2011, 12:16   #25  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von gl00mie Beitrag anzeigen
PS. А почему бы не хранить записи в виде Map [companyId -> RecordSortedList]?.. хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы...
об этом и речь.
Map [companyId -> RecordSortedList] не позволяет хранить данные из разных таблиц.

ок. я понял. поррасуждать чисто теоретически желающих нет.
__________________
полезное на axForum, github, vk, coub.
Alt 07.07.2011, 13:01   #26  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.450 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von gl00mie Beitrag anzeigen
в качестве ключа при вставке в Map вполне прокатит map.elements().
Тогда уж вместо Map можно использовать Set, вариант 4.
Zitat:
Zitat von gl00mie Beitrag anzeigen
хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы...
Можно вместо RecordSortedList взять SysRecordSortedList. TableId там уже запоминается. Остаётся добавить добавить public метод getTableId.
This post has been rated by: mazzy (2).
Alt 07.07.2011, 13:32   #27  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von S.Kuskov Beitrag anzeigen
Можно вместо RecordSortedList взять SysRecordSortedList. TableId там уже запоминается. Остаётся добавить добавить public метод getTableId.
мысль интересная.
правда SysRecordSortedList тоже хранит записи из одной таблицы.
переменная tableid одна для всех записей.

еще есть класс SysRecordSubset, который хранит recid в контейнере.
__________________
полезное на axForum, github, vk, coub.
Alt 07.07.2011, 16:22   #28  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von S.Kuskov Beitrag anzeigen
Zitat:
Zitat von gl00mie Beitrag anzeigen
По мне так в качестве ключа при вставке в Map вполне прокатит map.elements()
Тогда уж вместо Map можно использовать Set, вариант 4.
Map с "незначащим" целочисленным ключом и произвольным типом значений и Set с тем же самым типом значений - это отнюдь не одно и то же с точки зрения производительности. Set, как и Map, сортирует значения ключа, поэтому если в нем хранить, к примеру, записи таблицы, то он, я так понимаю, будет сортировать их по всем полям, что может оказаться совершенно излишне.
Alt 07.07.2011, 16:32   #29  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von gl00mie Beitrag anzeigen
...если в нем хранить, к примеру, записи таблицы... совершенно излишне.
Я кажется только въехал, почему мы друг друга не понимаем.
В самом начале, и в названии темы я говорил про ССЫЛКИ НА записи.

Нет необходимости хранить сами записи.
__________________
полезное на axForum, github, vk, coub.
Alt 07.07.2011, 19:10   #30  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von mazzy Beitrag anzeigen
В самом начале, и в названии темы я говорил про ССЫЛКИ НА записи. Нет необходимости хранить сами записи.
Это я понял, но коль скоро мы говорим "вообще", то...
Zitat:
Zitat von gl00mie Beitrag anzeigen
мне лично в последнее время нравится хранить во всяких там Map'ах записи временных таблиц: и на диск ничего не выпадает, в отличие от самих временных таблиц, и данные типизированы и понятны; контейнеры в этом плане я лично просто "не перевариваю".
Alt 08.07.2011, 10:05   #31  
CDR ist offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Registriert seit: 27.11.2003
Zitat:
Zitat von mazzy Beitrag anzeigen
Тут предлагали экстремальные варианты с хранением в текстовом файле...
А чем хранение в текстовом файле экстремально?
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу.

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

Geändert von CDR (08.07.2011 um 10:13 Uhr)
Alt 08.07.2011, 10:14   #32  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von CDR Beitrag anzeigen
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу.

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

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

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

Geändert von CDR (08.07.2011 um 10:33 Uhr)
Alt 08.07.2011, 10:39   #34  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von CDR Beitrag anzeigen
А в исходной постановке задачи разве предполагается, что возникнет дублирование?
Хороший вопрос. В конкретном исходом вопросе указания не было.

Если же рассуждать теоретически, в целом,
то стоит исходить из того, что дубли будут.
__________________
полезное на axForum, github, vk, coub.
Alt 08.07.2011, 10:56   #35  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.450 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
В теории могут быть задачи, требующие обработки каждой комбинации, даже дублирующей. И не факт что быстрее будет собирать только уникальные значения и хранить количество дублей.
Alt 08.07.2011, 11:05   #36  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
а вот этого не очень понимаю.

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

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

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

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

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

To CDR: Учитывать что дубли есть и обрабатывать их - это разные вещи
Alt 08.07.2011, 12:00   #39  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von CDR Beitrag anzeigen
S.Kuskov правильно сказал - если нужно работать с дублями, то будет не тройка значений (RefTableId, Company, RefRecId), а четверка-пятерка-и-так-далее. Т.е. добавляете еще одно поле и снова работаете с уникальными значениями.

Без потери общности вполне достаточно предположить, что хранятся уникальные тройки (RefTableId, Company, RefRecId)
__________________
полезное на axForum, github, vk, coub.
Alt 08.07.2011, 12:04   #40  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.450 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von mazzy Beitrag anzeigen
Без потери общности вполне достаточно предположить, что хранятся уникальные тройки (RefTableId, Company, RefRecId)
Если до вставки есть гарантия что тройки уникальны то дополнительной проверки, которая автоматически происходит при использовании set или map, хорошо бы избежать
Stichworte
recid, запись, как правильно, ссылки

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 17:26 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.