Мы пытаемся определить, что рекомендуется и что является более производительным, если у нас есть несколько запросов, каждый из которых полагается на один и тот же раздел. Представьте, что у нас есть данные только строки имени и целочисленного значения, мы бы хотели 2 отдельных запроса для обнаружения шаблонов в значении для одного и того же имени. Это можно записать двумя способами:
Опция 1:
define InputStream(name string, value integer)
partition with (name of InputStream)
begin
from every s1=InputStream[value == 1],
s2=InputStream[value == 2]
select s1.value as initial, s2.value as final
insert into OutputStream1
end
partition with (name of InputStream)
begin
from every s1=InputStream[value == 10],
s2=InputStream[value == 11]
select s1.value as initial, s2.value as final
insert into OutputStream2
end
Опция 2:
define InputStream(name string, value integer)
partition with (name of InputStream)
begin
from every s1=InputStream[value == 1],
s2=InputStream[value == 2]
select s1.value as initial, s2.value as final
insert into OutputStream1;
from every s1=InputStream[value == 10],
s2=InputStream[value == 11]
select s1.value as initial, s2.value as final
insert into OutputStream2
end
Опция 1: должен генерироваться отдельный поток разделов для каждого запрос и иметь возможность выполнять их параллельно, но он также имеет издержки на создание 2 потоков разделов для одного и того же name
. Если Siddhi не достаточно умен, чтобы понять, что потоки разделов идентичны и помещают их в один и тот же поток.
Вариант 2: запросы находятся в одном и том же потоке разделов, поэтому я предполагаю, что он будет выполняться каждый последовательно (если Siddhi не умен). достаточно, чтобы понять, что запросы не зависят друг от друга, поскольку нет внутренних потоков ). Но бонус в том, что теперь нужно генерировать только 1 поток разделов.
Любой из вариантов должен работать нормально, но какой из них более производительный? Или они оба будут одинаково функциональны, как только Сиддхи их обработает.