понедельник, 2 ноября 2009 г.

Согласование потоков данных

Согласование данных
Согласование данных - это проблема, не имеющая однозначного решения. Она возникает, когда компонент получает исходные данные с нескольких источников разного размера. Представим себе компонент, который создает линейные сегменты между точками. Ммы имеем два входных параметра, которые содержат координаты точек (Stream A и Stream B). Потоки, из которых компонент берет точки, не связаны между собой и компонент не «видит» ни чего за пределами своих входных и выходных параметров:



Как вы видите, существует несколько путей соединения показанных точек, линиями. ГХ в настоящее время поддерживает три алгоритма согласования данных, но в будущем, возможно, их будет больше. Простейший путь состоит в том, чтобы соединить точки обоих потоков попарно, начиная с первой. Этот способ называется алгоритмом «кратчайшего списка»:



Алгоритм «длиннейшего списка» соединяет элементы одного списка с элементами другого сначала попарно, а если списки разной длины, то последний элемент более короткого списка соединяется со всеми оставшимися элементами другого списка. Данный метод является методом по умолчанию для компонентов:



И наконец, метод «Перекрестных ссылок» делает все возможные соединения::



Это несет в себе потенциальную опасность, поскольку число возможных сочетаний может быть огромно. Проблема становится более сложной с увеличением количества участвующих входных параметров и когда переменные данные начинают умножать данные, но по логике они должны оставаться теми же самыми (?).

Представьте, что мы имеем компонент “Point” (точка), который получает значения x, y и z из внешних параметров, содержащих следующие данные:

Координата X: {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}

Координата Y: {0.0, 1.0, 2.0, 3.0, 4.0}

Координата Z: {0.0, 1.0}



Если мы объединим эти данные по алгоритму «кратчайшего списка», то получим только две точки, т.к. координата Z содержит только два значения. Решение в данном случае выглядит следующим образом:



Алгоритм «длиннейшего списка» создает десять точек, повторяя последние значения потоков Y и Z:



Метод «перекрестных ссылок» соединяет все значения X со всеми значениями Y и Z, таким образом, результат 10x5x2 = 100 точек:



Каждый компонент может быть настроен на выполнение любого из этих способов (через контекстное меню компонента).

Однако есть одно исключение из этого правила. Некоторым компонентам ТРЕБУЕТСЯ на входе список данных в одном или нескольких входных полях. Например, компонент «polyline» (полилиния) создает кривую, состоящую из набора отрезков, проходящих через массив исходных точек. Увеличение числа исходных точек, увеличивает длину полилинии, но не количество полилиний. Входные параметры, требующие более одного значения, называются списочными параметрами и они игнорируются при согласовании данных.

Интересные линки