我正在开发一个GAE Python项目,该项目包含项目上的项目和交易。
首先,我们尝试使用带有引用属性的项类型和事务类型,但它使查询复杂化。
所以我们切换到一个多功能的版本,交易数据直接存储在项目中,这导致很多属性没有被使用,因为并非所有项目都与交易有关。
我希望它能加快应用程序的速度,但这是最好的方法吗?
知道:
有更好的解决方案吗?
编辑:
问题在于我主要使用事务属性查询项目,但只有2个where子句一次最大,我也经常更新事务。
其实我有这样的事情:
class 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()
答案 0 :(得分:1)
由于它是一对一映射,因此可以归结为您需要查询的项目或事务的多少属性 - 这些属性需要编入索引,以及您编写项目或事务的频率
合并它们的例子: - 您很少编写合并的项目/事务对象。 - 您查询一小组属性,许多属性不需要编制索引。 - 当您进行查询时,通常需要项目和交易。
合并它们的一个坏主意的例子: - 您的商品有许多索引属性,但您的交易很少。但您需要经常更新您的交易。在这种情况下,最好将它们分开,因为每次编写事务时,都会产生更新项目索引的所有写入成本。
如果您不需要查询事务,另一个选项是将事务存储为JSON编码,那么您不需要预先定义所有属性。您也可以使用Expando类。
为了获得更好的答案,最好发布您的商品/交易的样子以及您想要运行的查询类型。