Показать сообщение отдельно
Старый 24.06.2021, 22:34   #2  
axm2017 is offline
axm2017
Участник
 
2,055 / 295 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от fed Посмотреть сообщение
Появилась идея сделать отдельную табличку, где у меня только два поля - RecId и Hash. Смысл таблички - отдельная уникальная комбинация аттрибутов и их значений. Все остальные таблицы на нее ссылаются по RecId. (То есть - примерно как это со стандартной таблицей DimensionAttributeSet работает).
На одном проекте мои коллеги делали функционал с хэш
нужно было в некой таблице сделать ссылку на разные источники данных с разным набором уникальных полей + возможность восстановления, если вдруг данные пересоздадут.
Решали так же через общую табличку с
+ поле hash
+ дополнительное поле (соль).

Цитата:
Сообщение от fed Посмотреть сообщение
[*]Какой способ хэширования лучше всего использовать ? Из тех, которые в D365FO поддерживаются, я думал о SpookyHash, SHA1 и SHA256.
Обсуждали для 12 может полезно покажется
Хэш функции Why?
Они использовали md5(возвращает guid) из соображений удобства не более на сколько знаю
Цитата:
Сообщение от fed

Судя по тому что в интернетах пишут, SpookyHash должно хватать, но меня в моем Химикотехнологическом институте вопросам хэширования не учили и я не уверен Приму в дар советы от людей с более программистским образованием .[*]Какова вероятность hash collision, когда для разных message генерируются одинаковые hash ?
Низкая (скорее RecId пересекутся имхо), но для надежности коллеги сделали так:

- генерили hash на основе текстового набора имени таблицы + упорядоченных значений полей(это позволяло при необходимости без проблем добавить новое поле) + соль (изначально пустое значение)
- hash был указан как уникальный ключ

- при возникновении ситуации нарушения уникальности ( try catch с исключением duplicateKey) значение соли меняли (банальный счетчик вроде) и повторяли.

Как то так

Последний раз редактировалось axm2017; 24.06.2021 в 22:49.
За это сообщение автора поблагодарили: fed (5), EVGL (3).