1

我是數據存儲的新手。將其用於非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。

是否有更好的方法來設計這些模式使用多個過濾器或無差別的查詢?

+0

這對於堆棧有點寬泛......在任何情況下,通常當人們試圖做多重不平等時,我們建議一個可以使用的計算屬性。例如,假設您總是希望計數超過200的事件,您可以添加「over_200」布爾參數,然後在該參數上使用=。一般來說,如果你需要兩個不等式,最好的建議是用一個查詢,然後用代碼來過濾另一個 – Patrice

回答

1

答案可能是將所有內容都存儲在單個實體中。 對StructuredProperties使用重複屬性(或者如果您想要具有複雜結構,則使用LocalStructuredProperties)。

你不必查詢你正在尋找的確切實體。使用單個查詢執行查詢並通過代碼過濾結果。

這種可能性真的取決於你如何存儲這個以及你計劃添加多少重複的項目(因爲實體大小不能超過1MB的存儲空間)。