我是数据存储的新手。将其用于非GAE应用程序。
我正在为我的用例寻求更好的设计。
通过扁平化和多种存储来存储嵌套聚合数据,以获得更好的查询支持。
"DateTime": "2015-10-21 12:10:50",
"Domain": "abc.com",
"Events": [
{
"EventName": "visit",
"EventCount": "188",
"Attributes_Aggregations": [
{
"Name": "color",
"Value_Aggregations": [
{
"Value": "red",
"Count": "188",
"Unique_Users": [
{
"ID": "user1",
"Count": "38"
},
]
},
]
},
]
},
]
我把它分为五种。每一种都作为祖先钥匙与另一种联系在一起。
种类:域
domain_name - abc.com
种类:事件
evt_name - visit
evt_count - 188
evt_datetime - 2015-10-21 12:10:50
ancestor_key - Domain abc.com
种类:属性
att_name - color
evt_datetime - 2015-10-21 12:10:50
ancestor_key - Domain abc.com Event visit
种类:AttributeValue
att_value - red
att_value_count - 108
evt_datetime - 2015-10-21 12:10:50
ancestor_key - Domain abc.com Event visit Attribute color
种类:用户
user_id - user1
count - 38
evt_datetime - 2015-10-21 12:10:50
ancestor_key - Domain abc.com Event visit Attribute color AttributeValue red
我已经添加了各种类型的"evt_datetime"属性,因为它将是主要的筛选键。
我已经为所有属性设置了索引,以启用任何属性过滤器,但由于一个属性限制上的一个不等式过滤器,我不得不暂停。
正如你所看到的,我不能用(>,<,>=,<=)中的任何一个同时过滤evt_datetime和evt_count。
有没有更好的方法将这些模式设计为使用多过滤器或无kindles查询?
答案可能是将所有内容存储在一个实体中。将重复属性与StructuredProperties一起使用(如果希望具有复杂的结构,请使用LocalStructuredProperty)。
您不必查询您要查找的确切实体。使用单个查询进行查询,并按代码过滤结果。
这种可能性实际上取决于您是如何存储的,以及您计划添加多少重复项目(因为实体大小不能超过1MB的存储空间)。