2012-04-25 197 views
0

我正在開發一個GAE Python項目,其中包含物品和項目上的交易。Google應用程序引擎項目/交易數據模型

首先,我們嘗試使用具有引用屬性的項類型和事務類型,但它使查詢複雜化很多。

因此,我們切換到一個多功能於一身的版本,交易數據直接存儲在項目中,導致很多屬性未被使用,因爲並非所有項目都被交易所關注。

我期望它能加快應用程序的速度,但這是做到這一點的最佳方式嗎?

知道了:

  • 我們預計有大量的交易,並有更多的項目。
  • 我們需要檢查交易狀態(實際存儲在物品的狀態)。
  • 每個項目只有一個可能的交易,但有許多不同類型的交易。

有沒有更好的解決方案?

編輯:

的問題是,我使用的交易商品主要是查詢,但僅屬性2 where子句一次最大的,也是我經常更新的交易。

其實我有一些事情是這樣的:

類MyItem(db.Model):

owner = db.ReferenceProperty(MyUser) 
descr = db.StringProperty() 

status = db.IntegerProperty() # contains item status/transaction status 

tx_actor = db.emailProperty() 
tx_token = db.StringProperty() 
latest_tx_date = db.DateTimeProperty() 

回答

1

因爲它是一個1對1的映射,把它歸結爲多少的屬性您需要查詢的項目或事務 - 需要將這些屬性編入索引,以及您多久編寫一次項目或事務。

一個可以將它們合併的例子: - 您很少編寫合併的項目/事務對象。 - 您在一小組屬性上進行查詢時,許多屬性不需要編入索引。 - 當您進行查詢時,通常需要項目和事務。

一個例子,它是一個壞主意合併它們: - 您的物品有許多索引屬性,但您的交易很少。但是你需要經常更新你的交易。在這種情況下,最好讓它們保持分開,因爲每次寫入交易時,都會導致更新項目索引的所有寫入成本。

如果您不需要查詢事務,另一種選擇是將事務存儲爲JSON編碼,那麼您不需要事先定義所有的屬性。你也可以使用Expando類。

爲了得到更好的答案,您最好過帳一些您的物品/交易的樣子,以及您想要運行的查詢類型。

+0

謝謝更新了問題 – maazza 2012-04-26 08:44:48

+0

您是否在查詢所有這些屬性?大多數人看起來很好。您索引的唯一額外內容是所有者和說明,這不是很大的開銷。我也不知道你在哪裏得到「最多隻有2條子句」。 – dragonx 2012-04-26 14:37:50

+0

是的,除了描述,對於where子句,我主要做 東西像所有者= X和狀態= Y 和tx_actor = A和狀態= B – maazza 2012-04-26 15:52:37

相關問題