对Google App Engine datastore的大量数据加载时间过长(且失败)

2 投票
1 回答
608 浏览
提问于 2025-04-17 03:37

我正在使用当前的django non-rel和默认的高复制数据存储,在Google App Engine上开发一个应用程序。现在我想在本地的开发实例上批量加载一个180MB的csv文件,使用以下命令:

appcfg.py upload_data --config_file=bulkloader.yaml --filename=../my_data.csv --kind=Place --num_threads=4 --url=http://localhost:8000/_ah/remote_api --rps_limit=500

bulkloader.yaml

python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users

transformers:

- kind: Place
  connector: csv 
  connector_options:
      encoding: utf-8
      columns: from_header

  property_map:
    - property: __key__
      external_name: appengine_key
      export_transform: transform.key_id_or_name_as_string

- property: name
  external_name: name

实际上,对于一个被截断的、只有1000条记录的csv文件,批量加载是成功的,但当我尝试加载完整的数据集时,系统就开始变得缓慢,并且出现错误,显示“正在退避”,等待的时间越来越长。我查看的bulkloader日志并没有提供任何有用的信息,服务器的错误输出也没有。

如果能帮我理解这个批量加载的过程,我将非常感激。我计划最终能够将大数据集加载到Google数据存储中,但现在的情况看起来不太乐观。

1 个回答

2

180MB的数据量对于dev_appserver来说是很多的,它并不是为了处理大数据(甚至中等大小的数据)而设计的;它主要是为了小规模的本地测试而建的。最好的办法是减少你的测试数据集的大小;如果你无法做到这一点,可以试试 --use_sqlite 这个命令行选项,它可以让你使用新的基于sqlite的本地数据存储,这样会更适合处理大数据。

撰写回答