【问题标题】:Performance improvement by priorities joining the tables通过加入表格的优先级来提高性能
【发布时间】:2021-10-07 14:53:30
【问题描述】:

有一个关于在 Kafka 中加入表的性能问题, 目前拓扑定义如下代码:

table1
   .leftJoin(table2, Pair::with)
   .leftJoin(table3, Pair::add)
   .join(table4, (left) -> left.getValue(0).getId() Triplet::add)
   .leftJoin(table5, Quartet::add)
   .leftJoin(table6, Quintet::add)

我只是想知道如果我将 .join 移到其他人之前,可以提高使用数据的性能和速度吗? (如下代码):

table1
   .join(table4, (left) -> left.getValue(0).getId() Pair::with)
   .leftJoin(table2, Pair::add)
   .leftJoin(table3, Triplet::add)
   .leftJoin(table5, Quartet::add)
   .leftJoin(table6, Quintet::add)

【问题讨论】:

    标签: java apache-kafka apache-kafka-streams


    【解决方案1】:

    是的,性能将得到改善。假设数据库提供者不做其他事情,例如自动优化查询。

    Way 1: A left join B left join C inner join D
    1.A left join B => Full records A
    2.A left join C => Full records A
    3.A inner join D => Partial A
    
    
    Way 2: A inner join D left join B left join C
    1.A inner join D => Partial A => A1( significantly improvement here)
    2.A1 left join B => Full A1 
    3.A1 left join C => Full A1
    

    在第 1 步,方法 2 减少了 DB 中的行数 => 用于左连接 B 和 C 的记录更少。

    【讨论】:

    • “数据库提供者”是什么意思?问题是关于 Kafka Streams
    • 过去,我的工作中有一个问题,我调查了数据库提供商(oracle),他们自动优化查询......所以我提到它......无论如何,连接技术是一样的...没有什么不同...在数据库或其他之间...为了确定性能,您可以使用大量数据进行压力测试并查看结果。
    • 谢谢!我会用大量的测试数据进行尝试,然后通知你。
    • Kafka Streams 为表提供了不同的选项,但仅支持查询是线性扫描或键查找,因为它是 KV 存储。没有太多需要优化的地方,也没有 RockDB 或 Hashmap 的“提供者”
    • 很奇怪,在任何情况下,即使是HashMap,它也应该运行得更快,例如:A的1000万条记录。在步骤1,方式1,我们还有1000万条;方式2,我们只有1000万的一部分,在理想情况下0-10k条记录......左连接时,更少的记录会运行得更快......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2019-01-10
    • 2011-12-05
    • 2023-03-20
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多