如何读取从MySQL到Flink Alallelly的数据



如何读取从mysql到flink parallelly的数据?我想构建一个源函数以并行的mysql每隔一段时间连续读取数据。我如何实现它?

这个问题的答案包括两个方面:

  1. 并行从MySQL(或任何其他JDBC源)读取
  2. 从MySQL(或任何其他JDBC源)读取以周期性的间隔

并行从MySQL读取

为了并行从MySQL读取,您需要发送多个不同的查询。查询必须以结果的结合等效于预期的结果来组成。例如,您可以使用范围谓词在数字属性之间拆分查询:

Q1: SELECT * FROM sourceT WHERE num < 10;
Q2: SELECT * FROM sourceT WHERE num >= 10 AND num < 20;
Q3: SELECT * FROM sourceT WHERE num >= 20;

还有其他方法可以分区查询。但是,为了实际获得一些东西,与查询整个表格的单个查询相比,DBM必须能够更有效地处理多个查询。因此,通常,您需要确保对所分区的属性(上面的示例中的num)进行索引。不过,在单个数据库实例上拍摄多个查询会导致开销。因此,找到提供最佳性能的并行性并不是很重要。

以周期性的间隔从mySQL读取

这与并行读取相似。同样,您需要对查询进行分区。但是现在您想根据描述记录时间的属性来执行此操作。因此,在每个间隔中,您想要求自上次间隔以来所插入的行。同样,这将在时间属性上使用范围谓词来完成。

Q at T1: SELECT * FROM sourceT WHERE rowtime < T1;
Q at T2: SELECT * FROM sourceT WHERE rowtime < T2;

和以前一样,只有在rowtime属性上索引表时,这才有效地工作。否则,您将进行全表扫描,并且随着更多数据的插入,查询将变得越来越慢。

在周期性间隔中并行从MySQL读取

为此,您必须"仅"将这两种方法组合在一起,并在每个查询中添加两个谓词。您本质上要做的是将表分为脱节的部分并随着时间的推移并行阅读。

但是,正如我之前指出的那样,确切的分区取决于您的数据和用例。此外,您需要创建适当的索引以避免全表扫描。也请注意,使用上面的方法,您将不会看到阅读后修改的行的任何更新。

相关内容

  • 没有找到相关文章

最新更新