Google应用程序引擎项目/交易数据模型

问题描述:

我正在开发一个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的映射,把它归结为多少的属性您需要查询的项目或事务 - 需要将这些属性编入索引,以及您多久编写一次项目或事务。

一个可以将它们合并的例子: - 您很少编写合并的项目/事务对象。 - 您在一小组属性上进行查询时,许多属性不需要编入索引。 - 当您进行查询时,通常需要项目和事务。

一个例子,它是一个坏主意合并它们: - 您的物品有许多索引属性,但您的交易很少。但是你需要经常更新你的交易。在这种情况下,最好让它们保持分开,因为每次写入交易时,都会导致更新项目索引的所有写入成本。

如果您不需要查询事务,另一种选择是将事务存储为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