【问题标题】:App engine datastore, query sorted by fk attribute应用引擎数据存储,按 fk 属性排序的查询
【发布时间】:2012-04-27 20:10:53
【问题描述】:

我正在研究谷歌应用引擎的数据存储,并且正在开发一个用于管理事件的应用。 我有 2 个实体:

- user
- event
    - attribute eventDate

一个用户可以关注一个或多个事件,所以我创建了链接表

- UserEvent
    -User key
    -Event key

我的问题是我想要一个用户关注的事件列表,按 eventDate 排序。

我该怎么办?

我找到了 3 个解决方案,但我不喜欢任何人...

  1. 查询所有排序的事件,然后迭代并只选择 一个在 UserEvent 上有一个发生(我不喜欢,因为 可能我会有数千个事件,但只有一个用户关注 几个..)
  2. 查询所有用户事件(按userKey过滤)并放入结果 在有序列表中(我不喜欢,因为我必须在 一次,不分页)
  3. 在表 UserEvent 中添加属性 eventDate (我不喜欢,因为 如果一个活动有 3000 名关注者,我必须进行 3000 次更新...)

谢谢 亚历山德罗

【问题讨论】:

  • 或者,如果您总是查询 1 个给定用户的事件,您可以考虑在用户实体中存储事件的 ListProperty。
  • 嗯,没错,我查询的是单用户。但是如果我把所有关注的事件都放在用户中,用户实体可能会变得太大?

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


【解决方案1】:

如果您真的不喜欢这种非规范化,请考虑使用 CloudSQL。

【讨论】:

  • 我不确定,我喜欢非规范化,但我总是使用关系数据库...我正处于创建应用程序的开始阶段,所以我也可以更改数据库的结构.你觉得我的解决方案怎么样?会有更好的吗?
  • 关系或非关系之间?我不知道,我总是使用关系,但我对非关系很好奇(如果所有拥有大量数据的大公司都使用非关系,我认为这很好......)。顺便说一句,我正在开发应用程序引擎,所以我认为没有选择......在解决方案上更好意味着一个在查询方面不那么广泛,而且更可靠......
【解决方案2】:

如果您总是查询给定用户的事件,您可以考虑将事件的 ListProperty 存储在用户实体中。

- user
    - attribute eventList []key

您将受到实体的最大大小(当前为 1MB)的限制,如果该列表已编入索引,则您的条目数限制为 5000 个。

【讨论】:

  • 5000 个实体很多...如果我的应用程序会有一些用户关注 5000 个事件,我会非常高兴 :-) 我会考虑的...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多