我正在appengine(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次写入。在相关问题 更多 >
编程相关推荐