谷歌应用引擎项目/交易数据模型



我正在开发一个GAE Python项目,该项目包含项目和事务。

起初,我们尝试使用带有引用属性的项类型和事务类型,但这使查询变得复杂。

因此,我们切换到了将交易数据直接存储在项目中的多合一版本,这导致许多属性未被使用,因为并非所有项目都与交易有关。

我希望它能加快应用程序的速度,但这是最好的方法吗?

知道:

  • 我们预计会有很多交易和更多的项目。
  • 我们需要检查交易状态(实际存储在项目的状态中)。
  • 每个项目只能进行一次交易,但有许多不同类型的交易。

有没有更好的解决方案?

编辑:

问题是我主要使用事务属性查询项目,但一次最多只有 2 个子句,我也经常更新事务。

其实我有这样的东西:

类 MyItem(db.型号):

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()

由于它是一对一映射,因此归结为您需要查询的项目或事务的属性数量 - 这些属性需要索引,以及您编写项目或事务的频率。

可以

合并它们的示例:- 您很少编写合并的项目/事务对象。- 您查询一小组属性,许多属性不需要编制索引。- 当您执行查询时,您通常需要项目和事务。

合并它们是一个坏主意的示例:- 您的项目具有许多索引属性,但您的事务很少。 但是您需要经常更新您的交易。 在这种情况下,最好将它们分开,因为每次编写事务时,都会产生更新项目索引的所有写入成本。

如果您不需要查询事务,另一种选择是将事务存储为 JSON 编码,则无需预先定义所有属性。 您也可以使用 Expando 类。

为了获得更好的答案,您最好发布您的项目/交易的外观以及您想要运行的查询类型的示例。

最新更新