【发布时间】:2013-11-21 05:17:46
【问题描述】:
我是暴风雨中的新手。只是想如果我可以使用storm来合并/连接来自两个不同数据库的两个表(因为,两个表有某种外键关系,恰好存在于不同的数据库/系统中),任何想法我会如何弥补拓扑?就像让两个分开的 spout 周期性地从两个 dbs 读取数据并用一个 bolt 来完成连接工作?
这甚至是风暴的适当用例吗?
感谢任何想法!
【问题讨论】:
标签: apache-storm
我是暴风雨中的新手。只是想如果我可以使用storm来合并/连接来自两个不同数据库的两个表(因为,两个表有某种外键关系,恰好存在于不同的数据库/系统中),任何想法我会如何弥补拓扑?就像让两个分开的 spout 周期性地从两个 dbs 读取数据并用一个 bolt 来完成连接工作?
这甚至是风暴的适当用例吗?
感谢任何想法!
【问题讨论】:
标签: apache-storm
这可能是 Storm 的一个很好的用途,但它确实取决于您的数据集。如果您在单独的 DBMS 中只有两个表要加入并存储在第三个位置(DBMS 或其他),Storm 只有在这是一个流式连接时才真正有意义,即这两个表经常被写入并且您想加入最近刚写的东西。
此外,几乎不用说,您应该只使用 Storm 将带来的复杂性,如果这是用于相对较大和高容量的东西。
如果它很小,那么使用传统的 ETL 工具可能会更好地为您服务,即使这只是您为访问两个数据库并组合数据而编写的一些代码。
如果数据集很大,并且您需要在很短的时间内进行连接,我会考虑以另一种方式执行此操作,例如使用从两个数据库中提取数据并传播连接的 map-reduce 作业在一个集群上。
【讨论】:
就像有两个分开的 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,关于风暴并行的工作原理
【讨论】: