0

使用:Google App Engine,Python 2.7,Google NDB Datastore,GQL。Google App Engine數據存儲200索引限制(index.yaml)

我寫的是有許多種NDB業務應用程序(ndb.Model) 例如:客戶,供應商,供應商,製造,訂單等。

我喜歡與各種實體分類信息向用戶呈現/ fields:

示例:index.yaml - 客戶類可能有12-15個索引文件條目。

- kind: Customers 
    - properties: 
    - name: Name 
    - name: NewDate 
    - direction: desc 
- kind: Customers 
    - properties: 
    - name: State 
    - name: Name 
- kind: Customers 
    - properties: 
    - name: Country 
    - name: Name 
- kind: Customer 
    - properties: 
    - name: Code 
    - name: Name 
    - name: Class 
    - name: LastOrderDate 
    - direction: desc 

只是一個例子,但我喜歡有大約20-30 NDB樣(ndb.Model)s的各約15綜合指數。如果我遇到200限制,我想確保我有一個解決方法。

不知道爲什麼谷歌會限制這個在200,我認爲限制應該是每個NDB種類(ndb.Model)也許是20?

謝謝你的任何建議

+0

2014年2月26日發佈的新版App Engine SDK - 發行說明版本1.9.0 - 關於「索引數目沒有固定限制」,僅適用於Search API或適用於所有應用程序的自定義索引? ? – Brian

+0

問題8305:http://code.google.com/p/googleappengine/issues/detail?id=8305正在解決此問題,正如我所說我認爲限制應該是每個NDB種類 – Brian

回答

3

你需要重新考慮一下你的數據模型。您的主要問題不是200個索引的限制。如果您實施您正在考慮的模型,那麼您的索引將比數據佔用更多的存儲空間,並且您的寫入成本將是天文數字。

每次保存數據對象時,都會產生每個實體的費用加上每個索引屬性加上每個自定義索引的費用。使用您的數據模型,您將最終每次更新每個實體所需的費用超過15-20倍。

您可能有SQL數據庫的經驗,但數據存儲非常不同。你必須以不同的方式建模你的數據。

我構建了一個非常複雜的應用程序,其中有許多不同的實體,它們之間的關係非常複雜。我在這個應用程序中有5個自定義索引。

編輯:

在非關係數據庫中有很多數據建模方法。舉個例子,以「名稱和狀態」索引爲例。有多少客戶會有相同的名稱,但在不同的州?使用給定名稱檢索所有客戶會更便宜,然後選擇屬於所需狀態的客戶,而不是僅爲這些屬性組合創建自定義索引。請記住,讀取比寫入便宜得多,而且數據量更小。

這同樣適用於您的所有示例。您可以通過名稱和訂單日期來選擇所有客戶,而在非常罕見的情況下,如果兩個客戶具有相同的名稱,則可以不使用「代碼和名稱AND類和LastOrderDate」,而只使用錯誤的代碼/類來刪除。

+0

Andrei,感謝回覆。我在大多數領域都有(索引=假),但由於多公司,多用戶,安全性,訪問客戶信息變得複雜,並且創建了自定義索引。 – Brian

+0

此外,用戶還有一個導出功能,允許他們從1 - 3個字段中的下拉字段值中進行選擇,這些字段根據選擇導出信息。 – Brian

+1

行之間的最後一條評論揭示了「將現有關係數據模型移植到數據存儲」場景。我贊成安德烈,因爲設計應該擁抱雲並放棄第三種正常形式。如果這會導致功能痛苦,則可降低用戶在該應用的雲版本中的預期。對於低效地推進平臺的努力是不值得的。另一方面,存儲和閱讀都很便宜,因此您可以通過按照Andrei的建議反覆閱讀和丟棄大量記錄來保留大量功能。 –

相關問題