我在尝试将36k法语城市插入BigTable时遇到了一些问题。我解析一个CSV文件,并把每一行到数据存储使用这段代码:将成千上万的实体插入BigTable
import csv
from databaseModel import *
from google.appengine.ext.db import GqlQuery
def add_cities():
spamReader = csv.reader(open('datas/cities_utf8.txt', 'rb'), delimiter='\t', quotechar='|')
mylist = []
for i in spamReader:
region = GqlQuery("SELECT __key__ FROM Region WHERE code=:1", i[2].decode("utf-8"))
mylist.append(InseeCity(region=region.get(), name=i[11].decode("utf-8"), name_f=strip_accents(i[11].decode("utf-8")).lower()))
db.put(mylist)
它以大约5分钟(!!!)与本地开发服务器做到这一点,甚至10时删除他们用db.delete()函数。 当我尝试在线调用包含add_cities()的test.py页面时,达到30秒超时。 我来自MySQL世界,我认为这是一个真正的耻辱,不要在不到一秒钟内添加36k个实体。我可能会在做错的方式做到这一点,所以我指的是你:
- 为什么这么慢?
- 有没有什么办法在合理的时间内做到这一点?
谢谢:)
为什么不尝试使用[批量上传](http://code.google.com/intl/it/appengine/docs/python/tools/uploadingdata.html)? – systempuntoout 2011-06-15 20:32:44
因为我需要用在线解析的数据做同样的事情,它不会在数据文件中... – 2011-06-15 20:36:58