powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Привило сравнение ссылок в запросе
25 сообщений из 37, страница 1 из 2
Привило сравнение ссылок в запросе
    #39917428
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1C 8.3 файловая версия.
Есть запрос
Код: plsql
1.
2.
3.
select Ссылка, Наименование 
    from  Справочник.Номенклатура
    order by  Ссылка asc


То есть, выходной набор отсортирован по полю ссылки. 1c (его движок БД) умеет однозначно сравнивать две ссылки между собой на больше меньше. Я сделал такой вывод на основание того, что порядок записей в выборке меняется строго на противоположный, если заменить asc на desc. Как известно, ссылка представляет собой 16-байтную структуру - так называемый Guid. Просьба помочь с решением 2 вопросов.
1. Какое правило использует 1С-движок для сравнения двух ссылок на больше\меньше при выполнении сортировки запроса?
2. Различается ли это правило для разных версий 1с (8.1, 8.2,8.3) или для разных, используемых ее БД (файловая, MS-SQL, Postgree) ?
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917471
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana
1. Какое правило использует 1С-движок для сравнения двух ссылок на больше\меньше при выполнении сортировки запроса?
2. Различается ли это правило для разных версий 1с (8.1, 8.2,8.3) или для разных, используемых ее БД (файловая, MS-SQL, Postgree) ?


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

даи вообще плохвая эта практика пытаться закладываться на последовательность гуидов даже в пределах одной таблицы. в общем случае они могут не представлять собой последовательность "по нарастающей"
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917502
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana,
8.4.17.3. Правила сравнения значенийСсылочные типы и значения типа УникальныйИдентификатор сравниваются на основе своих значений. При этом гарантируется повторяемость результата сравнения только в рамках одной базы данных .
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917507
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МодальноеОкно, спасибо за участие.
МодальноеОкно

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

Любая сортировка, если она использует инвариантную функцию сравнения, всегда дает последовательность "по нарастающей" или как минимум не убывающий (если сортируемые значения не уникальны) .
Порядок рождения элементов не играет роли, естественно что новые элементы (гуиды) могут оказаться в любом месте выборки (вначале, в конце, в середини). Для сортировки уникальных значений важно лишь то, что если любых два элемента попали в выборку, то в независимости от всего остального, один всегда выше другого. И это неизменно для любой таблицы, любого запроса (без смены субд). Иначе это не сортировка, а генератор случайных чисел какой то. ;)

Но вы правы в том, что вероятно в разных движках разные функции, и как именно работает MS SQL можно будет выяснить сделав прямые запросы и почитав документацию сравнения binary(16), а как работает файловый движок не ответит никто.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917510
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster
,
8.4.17.3. Правила сравнения значенийСсылочные типы и значения типа УникальныйИдентификатор сравниваются на основе своих значений. При этом гарантируется повторяемость результата сравнения только в рамках одной базы данных .

Спасибо.
Вот меня в пределах одной базы данных полностью устраивает!
Просто нужно знать как в пределах каждой из баз данных это гарантируется. То есть знaть правило сравнения для файловой, MSSql и Postgree.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917526
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего сравнивает именно по текстовой строке 36 символов. Запишите его в строку и сравните сортировку. Скорее всего совпадет
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917578
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,

это проверялось в первую очередь, к сожалению нет. Сравнивал так же побайтно в прямом и обратном порядке, тоже нет.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917771
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana
это проверялось в первую очередь, к сожалению нет.
А что именно проверялось?
Надеюсь, не надо напоминать, что представление GUID в 1С отличается от представления MSSQL перестановкой кусков?

Если есть возможность, смотрите запрос к SQL, возможно, там тупо по 16-байтному значению сортируется.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917893
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery
artemana
это проверялось в первую очередь, к сожалению нет.
А что именно проверялось?

Бралась строка, которую дает 1с по полю ссылки, и смотрелось расположены ли выходные данные запроса согласно правилу сортировке строк. Не соответствуют

WildSery

Надеюсь, не надо напоминать, что представление GUID в 1С отличается от представления MSSQL перестановкой кусков?

