写操作过多
我正在开发一个目录应用程序,使用的是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 个回答
3
除非你在搜索时指定某个属性(或者用它来排序),否则将这些属性设置为不索引可以节省写入索引的时间。每个属性会被索引两次(一次是升序,一次是降序),除非这个属性的类型本身就是不需要索引的,或者你将它设置为 indexed=False
。
详细信息可以查看 这个链接
在你的情况下,如果 street_search
是用于搜索的 street
的标准化形式,那么将 street
标记为 indexed=False
可以节省两次写入。