写入操作太多

2024-06-28 15:03:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: nametruedefaultdbsearchmodelrequiredclass
1条回答
网友
1楼 · 发布于 2024-06-28 15:03:57

除非您在搜索中以某个属性为目标(或将其用于排序),否则使其无索引将保存索引写入。每个属性被索引两次(一次升序,一次降序),除非属性类型本身没有索引,或者您设置了indexed=False。在

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

在您的例子中,如果street_search是用于搜索的street的规范化形式,那么将street标记为indexed=False将节省2次写入。在

相关问题 更多 >