我想将大数据插入 Google 的 Cloud Spanner 表中。
这就是我对 node.js 应用程序所做的事情,但它停止了,因为 txt 文件太大(几乎 2GB)。
1.加载txt文件
2.逐行阅读
3.用“|”分割行
4.构建数据对象
5.向 Cloud Spanner 表中插入数据
Mysql 支持使用 .sql 文件插入数据。Cloud Spanner 是否也支持某种方式?
我想将大数据插入 Google 的 Cloud Spanner 表中。
这就是我对 node.js 应用程序所做的事情,但它停止了,因为 txt 文件太大(几乎 2GB)。
1.加载txt文件
2.逐行阅读
3.用“|”分割行
4.构建数据对象
5.向 Cloud Spanner 表中插入数据
Mysql 支持使用 .sql 文件插入数据。Cloud Spanner 是否也支持某种方式?
Cloud Spanner 目前不公开批量导入方法。听起来您打算单独插入每一行,这不是最佳方法。该文档具有有效批量加载的最佳(和不良)实践:
要获得批量加载的最佳写入吞吐量,请使用以下模式按主键对数据进行分区:
每个分区包含一系列连续的行。每个提交只包含一个分区的数据。分区数的一个好的经验法则是 Cloud Spanner 实例中节点数的 10 倍。因此,如果您有 N 个节点,总共有 10*N 个分区,您可以通过以下方式将行分配给分区:
按主键对数据进行排序。将其分成 10*N 个单独的部分。创建一组上传数据的工作任务。每个工作人员将写入单个分区。在分区内,建议您的工作人员按顺序写入行。但是,在分区内随机写入数据也应该提供相当高的吞吐量。
随着您上传更多数据,Cloud Spanner 会自动拆分和重新平衡您的数据,以平衡您实例中节点上的负载。在此过程中,您可能会遇到吞吐量暂时下降的情况。
按照这种模式,您应该会看到每个节点的最大整体批量写入吞吐量为每秒 10-20 MiB。
看起来您还试图在处理之前将整个大文件加载到内存中。对于大文件,您应该查看加载和处理块而不是整个文件。我是 Node 专家,但您可能应该尝试将其作为流读取,而不是将所有内容都保存在内存中。