1

很多時候我只需要一個實體屬性的值。所以沒有必要用key.get()來獲取整個實體。Google數據存儲,獲取具體的實體屬性

我知道投影查詢會返回具有您指定屬性的不完整實體。這些值位於索引中,因此不需要從數據存儲中獲取該實體。

我想知道如果給定一個鍵,有一種方法來獲取部分實體,從索引而不是數據存儲獲取信息,因爲我認爲從索引獲取將比從數據存儲更快。

例如是這樣的: 文章= some_key.get(投影= [Article.title]) 打印article.title

有一種方法來做到這一點?這可能是一個新的功能要求?編輯: 似乎沒有辦法。現有的索引按屬性排序。唯一的方法是,如果有一種方法可以創建按鍵排序的索引,並將該屬性放在一列中,但似乎沒有這些額外索引非常有用。

+0

你是對的沒有辦法。 –

+0

謝謝您的確認。嘗試一下,我可以添加一個屬性字段來保存當前實體的鍵值,所以它保存在索引中並按鍵排序,但我認爲它不值得。在這種情況下,索引將採用以下形式:| key_property |標題| __key__ | –

回答

3

沒有其他信息,這種過早的優化聞起來很高。除非你認爲時間上的潛在差異代表了處理過程中的大部分時間,否則你可能在錯誤的領域工作。

另外需要注意的是,獲取實體的大量延遲是與實體大小無關的網絡延遲。除非您正在處理大型實體(xx-xxxx KiB),否則數據檢索大小對延遲的影響是微不足道的(如果不是更小的話)。

話雖如此,如果你確實有大型實體,並且真的想嘗試一下,有一個解決方案可以有效地做你所要求的,同時仍然保持強烈的一致性。

例如:假設您想從Kind myKind檢索屬性myField1 & myField2。

你需要這個指數:

select myField1, myField2 from myKind WHERE __key__ HAS ANCESTOR Key(myKind, myId) 

- kind: myKind 
    ancestor: yes 
    properties: 
    - name: myField1 
    - name: myField2 

假設實體的ID身份識別碼,和實體有沒有後代,它可以用做查詢注意:這可以在子實體上完成,唯一的要求是不具有相同類型的後代。

enter image description here

這工作,因爲HAS ANCESTOR運營商也將匹配的祖先,在這種情況下是你正在尋找的實體。使用HAS ANCESTOR也會強制查詢強烈一致,這意味着它的行爲就像get一樣,也非常一致。

這種方法的缺點是它需要一個包含祖先的組合索引 - 這將需要更多的存儲空間。另一個缺點是它可能不會更快。因人而異。

相關問題