重复的 Siddhi 分区或同一分区中的多个查询
Duplicate Siddhi partitions or multiple queries in same partition
如果我们有多个查询,每个查询都依赖于同一个分区,我们正在尝试确定推荐的内容以及性能更高的内容。想象一下,我们只有一个名称字符串和一个值整数的数据,我们想要 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:它应该为每个查询生成一个单独的分区流,并能够并行执行它们,但它也有为同一个 name
生成 2 个分区流的开销。除非 Siddhi 足够聪明,意识到分区流是相同的并将它们放在同一个流中。
选项 2:查询在同一个分区流中,所以我想它会按顺序执行(除非 Siddhi 足够聪明,意识到查询不相互依赖,因为没有 inner streams ).但好处是现在只需要生成1个分区流。
这两个选项都应该可以正常工作,但哪个选项的性能更高?或者一旦 Siddhi 处理它们,它们在功能上是否相同。
由于您使用的是 Siddhi 4,我建议您使用选项 2,因为选项 1 中的内存开销确实很高。
但是,此 issue 在 Siddhi 5 中已修复,升级后您可以使用选项 1 以获得更好的性能
如果我们有多个查询,每个查询都依赖于同一个分区,我们正在尝试确定推荐的内容以及性能更高的内容。想象一下,我们只有一个名称字符串和一个值整数的数据,我们想要 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:它应该为每个查询生成一个单独的分区流,并能够并行执行它们,但它也有为同一个 name
生成 2 个分区流的开销。除非 Siddhi 足够聪明,意识到分区流是相同的并将它们放在同一个流中。
选项 2:查询在同一个分区流中,所以我想它会按顺序执行(除非 Siddhi 足够聪明,意识到查询不相互依赖,因为没有 inner streams ).但好处是现在只需要生成1个分区流。
这两个选项都应该可以正常工作,但哪个选项的性能更高?或者一旦 Siddhi 处理它们,它们在功能上是否相同。
由于您使用的是 Siddhi 4,我建议您使用选项 2,因为选项 1 中的内存开销确实很高。
但是,此 issue 在 Siddhi 5 中已修复,升级后您可以使用选项 1 以获得更好的性能