【问题标题】: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 专家,但您可能应该尝试将其作为流读取,而不是将所有内容都保存在内存中。