【发布时间】:2015-11-04 17:51:35
【问题描述】:
我是数据存储的新手。将其用于非 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"
},
]
},
]
},
]
},
]
我将它存储在 5 种中。每一种都与另一种作为祖先键相关。
种类:域
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
种类:属性值
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”属性,因为它将是主要的过滤键。
我已经为所有属性设置了索引以启用任何属性过滤器,但是由于一个属性限制上的一个不等式过滤器让我暂停了。
如您所见,我无法使用 (>,=,
有没有更好的方法来设计这些架构以使用多个过滤器或 kindless 查询?
【问题讨论】:
-
这对于堆栈来说有点宽泛......无论如何,通常当人们尝试进行多重不等式时,我们建议您可以使用一个计算属性。例如,假设您总是想要计数超过 200 的事件,您可以添加一个“over_200”布尔参数,然后在那个参数上使用一个 =。一般来说,如果你需要两个不等式,最好的建议是查询一个,然后使用代码过滤另一个
标签: google-cloud-datastore gcloud-python google-cloud-python