是否可以使用Google Cloud Datastore批量插入

ADL*_*ADL 5 python mysql google-cloud-datastore

我们正在从生产数据库迁移一些数据,并希望将大部分数据存档在Cloud Datastore中.

最终我们会将所有数据移到那里,但最初将重点放在存档数据上作为测试.

我们选择的语言是Python,并且能够逐行将数据从mysql传输到数据存储区.

我们有大约1.2亿行要传输,一次一行的方法需要很长时间.

有没有人找到一些关于如何使用python将数据批量插入云数据存储区的文档或示例?

任何评论,建议表示赞赏,谢谢你提前.

JJ *_*wax 7

我今天所知道的云数据存储没有"批量加载"功能,所以如果您期望"上传包含所有数据的文件并且它将出现在数据存储中",我认为您不会找到任何东西.

您总是可以使用并行化工作的本地队列编写快速脚本.

基本要点是:

  • 排队脚本将数据从MySQL实例中拉出并将其放入队列中.
  • (很多)工作人员从这个队列中拉出来,并尝试将该项目写入数据存储区.
  • 失败时,将项目推回队列.

数据存储是可大规模并行化的,因此如果您可以编写一个每秒发送数千个写入的脚本,它应该可以正常工作.此外,这里的大瓶颈将是网络IO(在发送请求之后,您必须等待一段时间才能获得响应),因此许多线程应该获得相当不错的整体写入速率.但是,您应该确保在这些线程中正确地分割工作.


现在,您应该调查Cloud Datastore是否适合您的数据和持久性/可用性需求.如果您正在获取120米行并将其加载到Cloud Datastore中以进行键值样式查询(也就是说,您有一个key非索引value属性,这只是JSON数据),那么这可能有意义,但加载数据会花费您〜在这种情况下70美元(120米*0.06美元/ 100克).

如果您有属性(默认情况下将被编入索引),则此成本会大幅上升.

操作成本为每100k 0.06美元,但单个"写入"可能包含几个"操作".例如,假设您在一个包含5列的表中有120米的行(相当于一个具有5个属性的Kind).

单个"新实体写入"相当于:

  • + 2(每个新实体1 x 2写操作固定成本)
  • + 10(每个索引属性5 x 2写操作)
  • = 每个实体12个"操作".

因此,加载此数据的实际成本是:

120m实体*12 ops/entity*($ 0.06/100k ops)= $ 864.00