App Engine社交平台 - 内容交互建模策略

时间:2016-01-15 10:01:45

标签: python google-app-engine social-networking

我在Google应用引擎上运行了一个Python服务器并实现了一个社交网络。我试图找到最好的方式(最好=快速和便宜)来实现项目的交互。 就像任何其他社交网络一样,我有流项目(“内容”),用户可以“喜欢”这些项目。

至于查询,我希望能够:

  1. 获取喜欢该内容的用户列表
  2. 获得喜欢的人数。
  3. 将喜欢的人与其他任何用户列表联系起来。
  4. 我目前的实施包括: 1.内容项上的IntegerProperty,它包含总的likers数 2. InteractionModel - 一个NdbModel,其密钥id为内容id(快速获取),而JsonPropery包含likers用户名

    每次用户喜欢内容时,我都需要更新计数器和用户列表。这需要我运行并支付4次数据存储操作(2次读取,2次写入)。 最重要的是,具有大量相似的项目会导致InteractionModel具有巨大的json,在读取/写入时需要时间来序列化和反序列化(仍然比RepeatedProperty快)。 没有更新的字段被索引(内置索引)也没有包含在组合索引(index.yaml)中

    寻找一种更有效,更具成本效益的方法来实现相同的要求。

1 个答案:

答案 0 :(得分:1)

我猜你的模型中有两个实体:用户和内容。您的查询似乎聚合在多个Content对象上。

如何在User对象上保留此聚合值?这样,您不需要执行任何查询,而只需查找存储在User对象中的数据以进行这些查询。

但在某些时候,您可能会考虑不使用数据存储区,而是查看sql存储。它具有更高的固定成本,但我猜测在某些方面(更多内容/用户)可能值得考虑成本和性能。