Зарегистрироваться | Поиск |
Результаты опроса: Как лучше хранить ссылки на записи - (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 |
Участник
|
Цитата:
не понимаю как выбор ключа зависит от будущего использования. есть три ключевых поля - (RefTableId, Company, RefRecId). эти поля единственным образом указывают на конкретную запись. как и что тут можно выбирать? выбирать можно только последовательность и варианты хранения. но это особенности реализации, а не особенности алгоритма. а особенности реализации зависят от выбранных инструментов, а не от способа использования. или я чего-то не понимаю? Цитата:
(помним, что уникально определяют запись три поля (RefTableId, Company, RefRecId)) |
|
07.07.2011, 11:24 | #22 |
Участник
|
Цитата:
map(Company, map(RefTableId, set(RefRecId))) map(RefTableId, map(Company, set(RefRecId))) |
|
07.07.2011, 11:50 | #23 |
Участник
|
как минимум, можно выбирать между шестью вариантами.
я их привел в самом начале. какие плюсы и минусы видите ВЫ у этих вариантов? какие варианты и в каких случаях использовали бы Вы? ===================== Еще раз: я не спрашиваю что использовать в моем проекте. я хотел бы обсудить сами варианты. |
|
07.07.2011, 11:52 | #24 |
Участник
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
PS. А почему бы не хранить записи в виде Map [companyId -> RecordSortedList]?.. хотя какой-то идиот не догадался для RecordSortedList сделать свойство, возвращающее идентификатор таблицы... Последний раз редактировалось gl00mie; 07.07.2011 в 12:00. Причина: PostScriptum |
|
07.07.2011, 12:16 | #25 |
Участник
|
Цитата:
Map [companyId -> RecordSortedList] не позволяет хранить данные из разных таблиц. ок. я понял. поррасуждать чисто теоретически желающих нет. |
|
07.07.2011, 13:01 | #26 |
Участник
|
Тогда уж вместо Map можно использовать Set, вариант 4.
Можно вместо RecordSortedList взять SysRecordSortedList. TableId там уже запоминается. Остаётся добавить добавить public метод getTableId. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
07.07.2011, 13:32 | #27 |
Участник
|
Цитата:
правда SysRecordSortedList тоже хранит записи из одной таблицы. переменная tableid одна для всех записей. еще есть класс SysRecordSubset, который хранит recid в контейнере. |
|
07.07.2011, 16:22 | #28 |
Участник
|
Map с "незначащим" целочисленным ключом и произвольным типом значений и Set с тем же самым типом значений - это отнюдь не одно и то же с точки зрения производительности. Set, как и Map, сортирует значения ключа, поэтому если в нем хранить, к примеру, записи таблицы, то он, я так понимаю, будет сортировать их по всем полям, что может оказаться совершенно излишне.
|
|
07.07.2011, 16:32 | #29 |
Участник
|
Цитата:
В самом начале, и в названии темы я говорил про ССЫЛКИ НА записи. Нет необходимости хранить сами записи. |
|
07.07.2011, 19:10 | #30 |
Участник
|
Цитата:
|
|
08.07.2011, 10:05 | #31 |
MCTS
|
А чем хранение в текстовом файле экстремально?
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу. Миллион раз отсортировать мап/сет - это уже действительно экстремальный вариант, особенно если последующая обработка еще будет и выполняться последовательно.
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 08.07.2011 в 10:13. |
|
08.07.2011, 10:14 | #32 |
Участник
|
Цитата:
Сообщение от CDR
При использовании на очень больших объемах данных (сотни тысяч/миллионы записей) использование файла очень прилично выигрывает у всяких мапов и сетов, т.к. при вставке значения в мап/сет выполняется автоматическая сортировка по ключу.
Если последующая обработка будет выполняться последовательно, то миллион раз отсортировать мап/сет - это уже действительно экстремальный вариант. Как бы ни выполнялась обработка - последовательно или в произвольном порядке - не думаю, что наличие дублей в выборке предполагается хоть кем-то. А обеспечивать уникальность ДО записи... Все равно потребуется мап/сет/таблица с сортировкой |
|
08.07.2011, 10:31 | #33 |
MCTS
|
Цитата:
Сообщение от mazzy
Сортировка выполняется для того, чтобы обеспечить уникальность. Чтобы каждая запись присутствовала один раз.
Как бы ни выполнялась обработка - последовательно или в произвольном порядке - не думаю, что наличие дублей в выборке предполагается хоть кем-то. А обеспечивать уникальность ДО записи... Все равно потребуется мап/сет/таблица с сортировкой По-моему, одноразовый просмотр всех записей исключает дублирование в разрезе (RefTableId, Company, RefRecId). Поэтому если сортировка в исходной постановке нужна только для обеспечения уникальности, то выполнять ее миллион раз впустую - не самое удачное решение.
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 08.07.2011 в 10:33. |
|
08.07.2011, 10:39 | #34 |
Участник
|
Цитата:
Если же рассуждать теоретически, в целом, то стоит исходить из того, что дубли будут. |
|
08.07.2011, 10:56 | #35 |
Участник
|
В теории могут быть задачи, требующие обработки каждой комбинации, даже дублирующей. И не факт что быстрее будет собирать только уникальные значения и хранить количество дублей.
|
|
08.07.2011, 11:05 | #36 |
Участник
|
а вот этого не очень понимаю.
т.е. я могу представить следующий сценарий: = алгоритм перебирает данные по ваучерам = перебирает накладные и связанные сними LedgerTrans, TaxTrans = идет от какой-нибудь custVendTrans и связанные с ними LedgerTrans, TaxTrans = перебирает банковские проводки и связанные с ними LedgerTrans, TaxTrans и т.п. другими словами, отрабатывают специализированные алгоритмы для каждого модуля, причем обрабатываются и "общие" для модулей финансовые проводки. некие записи по условию отбираются для дальнейшей обработки (поправить/изменить/скопировать/удалить) в этом случае дубли обрабатывать не надо. =============== я не могу представить себе алгоритма, который должен обрабатывать информацию о дублях. |
|
08.07.2011, 11:25 | #37 |
MCTS
|
Цитата:
__________________
Dynamics AX Experience |
|
08.07.2011, 11:32 | #38 |
Участник
|
Пример:
В выборке есть дублирующие записи. Задача - сделать их уникальными, поместив в новое поле уникальное значение. To CDR: Учитывать что дубли есть и обрабатывать их - это разные вещи |
|
08.07.2011, 12:00 | #39 |
Участник
|
S.Kuskov правильно сказал - если нужно работать с дублями, то будет не тройка значений (RefTableId, Company, RefRecId), а четверка-пятерка-и-так-далее. Т.е. добавляете еще одно поле и снова работаете с уникальными значениями.
Без потери общности вполне достаточно предположить, что хранятся уникальные тройки (RefTableId, Company, RefRecId) |
|
08.07.2011, 12:04 | #40 |
Участник
|
Если до вставки есть гарантия что тройки уникальны то дополнительной проверки, которая автоматически происходит при использовании set или map, хорошо бы избежать
|
|
Теги |
recid, запись, как правильно, ссылки |
|
|