重复的 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 以获得更好的性能