powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Привило сравнение ссылок в запросе
12 сообщений из 37, страница 2 из 2
Привило сравнение ссылок в запросе
    #39920328
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавно.

Если в источнике не было изменений, то для Вашего примера на сервере MS SQL каждый раз будет из таблиц выбираться 100КК записей (пусть даже из первичного ключа) затем эти 100КК 128-битных идентификаторов будут скопированы в Tempdb, отсортированы и отданы по сети на Ваш сервер приложений.

И так каждый раз - это холостая нагрузка на базах без изменений.

В случае массовых изменений к этому добавиться на стороне MS SQL дополнительно поднять уже 2 ККК записей и отдать их по сети, при этом в каждой из этих 2 ККК может быть строка произвольной длины, таблица или мультимедиа контент.

Так?

С Вами уже связывались производители hardware с целью активного инвестирования в рекламную компанию по продвижению Вашей системы?:)
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920397
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1C Developer
Забавно.
Если в источнике не было изменений, то для Вашего примера на сервере MS SQL каждый раз будет из таблиц выбираться 100КК записей (пусть даже из первичного ключа) затем эти 100КК 128-битных идентификаторов будут скопированы в Tempdb, отсортированы и отданы по сети на Ваш сервер приложений.

1. Сортировки не будет. Посмотрите материалы, в которых рассказывается как выполняются запросы с order by при наличии подходящего индекса.
2. Копирование в temp то же не будет. Скорее всего, я не уверен на счет MS SQL, но в firebird например точно не будет. Не думаю что MS ему уступает
3. Почему обязательно по сети? Кто мешает расположить загрузчик там же где и база
4. Загрузка может осуществляться с зеркальной базы, предназначенной для чтения. Эту базу можно расположить на том же компьютере что и загрузчик. Нет загрузки сети, нет загрузки основного сервера. Mirroring в MS SQL server - штатное средство
5. Загрузка в BI систему - это периодическая загрузка. Она может выполнятся в интервале времени когда аппаратная часть системы низко нагружена.
1C Developer

И так каждый раз - это холостая нагрузка на базах без изменений.

Да. Принцип полной перечитки исходной базы для переодической загрузки в BI-систему придуман не нами.
Он успешно используется, в том числе и такими лидерами как QlickView.
1C Developer

В случае массовых изменений к этому добавиться на стороне MS SQL дополнительно поднять уже 2 ККК записей и отдать их по сети,

я Вас не понял. Уточните почему записей, считаваемых из базы источника, стало в дав раза больше? Сколько в ней есть записей на момент открытия запроса, столько и будет прочитано. Были изменения, не было - не играет роли.
1C Developer

при этом в каждой из этих 2 ККК может быть строка произвольной длины, таблица или мультимедиа контент.

BI-системы и OLAP системы в больших таблицах (таблицы фактов), как правило оперируют всего 3 типами данных. целое число, число с плавающей точкой и дата.
В таблицах справочниках (таблицы измерений) 4 тип - строки и возможно blob, для хранения например фотографий, например сотрудников для красивого дашборд (но это уже экзотика). Записей в таблицах справочников не много.

Исходя из всего выше сказанного, я могу утверждать, что для 80% фирм, которым нужна BI-система, которой у них сегодня нет, принцип полной перечитки базы источника, полностью подойдет. Для оставшихся 20% нужно настраивать (программировать) загрузку по сегментам. Дело это, в общем случае не совсем простое, проще купить сервер помощней. См. ниже

1C Developer

С Вами уже связывались производители hardware с целью активного инвестирования в рекламную компанию по продвижению Вашей системы?:)

:)

