尝试在应用引擎中对一些高度连接但也有层次的数据进行建模。
这是一个例子:
Person:
Phone Numbers:
Number: 555-555-5555, Ext: 123, Notes: Work
Number: 444-444-4444, Ext: 456, Notes: Mobile
一个实体,包含存储为 JSON blob 的数据结构:
一种方法是将phone_numbers
集合存储为 JSON 文本的未索引 blob,然后添加搜索属性,以便可以通过电话号码查询人员:
p_entity = Person()
p_entity.phone_numbers = dbText(simplejson.dumps([{'Number':'555-555-5555', 'Ext':'123', 'Notes':'Work'},{'Number':'444-444-4444', Ext:'456', Notes:'Mobile'}]))
p_entity.phone_numbers_search_property = ['5555555555', '4444444444']
p_entity.put()
具有父子关系的多个实体:
另一种方法是使用子实体和父实体:
person_entity = Person()
person_entity.put()
phone_entity1 = PhoneNumber(parent=person_entity)
phone_entity.Number = '5555555555'
phone_entity.Ext = '123'
phone_entity.Notes = 'Work'
phone_entity2 = PhoneNumber(parent=person_entity)
phone_entity.Number = '4444444444'
phone_entity.Ext = '456'
phone_entity.Notes = 'Mobile'
一个用例:
这是高度关联的数据。一个人对象包含多个电话号码。但也可以拨打这些电话号码或从这些电话号码拨打电话。电话记录也需要参考这些电话号码。
父子实体关系的目的:
阅读文档后,我的印象是父子实体关系的目的是执行交易。
但是,在这种情况下它们是否也适用?将父级及其所有子级从数据存储中拉出与将一个实体与其“子级”拉出而不是存储为 JSON 文本 blob 一样有效吗?
基本问题
在谷歌应用引擎中是否有一种正常且可接受的方式来处理此类数据?