可以說我有一個Photo類,包含標籤和日期字段的多值屬性。appengine的數據如何存儲查詢和索引多值屬性?
我想允許用戶根據標籤執行查詢(對於多於1個標籤,只使用AND運算符)。
例如,假設用戶搜索下雨天。 從照片中選擇*其中tag ='clouds'AND tag ='rainy'
鋸齒形合併如何工作?我知道兩次掃描都會執行,並根據兩次搜索的鍵是否指向相同的照片,然後返回。這是否同時發生?例如:搜索1找到包含標籤'雲'的照片時,搜索2正在查找包含標籤「雨」的第一張照片。當兩個搜索都完成時,它變成同步的。搜索1然後繼續它的掃描,直到它碰到與S2相同的密鑰。然後,每次搜索的密鑰都是相同的,則返回照片,並且每次搜索時「光標」沿着1步移動?其次,定義多個索引是否會加快這類查詢的速度?例如,如果我想允許多達4個標籤,那麼我需要定義索引,例如: 索引(照片) 索引(照片,標籤) 索引(照片,標籤,標籤) 索引(照片,標籤,標籤,標籤) 索引(照片,標籤,標籤,標籤,標籤) 然後,執行上述相同的查詢會更快嗎?
此外,使用我們原始的查詢,可以說我們有數百萬張照片標記爲多雲,但只有兩張標記爲下雨。這是否意味着之字形將執行相對較慢?由於其中一項搜索會嘗試找到匹配項存在?更糟糕的是,如果我們有一百萬張照片標記爲「多雨」,一百萬張照片標記爲「雲」,但沒有一張照片中同時包含兩個標籤。定義上述索引是否解決了這個問題?
最後,讓我們說一張照片有100個標籤。這是否意味着上述所有索引都必須包含100個標籤的每個組合?
我知道這裏有got-yas(例如一個實體只能被索引5000次,而一個多值屬性只能索引1000次)。