数据存储区存储聚合嵌套数据的最佳方法,以便更好地进行查询

时间:2015-11-04 17:51:35

标签: google-cloud-datastore gcloud-python google-cloud-python

我是数据存储区的新手。将它用于非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
  

种类: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进行过滤。

有没有更好的方法来设计这些架构以使用多个过滤器或无形查询?

1 个答案:

答案 0 :(得分:1)

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

您不必查询您要查找的确切实体。使用单个查询执行查询并按代码过滤结果。

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