簡體   English   中英

Appengine Search API與數據存儲區

[英]Appengine Search API vs Datastore

我正在嘗試決定是否應該將App-engine Search API或Datastore用於App-engine Connected Android Project。 谷歌文檔的唯一區別是

...索引搜索可以找到不超過10,000個匹配的文檔。 App Engine數據存儲可能更適合需要檢索非常大的結果集的應用程序。

鑒於我已經非常熟悉數據存儲區:假設我不需要10,000個結果,有人會幫助我嗎?

  • 是否有任何優勢,以使用Search API與使用數據存儲為我的查詢(根據上面的報價,這似乎是合理使用一個其他)? 在我的情況下,最終用戶必須能夠搜索,更新現有條目並創建新實體。 例如,如果我的應用是書店,則用戶必須能夠添加新書,向現有書籍添加評論,搜索特定書籍。
  • 我的數據結構使得內容將由最終用戶提供。 文檔與數據存儲實體:哪個更新更便宜? $$等
  • 它們可以相互補充:數據存儲區和搜索API嗎? 有什么好處? 為什么有人會考慮將兩者配對? 捕獲/成本是多少?

其他一些信息:

  1. 數據存儲區是一個事務系統,在許多用例中很重要。 搜索API不是。 例如,您不能在單個事務中的搜索索引中放入和刪除文檔。
  2. 數據存儲區與像Cassandra這樣的NoSql DB有很多共同點,而搜索API實際上是一個文本搜索引擎,與Lucene非常類似。 如果您了解反向索引的工作原理,您將更好地了解搜索API的工作原理。
  3. 將數據存儲區API和搜索API的使用結合起來的一個很好的理由是,數據存儲區很難進行搜索API非常容易處理的某些類型的查詢(例如,自由文本查詢,地理空間查詢)。 因此,您可以將主實體存儲在數據存儲區中,但如果需要以數據存儲區不允許的方式進行搜索,則可以使用搜索API。 接下來,我認為如果數據存儲區和搜索API集成得更緊密,例如讓你對索引的文本字段進行自由文本搜索會很好,其中app引擎會在幕后為你自動創建一個搜索文檔索引。

關鍵的區別在於,使用數據存儲區,您無法在實體內部進行搜索。 如果您有一本名為“戰爭與和平”的書,如果用戶在搜索框中輸入“戰爭和平”,則無法找到它。 與評論等相同。因此,它不是一個真正的選擇。

搜索API最嚴重的內容是最終一致性,如下所述: https//developers.google.com/appengine/docs/java/search/#Java_Consistency

這意味着當您使用Search API添加或更新記錄時,它可能不會立即反映更改。 想象一下,用戶上傳書籍或更新其帳戶設置的情況,沒有任何變化,因為尚未更改所有服務器。

我認為Search API只對一件事有好處:搜索。 它基本上充當數據存儲區中數據的搜索引擎。

所以我的建議是將數據保存在用戶期望立即產生結果的數據存儲區中,並使用Search API搜索用戶不希望立即產生結果的數據。

數據存儲區僅提供一些查詢運算符(=,!=,<,>),執行嵌套過濾器和多個不等式將成本高昂或不可能(超時),搜索結果可能會產生大量誤報 您可以通過標記化來進行部分字符串搜索,但這會使您的實體膨脹。 解決這些限制的最佳方法是使用結構化屬性和/或祖先查詢

另一方面,搜索API在搜索文檔上運行全文搜索,這比NDB查詢更快,更准確,而不依賴於標記化數據。 缺點是它依賴於最新的數據。

使用數據存儲區處理數據(創建,更新,刪除),然后運行函數將這些數據作為文檔和集群使用索引,然后使用搜索API運行搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM