|
Какой самый быстрый способ понять, что элемент справочника не менялся? | ☑ | ||
---|---|---|---|---|
0
Dmitry1c
03.03.21
✎
07:15
|
От поставщика прилетает номенклатура и её свойства.
Свойства могут поменяться, номенклатура может быть новая/старая. Как максимально быстро с точки зрения производительности понять, что объект поменялся и его надо перезаписать? Поставщик присылать только изменения не будет, нет возможности. Реализовывать нужно именно на стороне читателя. Вижу вариант только такой: - искать номенклатуру по ключам поиска, сравнивать каждый реквизит-свойство, если менялись - перезаписать. Может есть более удачные варианты? |
|||
1
Paint_NET
03.03.21
✎
07:21
|
Маркер изменений на стороне поставщика :)
А вообще да, только пореквизитное сравнение, если никаких признаков во входящем сообщении добавить нельзя. |
|||
2
Галахад
гуру
03.03.21
✎
07:22
|
Можно хранить к каждой номенклатуре некий хэш из получаемых от поставщика реквизитов. И сравнивать по нему.
|
|||
3
Dmitry1c
03.03.21
✎
07:23
|
(2) о! это мб. будет быстрее
|
|||
4
RomaH
naïve
03.03.21
✎
07:24
|
XDTO - получать два XML - разные - переписывать
хранить не надо, все-таки каждый раз считать |
|||
5
Dmitry1c
03.03.21
✎
07:25
|
(4) не понял
|
|||
6
RomaH
naïve
03.03.21
✎
07:30
|
что надо - сравнить два объекта по определенному правилу - в нашем случае правило простое - каждый реквизит из некого набора должен быть равен
можно просто сложить строки - это будет проще всего и быстрее, XDTO - тоже сложение строк, просто более напыщенное хранить ХЭШ - а нафига? |
|||
7
Dmitry1c
03.03.21
✎
07:32
|
(6) а сериализация не оч. прожорлива по ресурсам будет?
|
|||
8
Paint_NET
03.03.21
✎
07:33
|
(2) О, интересное решение.
(6) При первом поступлении считаем хэш сообщения, сохраняем, при очередном поступлении считаем хэш полученного сообщения, сравниваем с сохранённым. Не сходится - значит, изменён. Элегантненько получается. |
|||
9
RomaH
naïve
03.03.21
✎
07:34
|
(7) - просто сложить строки в определенном порядке
Запрос Выбрать Наименование, Код, СтрокаСравнения = Наименование + Код + ... |
|||
10
Dmitry1c
03.03.21
✎
07:35
|
(9) вот прямо душа лежит к варианту (2)
|
|||
11
Dmitry1c
03.03.21
✎
07:36
|
По крайней мере если сделать вариантом (2), может быть быдлокодером не назовут ;)
|
|||
12
piter3
03.03.21
✎
07:37
|
(7) а пересчитывать хэш при изменении операторами забыл, так что может выйти то на то
|
|||
13
RomaH
naïve
03.03.21
✎
07:39
|
(8) - сколько будем хранить хэш первого? - история будет накапливаться по которой надо будет искать
(12) о, а я не заметил хранение чем не удобно - поставщик изменить состав реквизитов - и хэш придется пересчитывать по новым правилам |
|||
14
Paint_NET
03.03.21
✎
07:40
|
(13) А зачем его хранить? Надо только с последним значением сравнивать.
|
|||
15
Paint_NET
03.03.21
✎
07:41
|
(13) Ну, изменение состава реквизитов не только правила хэширования меняет, нужно и процедуры импорта модифицировать.
|
|||
16
RomaH
naïve
03.03.21
✎
07:41
|
(14) я тебя понял как - приходит сообщение - мы не ищем номенклатуру (ключ) , а сравниваем с ранее записыными ХЭШами в БД (со всеми)
|
|||
17
piter3
03.03.21
✎
07:44
|
Тут задачка как раз, что считать изменением, как мне кажется. Соответственно кто важнее, центр или обмен. Может проще конечно у автора
|
|||
18
RomaH
naïve
03.03.21
✎
07:47
|
ща озадачу топикпастера - а удаление номенклатуры поставщиком как обрабатывать?
|
|||
19
Paint_NET
03.03.21
✎
07:48
|
(16) С одним, последним хэшем. Т.е. нам надо проверить, изменилось ли что-то с _последнего_ раза.
|
|||
20
piter3
03.03.21
✎
07:49
|
А так же дублем что считать. Как быть когда объединятся. Лучше сейчас задуматься, а как технически дело второе
|
|||
21
Dmitry1c
03.03.21
✎
08:12
|
(18) здесь-то вроде все просто как раз.
|
|||
22
Dmitry1c
03.03.21
✎
08:13
|
(20) а что значит объединятся?
две карточки в одну? ну останется один артикул, принадлежащий изначальной второй - в утиль |
|||
23
piter3
03.03.21
✎
08:17
|
(22) что сравнивать будешь на изменение
|
|||
24
dmpl
03.03.21
✎
08:24
|
(7) Меняется порядок реквизитов - и номенклатура уже разная получится.
|
|||
25
sdf
03.03.21
✎
09:16
|
(2) +1
свойства в структуру и от неё: Функция СформироватьХеш(Данные) Экспорт ДанныеСтрока = ОбщегоНазначения.ЗначениеВСтрокуXML(Данные); ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХешированиеДанных.Добавить(ДанныеСтрока); Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); КонецФункции |
|||
26
Dmitry1c
03.03.21
✎
09:19
|
(25) сериализация - лишнее (для производительности)
у меня есть исходная строка уже в json(или xml), от неё уже можно считать хэш |
|||
27
sdf
03.03.21
✎
09:29
|
(26) так да... Но а если в json(или xml) есть что-то лишнее. например дата/время формирования?
|
|||
28
Dmitry1c
03.03.21
✎
09:44
|
(27) нету
|
|||
29
brainguard
03.03.21
✎
10:09
|
(28) Тогда можно было бы просто исходную строку хранить. Хеш в данном случае просто позволяет ее сжать.
И это, SHA256 все же лучше. MD5 сломали |
|||
30
Lama12
03.03.21
✎
10:21
|
(26) А если порядок реквизитов изменится?
|
|||
31
Кир Пластелинин
03.03.21
✎
10:28
|
(30) собственно да. хэш-сумма в данном случае другая будет. но, с другой стороны, такая ситуация скорей исключение
|
|||
32
Михаил Козлов
03.03.21
✎
11:22
|
Загнать данные поставщика в ТЗ и запросом получить расхождения не пробовали?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |