【问题标题】:Insert Large data into Cloud Spanner Table将大数据插入 Cloud Spanner 表
【发布时间】:2017-07-09 10:28:02
【问题描述】:

我想将大数据插入到 Google 的 Cloud Spanner 表中。

这是我对 node.js 应用程序所做的,但由于 txt 文件太大(几乎 2GB)而停止。

1.加载txt文件

2.逐行阅读

3.用“|”分割行

4.构建数据对象

5.向 Cloud Spanner 表中插入数据

Mysql 支持使用 .sql 文件插入数据。 Cloud Spanner 是否也支持某种方式?

【问题讨论】:

    标签: mysql node.js database google-cloud-platform google-cloud-spanner


    【解决方案1】:

    Cloud Spanner 目前不公开批量导入方法。听起来您打算单独插入每一行,这不是最佳方法。该文档包含efficient bulk loading 的最佳(和不良)实践:

    要为批量加载获得最佳写入吞吐量,请按以下方式对数据进行分区 具有这种模式的主键:

    每个分区包含一系列连续的行。每次提交 仅包含单个分区的数据。一个很好的经验法则 您的分区数是您的节点数的 10 倍 Cloud Spanner 实例。所以如果你有N个节点,一共10*N 分区,您可以通过以下方式将行分配给分区:

    按主键对数据进行排序。将其分成 10*N 分开 部分。创建一组上传数据的工作任务。每个 worker 将写入单个分区。在分区内,它是 建议您的工作人员按顺序写入行。然而, 在分区内随机写入数据还应提供 相当高的吞吐量。

    随着您上传的数据越来越多,Cloud Spanner 会自动拆分 并重新平衡您的数据以平衡您的节点上的负载 实例。在此过程中,您可能会遇到暂时下降的情况 吞吐量。

    按照此模式,您应该会看到最大的整体批量写入 每个节点每秒 10-20 MiB 的吞吐量。

    您似乎还试图在处理之前将整个大文件加载到内存中。对于大文件,您应该查看加载和处理块而不是整个文件。我是 Node 专家,但您可能应该尝试将其作为流读取,而不是将所有内容都保存在内存中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2017-07-07
      • 2019-04-18
      相关资源
      最近更新 更多