MSSQL пока не занимаюсь. Но если текстовое представление GUID в 1С отличается от общепринятого, то конечно можно\нужно на это мне указать. См. Ниже.
Если есть возможность, смотрите запрос к SQL, возможно, там тупо по 16-байтному значению сортируется.
Мне вообще конечно надо разобраться со всеми движками 1С, но я сейчас разбираюсь с файловой версий, как наиболее сложной. Если по ней не будет решения, то наличие решения по SQL мне не нужно. Пойдем другим путем. Но пока не теряю надежды.

Так вот, я беру строку, которую дает 1С по полю ссылки из запроса. Используя метод XMLString.
Проверяю отсортирован ли запрос по этой строке, не отсортирован. Дальше я транслирую эту строку в 16 байтовое представление GUID (StringToGuid Delphi), и то же проверяю соответствует ли сортировка по байтному сравнению двух Guid. Не соответствует. В обратном порядке следования байте - не соответствует. По стандартному сравнению Guid исходя из структуры
Код: pascal
1.
2.
3.
4.
    D1: LongWord;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;


то же не соответствует.
Отсюда я делаю вывод.
Либо 1с как то странно (по особому) формирует возвращаемый строкой Guid, и я при его обратном преобразование из строки через StringToGuid получаю не правильную последовательность байт, либо 1с использует какой то дьявольский collate для побайтного сравнения Guid в сортировках.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917894
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana
Но если текстовое представление GUID в 1С отличается от общепринятого, то конечно можно\нужно на это мне указать


