我在谷歌应用程序中使用Python引擎。我的数据库里有5000人。5000个人对象的整个列表占用300 MB内存。在
我一直试图用blobcache将这个存储在内存中,blobcache是一个写在[here][1]的模块。在
我遇到了pickle“OutOfMemory”问题,正在寻找一种解决方案,它涉及将这5000个对象存储到数据库中,然后一次检索它们。在
我的人体模型是这样的。在
class PersonDB(db.Model):
serialized = db.BlobProperty()
pid = db.StringProperty()
每个person都是一个对象,它有许多相关的属性和方法,所以我决定pickle每个person对象并将其存储为序列化字段。pid允许我通过id查询此人
^{pr2}$当我一次将5000人存储到我的数据库中时,我得到一个服务器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()
如何在appengine方法中一次检索所有5000个对象?在
我的想法是做这样的事
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))
提前谢谢你的帮助,我已经在这个问题上耽搁了一段时间!!在
你也要检查一个项目的执行情况 https://github.com/ocanbascil/PerformanceEngine
您不应该同时在内存中存储所有5000个用户。只取回你需要的那个。在
对于这种大小的数据,为什么不使用blobstore和memcache呢?在
表现方面(从最高到最低):
看看今年的Google IO视频,有一个很好的关于使用blobstore的视频。在某些用例中,与DB相关联的性能(和成本)损失很大。在
(对于迂腐型读者,后三种阅读方式的阅读效果基本相同,但在写作时间/成本上存在显著差异)
相关问题 更多 >
编程相关推荐