我正在应用程序引擎(python)上开发一个目录应用程序,但我遇到了太多写入操作的麻烦。第一个问题是我有一个 .NET 脚本,它会遍历 Excel 文件并将数据发布到我的应用程序中的页面。当我运行它时,它处理了大约 700 条记录,并且我已经使用了 75% 的写入操作配额。当我编写一个脚本来更新所有模型以使每个属性都有一个搜索字段时,也发生了同样的事情。我在大约 20 秒内从配额的 75% 填充到了 96%,并且在短时间内进行了过多的写入操作,我得到了临时配额限制。我认为这个问题可能与索引有关,但当涉及到 python 和 appengine 时,我有点新手。这是我的模型:
class AlumniEntry(db.Model):
"""Models an entry for a single alumni"""
author = db.UserProperty()
entered = db.DateTimeProperty(auto_now_add=True)
title = db.StringProperty()
first_name = db.StringProperty(required=True)
first_name_search = db.StringProperty()
maiden_name = db.StringProperty()
maiden_name_search = db.StringProperty()
spouse_name = db.StringProperty()
spouse_name_search = db.StringProperty()
grad_year = db.StringProperty(required=True)
elementary = db.StringProperty(choices=('yes', 'no', 'idk'), default='idk')
class LastName(db.Model):
entry = db.ReferenceProperty(AlumniEntry, collection_name='last_names')
last_name = db.StringProperty(required=True)
last_name_search = db.StringProperty()
class PhoneNumber(db.Model):
entry = db.ReferenceProperty(AlumniEntry, collection_name='phone_numbers')
number = db.PhoneNumberProperty(default=None)
class Email(db.Model):
entry = db.ReferenceProperty(AlumniEntry, collection_name='emails')
email = db.EmailProperty(default=None)
email_search = db.EmailProperty(default=None)
class Address(db.Model):
entry = db.ReferenceProperty(AlumniEntry, collection_name='addresses')
street = db.StringProperty()
street_search = db.StringProperty()
city = db.StringProperty()
city_search = db.StringProperty()
state = db.StringProperty()
state_search = db.StringProperty()
zip_code = db.StringProperty()
class UserAuth(db.Model):
added_by = db.StringProperty(required=True)
user_id = db.StringProperty(required=True)
最佳答案
除非您在搜索中定位某个属性(或将其用于排序),否则使它们未建立索引可以保存索引写入。每个属性都会被索引两次(一次升序,一次降序),除非该属性类型本质上未索引,或者您设置了 indexed=False
。
参见http://code.google.com/appengine/docs/python/datastore/propertyclass.html#Property
在您的情况下,如果 street_search
是用于搜索的 street
的标准化形式,则将 street
标记为 indexed=False
将节省 2 次写入。
关于python - 太多的写操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683035/