Слишком много операций записи - PullRequest
1 голос
/ 30 декабря 2011

Я разрабатываю приложение для каталогов на app-engine (python), и у меня возникли проблемы со слишком большим количеством операций записи.Первая проблема заключается в том, что у меня есть скрипт .NET, который проходит через файл Excel и отправляет данные на страницу в моем приложении.Когда я запустил его, он прошел около 700 записей, и я уже использовал 75% своей квоты на операции записи.То же самое произошло, когда я написал скрипт для обновления всех моих моделей, чтобы иметь поле поиска для каждого свойства.Я перешел с 75% заполненной квоты на 96% примерно за 20 секунд и получил временное ограничение квоты для слишком большого количества записей за короткий промежуток времени.Я думаю, что проблема может быть связана с индексами, но я новичок, когда дело доходит до 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 голосов
/ 31 декабря 2011

Если вы не нацелены на свойство в поиске (или не используете его для упорядочивания), делая их неиндексированными, сохраняет записи индекса.Каждое свойство индексируется дважды (один раз по возрастанию, один раз по убыванию), если только тип свойства не является по своей сути неиндексированным или вы не установили indexed=False.

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

В вашем случае, если street_search - это нормализованная форма street, используемая для поиска, тогда пометка street как indexed=False сохранит 2 записи.

...