да, там "триады" меняются местами. в инете функции валяются
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917896
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917900
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МодальноеОкно, тепло!
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917931
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял для себя правило сравнения 16 байтной структуры, полученной из 1С строки, с помощь стандартной трансляции (С#, delphi ) в Guid. Сравнивать по байтно в такой последовательности байт
6,7,
8,9,10,11,12,13,14,15,
4,5,
0,1,2,3

На моей небольшой демо базе (файловый движок) работает. Будут базы по больше и на других движках, проверю, отпишусь.
Спасибо всем, особенно WildSery и МодальноеОкно!

P.S.
Подробно не разбирался, но подозреваю, что такой порядок байтов в сравнении позволяет 1с улучшить работу индексов, построенных для первичных ключей таблиц. Так как один из способов формирования нового Guid основан на использование текущего времени (как одной из компонент), то если в первую очередь использовать соответствующие сегменты Guid для сравнения, можно частично избавиться от случайного распределения значений ключей и получит нарастающие значения. Что при вставках большого кол-ва записей экономичнее.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917937
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana,

а какую задачу вы решаете? просто ради интереса
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39917949
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МодальноеОкно, периодическая синхронизация двух наборов данных (источник -> приемник) алгоритмом сложностью N (однопроходный алгоритм без бинарного поиска).
Источник - запрос из 1С, приемник таблица во внешней (не 1с) базе данных.
Для реализации такого алгоритма необходимо иметь отсортированные данные из источника и применика.
При условии, что эти отсортированные данные из источника и из приемника получены за счет навигации по подходящему индексу (без сортировки результата), такой алгоритм слияния самый экономичный. Что для моей задачи важно.

Естественно, что функция сравнения должна работать одинаково. Вот тут и столкнулся с проблемой,
БД приемника давала другой порядок записей.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39918572
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в наборе данных ведь Вам придется сравнивать и данные по этой 'ссылке'. А по Вашей сверке можно только узнать наличие объектов, но не различия реквизитов. Может правильнее в обоих базах записывать изменные или новые обьекты и потом уже только ими обмениваться?
Приводить пример терабайтной базы, у которой изменилась 1 запись, надо?
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919093
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с
А в наборе данных ведь Вам придется сравнивать и данные по этой 'ссылке'. А по Вашей сверке можно только узнать наличие объектов, но не различия реквизитов.

1.Есть два одинаковых произвольных запроса с уникальной сортировкой (перечень полей, в том числе ссылки).
2.Один из базы источник (1С), другой из базы приемник (не 1С).
3.Открыли запросы.
4 Сравнили значения полей сортировки.
5.Если они равны, сравниваются все остальные поля запроса источника с полями запроса. Если они не равны, то выполняется изменение этой записи в базе приемнике. После чего переход на следующую запись и в запросе из базы источник и в запросе из базы приемник. На шаг 4.
6. Если поля сортировки из источника больше, то надо удалить запись в базе приемнике и в запросе из нее перейти на следующую запись. На шаг 4.
7. Если поля сортировки из источника меньше, то надо вставить запись из источника в базу приемник. А в запросе из базы источник перейти на следующую запись. На шаг 4.

И так крутимся до момента, пока в обоих запросов не будет достигнут конец.
Когда конца достигает лишь один из запросов, непосредственно сравнение полей сортировки (шаг 4) не далется, алгоритм идет во ветке, как будто поля сортировки закончившегося запроса имеют большие значения чем не закончившегося.

Это упрощенный алгоритм используемой нами для синхронизации. Его сложность ~R*F, где R кол-во записей, а F количество полей. Реальный алгоритм, несколько сложней тем, что он допускает не уникальную сортировку наборов.

Программист Может правильнее в обоих базах записывать изменные или новые обьекты и потом уже только ими обмениваться?

Здесь речь идет об одностороннем обмене, то есть запись только в базу приемник. Но это пустяк.
Важно то, что репликация (синхронизация) по приращениям, которую Вы предлагаете, конечно намного эффективнее, чем полная перечитка (описанная выше).
Но она применима лишь в варианте, когда производиться передача в базу приемник таблиц, в том виде и в том составе, в котором они есть в базе источнике. Для этого в базе источнике обеспечивается логирование (журнал операций) этих таблиц, с помощью которого из нее вычитываются только новые и измененные записи. Эта схема мне известна, но она мне не подходит.
Так как в моем случае синхронизации подвергаются результаты произвольного (написанного пользователем)
сложного запроса, в котором потенциально есть join, в том числе (если это есть в 1с) с хранимыми процедурами и
всякие другие SQL штуки. Это запрос некая выжимка нужных пользователю данных.
Результат данного и любого запроса - это таблица, и вот эта таблица
заливается в базу приемник, а потом синхронизируется, описанным выше алгоритмом.

То есть на самом деле запросы не одинаковы по составу, из 1с берется сложный запрос. Например
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ВЫБРАТЬ
	Продажи.Номенклатура КАК ГУИД,
	Продажи.Количество,
	Продажи.Стоимость,
	ПартииТоваровНаСкладах.Стоимость КАК Стоимость1,
	Продажи.Номенклатура.НоменклатурнаяГруппа,
	Продажи.Номенклатура.Код,
	Номенклатура1.НоменклатурнаяГруппа,
	Номенклатура1.Ссылка,
	Номенклатура1.Наименование,
       Продажи.Регистратор,
       Продажи.НомерСтроки
ИЗ
	РегистрНакопления.Продажи КАК Продажи
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
		ПО Продажи.Регистратор = ПартииТоваровНаСкладах.Регистратор
			И Продажи.НомерСтроки = ПартииТоваровНаСкладах.НомерСтроки
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
		ПО Продажи.Номенклатура = Номенклатура1.Ссылка
     Order by Продажи.Регистратор,Продажи.НомерСтроки


А в базе приемнике этому запросу ставиться в соответствие таблица. Наприимер с именем Запрос1.
Состав полей - все поля из запроса 1С.
То есть для базы приемник открывается запрос
Код: sql
1.
2.
3.
select * 
  from Запрос1 
  order by    Регистратор, НомерСтроки


А дальше происходит то, что описано выше. Программа бежит по обоим запросам и
выдает при необходимости в базу приемник команды update\insert\delete.

Если бы мне в базе приемнике нужны были бы по отдельности таблицы
РегистрНакопления.Продажи, РегистрНакопления.ПартииТоваровНаСкладах, Справочник.Номенклатура и т.д.
то конечно нужно \ можно использовать репликацию по приращениям. Но они мне там не нужны, мне там нужен результат вот такого запроса. Передавать по приращениям отдельные таблицы, а потом все равно открывать запрос (уже только в базе примник), смысла нет. Да на 1 запрос будет меньше, но и репликация по приращением, в общем случае, не бесплатное удовольствие.


Хотя, если весь проект, связанный с этой темой, взлетит, то может быть для 1с или других системе обеспечивающих репликацию по приращениям может быть и имеет смысл сделать опционально. Так как Вы уже второй программист 1с, который советует мне это сделать.

Но пока хватит того что есть с головой.

Программист 1с

Приводить пример терабайтной базы, у которой изменилась 1 запись, надо?

Та нет, во общем то понятно, что такое бывает. На это случай, пока, есть другие инструменты.
Сюда кто то дочитал? :)
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919108
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana, дочитал :)