Как штатный компенсатор, для тех кто не может купить хороший сервер, мы в нашей системе предусматриваем специальное средство. Называется сегментирование базы источника.
Как правило, любую большую базу информационной системы можно разделить на два сегмента - оперативный и исторический. В оперативном находятся данные к текущему дню и к некоторому интервалу перед ним, например месяц или квартал. Данные оперативного сегмента можно перечитывать часто, например каждый день или даже каждый час. Даже полная перечитка содержит малый объем данных и соответственно делается быстро и не дает значимой нагрузки. Данные же исторического сегмента либо вообще не перечитываются (после первой загрузки), либо перечитываются гораздо реже. Например раз в месяц или только по команде пользователя.

Если части компаний даже сегменты не помогут, ну что, надо будет тогда программировать классическую загрузку по приращением. Пока это для нас очень мало вероятно, так как те гиганты, которым это может понадобиться, уже обзавелись datawarehouse и BI-системами со своим блек-джеком и шлюхами. Мы нацелены не на них.
Наша идея - BI в массы, для тех кто вырос из excel, а qlickview дорого!
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920450
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с, у подхода artemana есть 3 преимущества, которые будут основными для его клиентов (да, их будет намного меньше озвученного 0.1% но именно они готовы платить):
1) Для внедрения/использования не надо менять имеющуюся 1С (скорость внедрения, простота, исторические данные);
2) Учётная и отчётная система не связаны (нет проблем с синхронизацией данных, например при восстановлении из бэкапа продакшена, для синхронизации можно использовать бэкап развёрнутый на арендованных для этого ресурсах);
3) Ставят задачу и получают результат в понятных для работающих с 1С терминах (бизнес-пользователи, программисты).

Artemana, Я правильно понимаю, что у вас 1С данные будет отдавать через COM и сравниваться они будут в вашем приложении (не средствами сервера sql)?

P.S. Такой алгоритм сравнения ещё и прекрасно паралелится.
P.P.S. Могу себе представить только один практический пример, где 1С обойдётся линейным чтением, это суммы по дням.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920457
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP

Artemana, Я правильно понимаю, что у вас 1С данные будет отдавать через COM и сравниваться они будут в вашем приложении (не средствами сервера sql)?

Абсолютно правильно. И то, что в было в постскриптуме, то же верно.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920629
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP, я и не спорю - просто предлагаю более быструю аналогию.

artemana
Программист 1с
от здесь как раз и работает хэш. Сравниваем что есть 2 и 2 и сраниваем их хэши.

Не беря во внимание, что хеш для записи из источника нужно еще посчитать (он ведь не известен),
допустим хеш записи из первого массива совпал с хешом записи из второго массива и что дальше ? ;)
Вы забыли что в регистре изменений уже хранятся все низменные объекты, и хэши тоже.

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

Не даст. Я вам намекнул, а сейчас скажу прямо! :) Хеш значений полей записи из произвольного запроса не поможет (он бесполезен) , так как равенство хеш значений не гарантирует равенства значений полей. Только с определенной вероятностью.
И в случаях когда хеш совпадает, а таких подавляющее большинство, все равно надо потом проверять каждое поле. Иначе Вы рискуете получить в базе приемнике лишь похожие данные, а не точную копию из исходных запросов.

Повторюсь, сравнение хеш может только дать однозначный ответ на то, что данные не совпадают, а сказать, что данные совпадают, такое сравнение не может. А большинство то записей как раз совпадает. И получается так, сначала сделай хеш (пусть из других хешей), потом его сравни, а потом, все равно сравнивай поля! Согласитесь, это явно не будет быстрей, чем сравнить сразу поля.

Если уж сравнение полей так уж хочется побороть, то эту подзадачу можно винести в отдельный поток.
Как правильно отметил AHDP, весь алгоритм хорошо параллелится. Сейчас у нас 4 потока,
1. поток чтение из базы приемника.
2. поток чтение из источника,
3. поток сравнения
4. поток записи отличий в базу приемник.

