2

我有一个大约 500 条记录的小型数据库。我正在尝试实现一个版本控制方案,将表单及其当前版本保存到我的记录集合中。理想情况下,我想将表单及其版本号存储在嵌入式文档中,以保持整洁:

class Structure(db.EmbeddedDocument):
    form = db.ReferenceField(Form, required = True)
    version = db.IntField(required = True)

    @property
    def short(self):
        return {
             'form': self.form,
             'version': self.version
        }

class Record(db.Document):
    structure = db.EmbeddedDocumentField(Structure)

    @property
    def short(self):    
        return {
            'structure': self.structure.short
        }

这样,当我回忆起一条记录时,我可以抓住当时使用的表格和版本。运行一些计时测试:

start = time.clock()
records = Record.objects.select_related()
print ('Time: ', time.clock() - start)  
response = [i.short for i in records]
print ('Time: ', time.clock() - start)

我发现所有记录的查询时间Record.objects.select_related()在 1.12 秒左右是合理的,但是,我发现用于 JSON 传输的序列化在 24.1 秒左右非常昂贵!

如果我通过删除 EmbeddedDocument 的使用进行轻微修改:

class Record(db.Document):
    form = db.ReferenceField(Form, required = True)
    version = db.IntField(required = True)

    @property
    def short(self):    
        return {
            'form': self.form,
            'version': self.version
        }

运行相同的测试,我发现查询时间几乎没有变化,大约为 1.36 秒,但是,序列化时间提高了 24 倍至 1.14 秒。我真的不明白为什么使用嵌入式文档会导致序列化时间的巨大损失......?在嵌入对象中解除引用更困难吗?

4

0 回答 0