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