2009-11-17 25 views
2

我有一個關於如何建模在App Engine的一個多一對多的關係問題:應用程序引擎多到很多數據建模

一個Blogentry可以有多個標籤,一個標籤可以應用於許多博客條目。

我看到一對夫婦的情景:

  1. 使用一組字符串作爲博客條目的屬性。

    • 這讓我爲一個條目使用標籤
    • 輕鬆查詢這並不讓我去取所有標籤及其權重(它們適用多少個單元)
  2. 使用(在Entry類,反之亦然爲標籤的鍵集)

    • 這讓我去取所有標籤及其權重
    • 條目和標籤類之間無主的關係
    • 這是更復雜的維護
    • 設置屬性lazyloaded,或者我會每次獲取對象的整個圖形? (取一個條目,該條目取了一些標籤,每個依次獲取多個條目)
  3. 使用1,但維持對標籤數據及其權重seperately

    • 這有同步問題中的條目的標籤數據和標籤

之間的任何輸入和指針,將不勝感激。我認爲這是一個很常見的情況,但我還沒有看到任何好的解決方案。

回答

1

如同許多其他的數據庫管理系統,多到許多關係本身不支持在App Engine數據存儲,但可以通過「結表」來解決。但是,由於App Engine的查詢語言不支持連接,因此在您的應用程序中使用這將非常痛苦。事實上,Google的BigTable架構並不鼓勵,因爲分佈式連接效率不高。

所以,我建議去用「保持簡單愚蠢」的規則;使用最簡單的工作。 「Blogentry」對象中的字符串列表聽起來相當健壯。即使它是容易出現競爭情況(人做並行更新,覆蓋彼此的變化),但有多少人,你有反正編輯同一個博客帖子?

+0

嗨,謝謝你的回答。 你說得對,這就是我現在做的(選擇1)。 不幸的是,這並沒有讓我輕鬆搞定所有標籤及其權重的列表(需要這個名單,因爲我想有一個tagcloud,我想對代碼添加到新的條目自動完成)。 這似乎違反直覺,更不用說不可擴展,計算這個列表內存中,但也許這是需要做的。 – Wilken 2009-11-17 08:12:38

0

我決定和選項3一起去,用它們的權重來維護一個單獨的標籤列表。

這似乎是工作正常,但插入/更新的代碼是有點混亂。

相關問題