Так вот, поток сравнения можно еще разбить на два, один сопоставляет записи по ID, а второй проверяет значение полей для тех записей где Id совпало. Но выигрыша, скорее всего, не будет, так уже и без этого разделения критический участок, формирующий время синхронизации, при отсутствие множества новых данных проходит по потокам чтения из баз (потоки 1 и 2).
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920659
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно вероятность. А еще в 1с существует вероятность появления 2 одинаковых гуидов за время существования вселенной. Уменьшите ее до приемлимой и все. В конце концов есть вероятность ошибки записи и тд и тп.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920660
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати скорее всего у Вас данные будут в разрезе дат. Причем старые данные не меняются. Вот этот момент я и хочу убрать.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920674
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятность появление 2 одинаковых гуидов в 1с - это проблем 1с, ну или гуидов.
А вот появление в BI-системе не тех данных, что в источнике, будет моей проблемой.

Причем трудно отлавливаемой.
Ну и зачем мне эта проблема?

Зачем лишний геморой с настройкой для пользователя как в полях, созданного им произвольного запроса,
где разрешено все, что угодно его синтаксису , делать хеш (из другого хеша или из чего нибудь еще) ?

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

Это будет. Чуть выше я писал про сегменты. Как правило, разделение на сегменты связанно с датами.
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920930
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с, ты пытаешься решить ещё не поставленную тебе ЧАСТНУЮ задачу ;) ;
"Вы забыли что в регистре изменений уже хранятся все низменные объекты, и хэши тоже." - Что, где хранится!?
Планы обмена, распределённая база - не являются для него универсальными решениями, он не хочет строить хранилище, сразу в куб.

artemana, на фоне построения в 1С необходимой вам таблицы данных всеми остальными операциями можно пренебречь. И сегментирование тут не поможет. :(

P.S. Если вы не собираетесь синхронизировать данные, то зачем вам UID'ы мне не понятно, более того они не вписываются в логику BI.
1С гарантирует уникальность UID в пределах объекта метаданных, но не для всех объектов метаданных он определяется (см. строки табличной части документа, периодический регистр сведений для истории значений, константы).
...
Рейтинг: 0 / 0
Привило сравнение ссылок в запросе
    #39920982
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP

artemana, на фоне построения в 1С необходимой вам таблицы данных всеми остальными операциями можно пренебречь. И сегментирование тут не поможет. :(

Очень даже поможет. Ускоряется синхронизацию оперативного (короткого сегмента), которая делается часто, как минимум каждый день (каждую ночь).
Вот я выше приводил пример запроса для 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 Продажи.Регистратор,Продажи.НомерСтроки


Представим что мы хотим разделить базу на два сегмента, до 2020 года и после.
Тогда мы так настроем систему обмена, что она будет выполнять таких запроса два, но с разным условием отбора.
Для оперативного сегмента секция
Код: sql
1.
where Продажи.Период>=&Border


Для исторического

Код: sql
1.
where not  (Продажи.Период>=&Border)


Как видно в качестве критерия разделения выступает логическое выражение Продажи.Период>=&Border.
Где Border это параметр запроса чье значение в нашем случае равно '01.01.2020'
В оперативном сегменте результат выражения берется как есть, в историческом его результат инвертируется.
То есть каждая запись общего извлекаемого набора попадает только в один из сегментов (в один из запросов ).
Если в таблице РегистрНакопления.Продажи есть индекс начинающийся с поля Период,
то такой запрос выполниться гораздо быстрей , почти прямо пропорционально количеству записей продаж в 2020 году к общему кол-ву записей продаж во всей базе.

Запрос по историческому сегменту (с условием not (Продажи.Период>=&Border)) делается по прежнему долго (часы, сутки) но нам не надо его делать часто. Кому то будет достаточно и 1 раз.
AHDP

P.S. Если вы не собираетесь синхронизировать данные,

я этого не говорил. Как же без этого, все на этом и стоит.
AHDP

то зачем вам UID'ы мне не понятно, более того они не вписываются в логику BI.

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

1С гарантирует уникальность UID в пределах объекта метаданных, но не для всех объектов метаданных он определяется (см. строки табличной части документа, периодический регистр сведений для истории значений, константы).

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


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