Да у Вас некий сложный запрос получения данных. Так кто запрещает хранить эти данные в регистре сведений 1с. Его этим же запросом и сравнивайте с этим регистром. И здесь замечательно получаются изменения, которые нужно перенести во внешнюю базу.

После подтверждения обновления внешней базы, вносим эти изменения в регистр.

Все быстро и автоматом. (Опционально медленное сравнение всего и вся с внешней базой, для поиска ошибок)
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919191
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с, респект!

Теперь, мы можем только дискутировать в единственном вопросе, что же именно делать опционально. ;)
Полную перегрузку\сверку или специальный регистр учета, который закачивать по приращению.

Оба варианта рабочие, но второй специфичен (реализуем) только для 1С.
А так как система, которую мы сейчас делаем, носит универсальный характер, то есть предназначена для
закачки из различных SQL баз, потенциально могут быть и все, обсуждаемые на данном сайте,
то естественно, мы, для начала, опираемся на универсальный рецепт, то есть на полную перезагрузку \ сверку.

Проблемы известны, но и выигрыш есть:
1. Для внедрения нашей системы не надо выполнять никаких изменений в самой 1С. Настраивать специфический регистр учета, включать журналирование и т.п.. Соответственно он проще в эксплуатации.
2. Вариант полной перезагрузки самодостаточен. Варианту частичной перегрузки он все равно нужен опционально, для проверки правильности.
3. Ну и упомянутая ранее универсальность, годиться для всех баз в которых нет возможности обновиться по приращениям.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919210
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через внешние источники данных можно подключить и посмотреть Вашу базу? Если да - то вообще все просто тем же запросом и сравнить.

Или считаем что нельзя? Внешний текстовый файл например :)
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919232
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с
А через внешние источники данных можно подключить и посмотреть Вашу базу? Если да - то вообще все просто тем же запросом и сравнить.

Или считаем что нельзя? Внешний текстовый файл например :)

Да можно подключится к моей базе, но я не пойму зачем мне проводить сверку изнутри 1с. А если в качестве базы источника не 1с-база, а что то другое? Вы поймите, мы пишем BI-систему (аналог qlkickview , microsoft power bi и т п) Для любой такой системы нужна загрузка исходных данных в свое промежуточное хранилище (буква E в аббревиатуре ETL ) и дальнейшая синхронизация этого хранилища. В качестве исходной базы может выступать в принципе любая базай любой информационной системы. Поэтому один из главных принципов предъявляемых к загрузчику - это его универсальность
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919454
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana,

Тогда как вариант наоборот запросом из Вашей базы (если это возможно) к 1с (mssql например напрямую). А так сравнение 2 (больших) баз, отдельная тема. Хэши создаете и сравниваете.

ps А Вы уверены что нужна универсальность? И бюджет у Вас как microsoft power bi?
Я не против универсальности, но обычно задачи скатываются к частым решениям, а полное решение никому не нужно (сорри 0.1% нужно).
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39919590
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с
artemana,

Тогда как вариант наоборот запросом из Вашей базы (если это возможно) к 1с (mssql например напрямую). А так сравнение 2 (больших) баз, отдельная тема. Хэши создаете и сравниваете.

В том то и дело, что алгоритм который я Вам нарисовал, без всяких хэшей и прочего сравнивает быстрее некуда два больших набора данных, и записывает (вставляет, удаляет, изменяет ) данные в базу приемник. Поэтому открывать запрос из 1c к моей базе, или из моей базы к 1с, смысла нет никакого. Это только может усложнить реализацию из за относительной бедности языков 1С и T-SQL. Например, мы, в своей реализации этого алгоритма, разбиваем задачу на два потока, один сравнивает данные, другой записывает обнаруженные расхождения в базу приемник.

Вы поймите, это линейный алгоритм, ту вообще нет поиска, только перебор записей. Быстрее невозможно, хоть с хешом хоть с чем.
Выиграть можно только перейдя на синхронизацию по приращениям, но почему мы пока этого не делаем, мы уже обсудили.
Была проблема с пониманием как нам надо представлять Guid из 1с в своей базе, чтобы последующая сортировка по нему совпадала, она, благодаря данному топику, успешно решена. Все остальное в общем то офтопик.


