Datastore 存储聚合嵌套数据以更好地查询的最佳方式

Posted

技术标签:

【中文标题】Datastore 存储聚合嵌套数据以更好地查询的最佳方式【英文标题】:Datastore best way to store aggregated nested data for better querying 【发布时间】: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”布尔参数,然后在那个参数上使用一个 =。一般来说,如果你需要两个不等式,最好的建议是查询一个,然后使用代码过滤另一个 【参考方案1】:

答案可能是将所有内容存储在单个实体中。 使用带有 StructuredProperties 的重复属性(或 LocalStructuredProperties,如果您想拥有复杂的结构)。

您不必查询您要查找的确切实体。单条查询,按代码过滤结果。

这种可能性实际上取决于您如何存储它以及您计划添加多少重复项(因为实体大小不能超过 1MB 的存储空间)。

【讨论】:

以上是关于Datastore 存储聚合嵌套数据以更好地查询的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

聚合数据以按数组的第一个值分组

如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式

Prisma 读取数据 - 有没有更好的方法来读取嵌套数据?

Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比

使用 coalesce() 避免嵌套聚合错误

MongoDb 聚合在 $group 中使用 $sortByCount