【问题标题】:Use storm to join two tables from two different dbs使用storm连接来自两个不同数据库的两个表
【发布时间】:2013-11-21 05:17:46
【问题描述】:

我是暴风雨中的新手。只是想如果我可以使用storm来合并/连接来自两个不同数据库的两个表(因为,两个表有某种外键关系,恰好存在于不同的数据库/系统中),任何想法我会如何弥补拓扑?就像让两个分开的 spout 周期性地从两个 dbs 读取数据并用一个 bolt 来完成连接工作?

这甚至是风暴的适当用例吗?

感谢任何想法!

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

    这可能是 Storm 的一个很好的用途,但它确实取决于您的数据集。如果您在单独的 DBMS 中只有两个表要加入并存储在第三个位置(DBMS 或其他),Storm 只有在这是一个流式连接时才真正有意义,即这两个表经常被写入并且您想加入最近刚写的东西。

    此外,几乎不用说,您应该只使用 Storm 将带来的复杂性,如果这是用于相对较大和高容量的东西。

    如果它很小,那么使用传统的 ETL 工具可能会更好地为您服务,即使这只是您为访问两个数据库并组合数据而编写的一些代码。

    如果数据集很大,并且您需要在很短的时间内进行连接,我会考虑以另一种方式执行此操作,例如使用从两个数据库中提取数据并传播连接的 map-reduce 作业在一个集群上。

    【讨论】:

      【解决方案2】:

      就像有两个分开的 spout 周期性地从两个 dbs 中读取数据并有一个 bolt 来完成连接工作

      是的,这很有可能。 Storm 可以有多个spouts。而A bolt consumes any number of input streams, does some processing, and possibly emits new streams. 通常最好让您的 spout 从 Kafka 或 RabbitMQ 等队列中读取(您可以找到 spout 与大多数排队系统的集成)。因此,在这种情况下,您可以将数据库中的数据提供给队列,然后让 spout 使用相同的数据。

      更新:
      这是一个很好的Article,关于风暴并行的工作原理

      【讨论】:

      • 感谢@user2720864。两个问题: 1. 螺栓是否会承受很大的压力,因为考虑到它是一个连接,所有的发射都会进入一个螺栓,我想很难将连接并行化到多个螺栓。 2. 是否有任何现有的方法将数据库数据发送到消息队列,它会在管道中增加一层复杂性吗?
      • 据我了解.. 1. 可能有一个螺栓,但您可以使用风暴并行运行多个相同的实例。 2.您是否正在寻找一个可以正常运行的现有项目?
      • 是的,如果有一个现有的项目可以做到这一点:) 现在,我正在针对 spout 本身内部的原始 dbs 编写一个定期查询,但不太确定这是正确的方法。
      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多