Программист 1с

ps А Вы уверены что нужна универсальность?

На 120%.
Программист 1с

И бюджет у Вас как microsoft power bi?

Нет, конечно. Но мы будем бороться. Надо же кому то сделать хорошую православную BI-систему? ;)
Программист 1с

Я не против универсальности, но обычно задачи скатываются к частым решениям, а полное решение никому не нужно (сорри 0.1% нужно).

Здесь нет никаких сомнений. Нужно универсальное решение.
Как и многие другие системы, наша развивается от частного решения к универсальному продукту.
Этап частного решения пройден . Система успешно внедрена на 1 крупном предприятии и трех поменьше.
Теперь хотелось бы сделать тиражируемый продукт, это на порядок или даже два сложнее. Но зато интересно.
Может мы с Вами или с каким нибудь другим участником этого форума еще партнерами станем. Чем черт не шутит! ;)
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920158
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana
Может мы с Вами или с каким нибудь другим участником этого форума еще партнерами станем. Чем черт не шутит! ;)
С удовольствием.

artemana

В том то и дело, что алгоритм который я Вам нарисовал, без всяких хэшей и прочего сравнивает быстрее некуда два больших набора данных, и записывает (вставляет, удаляет, изменяет ) данные в базу приемник. Поэтому открывать запрос из 1c к моей базе, или из моей базы к 1с, смысла нет никакого. Это только может усложнить реализацию из за относительной бедности языков 1С и T-SQL. Например, мы, в своей реализации этого алгоритма, разбиваем задачу на два потока, один сравнивает данные, другой записывает обнаруженные расхождения в базу приемник.
Ок - давайте тогда еще раз для понимания:
Есть 2 массива почти одинаковые (нужно найти различия). Дополнительное условие - каждый элемент массива содержит также массив "реквизитов".

Если без дополнительного условия:
Сортируем 2 массива и идем по 1 элементу сравнивая, пока не будут одинаковые. Чуть сложный алгоритм должен учитывать что при первом различии, нужно смотреть и в 1 и 2 массива следующие элементы, тк это может быть и пропуск и новый элемент. Или по другому будете?
1,2,3,4
1,2, ,4,5
Видим что нет элемента 3 и есть новый 5. Синхронизируемся

Все ок, но проблема в элементе 2 первого массива и элементе 2 второго массива различаются подмассивы. Пусть реквизит "наименование" стал чуть другим. Как мы их сравниваем, и даже просто узнаем что что-то изменилось? Если также сравнивая по 1 элементу подмассива, то это очень долго. Вот здесь как раз и работает хэш. Сравниваем что есть 2 и 2 и сраниваем их хэши.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920234
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с

Все ок, но проблема в элементе 2 первого массива и элементе 2 второго массива различаются подмассивы. Пусть реквизит "наименование" стал чуть другим. Как мы их сравниваем, и даже просто узнаем что что-то изменилось? Если также сравнивая по 1 элементу подмассива, то это очень долго.

Это не долго. Сравнения полей одной записи - это алгоритм линейной сложности F. Где F количество полей. Ведь мы сравниваем 1 поле с первым, второе со вторым и так далее, пока не найдем хоть одно различие или не проверим все поля. Я уже писал, что общая сложность всего алгоритма N*F, и где N это количество уникальных id, а F это количество полей (размерность подмассива). Массивы мы не сортируем, а получаем в готовом отсортированном виде из СУБД с использованием индекса.
Допустим есть массив 1 и массив 2, как в вашем примере, пусть они не отличаются. Размер каждого массива 100 млн. В каждом элементе подмассив (остальные реквизиты) размером 20. Значит сложность 100 000 000*20=2 000 000 000. Два миллиарда. Соотвественно все сравнение этим алгоритмом займет считанные секунды (гораздо больше уйдет времени на считывание таких объемов с базы источника и базы приемника.
Программист 1с
от здесь как раз и работает хэш. Сравниваем что есть 2 и 2 и сраниваем их хэши.

Не беря во внимание, что хеш для записи из источника нужно еще посчитать (он ведь не известен),
допустим хеш записи из первого массива совпал с хешом записи из второго массива и что дальше ? ;)
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Привило сравнение ссылок в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]