【问题标题】:Google app engine item / transaction data model谷歌应用引擎项目/交易数据模型
【发布时间】:2012-04-25 19:09:22
【问题描述】:

我正在开发一个 GAE Python 项目,其中包含项目和项目交易。

一开始,我们尝试使用带有引用属性的物品种类和交易种类,但它使查询变得复杂。

所以我们切换到一个多合一版本,交易数据直接存储在商品中,这导致很多属性没有被使用,因为并非所有商品都与交易有关。

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

知道:

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

有没有更好的解决方案?

编辑:

问题是我主要使用事务属性查询项目,但一次最多只有 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()

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    由于它是一对一的映射,因此归结为您需要查询的商品或交易的属性有多少——这些属性需要编制索引,以及您编写商品或交易的频率.

    可以合并它们的示例: - 你很少写你的合并项目/交易对象。 - 您查询一小组属性,许多属性不需要索引。 - 当您进行查询时,您通常需要商品和交易。

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

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

    为了获得更好的答案,您最好发布一些示例,说明您的项目/交易是什么样的,以及您想要运行的查询类型。

    【讨论】:

    • 您是否在查询所有这些属性?对我来说大部分看起来都很好。您要索引的唯一额外内容是所有者和描述,这不是很多开销。我也不知道你在哪里得到一个“最多只有 2 个 where 子句”。
    • 是的,除了描述,我主要做的事情是 where owner = X and status = Y and tx_actor = A and status = B
    • 看起来你正在做的很好。我不知道在 WHERE 中有两个以上的子句是否有任何硬性限制。查询 WHERE owner = X AND status = Y AND tx_actor = A 应该不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多