【问题标题】:What is the best way to programatically load data into MemSQL from S3 or Azure?从 S3 或 Azure 以编程方式将数据加载到 MemSQL 的最佳方法是什么?
【发布时间】:2018-10-16 02:15:23
【问题描述】:

我必须将数据(以 CSV 或 TSV 的形式)从 Amazon S3 存储桶中的某个路径加载到一些 MemSQL 表中。将来可能需要从 Azure Blob 存储加载数据。我知道有两种方法可以做到:

  • MemSQL 管道
  • MemSQL 加载程序(已弃用)

以下是需要考虑的两种方法的优缺点:

  • MemSQL 管道 - 如果我们手动创建管道,它会自动继续工作。但是,保持管道始终处于运行状态会浪费系统资源(RAM)。此外,包含要在 MemSQL 中加载的数据的新文件将仅在一天中的特定时间(通过某些 cron 作业)添加到 S3。因此,如果管道不存在,我想以编程方式创建管道(使用 JDBC),启动管道,然后在成功加载所有数据后停止它(如果在此过程中也处理错误)。此过程将作为每日 cron 作业运行。 但是我找不到任何方法来知道所有数据是否已同步。我也找不到任何好的方法来知道这个过程中是否发生了任何错误。

  • MemSQL Loader - MemSQL 加载器在完成加载所需数据后会发送状态。因此,我可以在 cron 作业中执行上述作业。但是,由于 MemSQL 加载器现在已被弃用,所以我不想使用它。

请建议将数据加载到 MemSQL 表的最佳方法。另外,如果还有其他方法可以做到这一点,请告诉我(除了管道和加载器)。

提前致谢。

【问题讨论】:

  • 鉴于一个已弃用,而另一个未弃用,您的选择应该很明确...使用未弃用的那个。
  • @MarkRotteveel 对于 MemSQL 管道,我还说:“我找不到任何方法来知道所有数据是否同步。我也找不到任何好的方法来知道是否有过程中发生错误”。请帮我解决这个问题。

标签: java jdbc amazon-s3 azure-blob-storage singlestore


【解决方案1】:

MemSQL 管道非常适合您的工作负载。正如您所提到的,S3 和 Azure Pipelines 将在新文件可用时自动为您加载。当 Pipeline 不加载数据时,除了极少量的元数据之外,它不会使用系统资源。这是专门设计的,因此您无需手动设置 chron 作业来加载数据。如有必要,您还可以通过STOP PIPELINE 命令停止加载新文件。

information_schema 数据库中有表格,可让您查看所有管道的状​​态以及所有已命中的错误。具体来说,您可能希望查询PIPELINES_ERRORS 表以获取错误。

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多