Я использую Google App Engine в Python.У меня есть 5000 человек в моей базе данных.Весь список объектов на 5000 человек занимает 300 МБ памяти.
Я пытался сохранить это в памяти, используя blobcache, модуль, написанный [здесь] [1].
Ясталкиваюсь с проблемами OutOfMemory и ищу решение, которое включает в себя сохранение этих 5000 объектов в базу данных и последующее извлечение их всех сразу.
Моя личная модель выглядит следующим образом.
class PersonDB(db.Model):
serialized = db.BlobProperty()
pid = db.StringProperty()
Каждый человек - это объект, с которым связано много атрибутов и методов, поэтому я решил выбрать каждый объект человека и сохранить его как сериализованное поле.Pid позволяет мне запрашивать человека по его идентификатору.Мой человек выглядит примерно так
class Person():
def __init__(self, sex, mrn, age):
self.sex = sex;
self.age = age; #exact age
self.record_number = mrn;
self.locations = [];
def makeAgeGroup(self, ageStr):
ageG = ageStr
return int(ageG)
def addLocation(self, healthdistrict):
self.locations.append(healthdistrict)
Когда я сохраняю все 5000 человек одновременно в своей базе данных, я получаю ошибку Server 500.Кто-нибудь знает почему?Мой код для этого выглядит следующим образом:
#People is my list of 5000 people objects
def write_people(self, people):
for person in people:
personDB = PersonDB()
personDB.serialized = pickle.dumps(person)
personDB.pid = person.record_number
personDB.put()
Как мне получить все 5000 этих объектов одновременно в моем методе App Engine?
Моя идея состоит в том, чтобы сделать что-то подобное
def get_patients(self):
#Get my list of 5000 people back from the database
people_from_db = db.GqlQuery("SELECT * FROM PersonDB")
people = []
for person in people_from_db:
people.append(pickle.loads(person.serialized))
Спасибо за помощь заранее, я застрял на этом некоторое время !!