写操作太多了

时间:2011-12-30 19:09:24

标签: python google-app-engine google-cloud-datastore

我正在app-engine(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)

1 个答案:

答案 0 :(得分:3)

除非您在搜索中定位属性(或使用它进行排序),否则将它们取消索引会保存索引写入。每个属性都被索引两次(一次升序,一次降序),除非属性类型本身没有索引,或者设置indexed=False

请参阅http://code.google.com/appengine/docs/python/datastore/propertyclass.html#Property

在您的情况下,如果street_search是用于搜索的street的规范化形式,则将street标记为indexed=False将节省2次写入。