java - 使用对象化的多对多关系?

标签 java google-app-engine objectify

我正在将我的应用程序从关系数据库转移到 objectify/google 应用引擎。

应用程序具有建模如下的关系:

一条消息可以发送给许多用户。每个用户可以有许多发送给他们的消息

我需要能够扫描发送给特定用户的所有消息

如何使用 Objectify 执行此操作?

最佳答案

有多种方法可以做到这一点。

  1. 您可以在用户对象中保存消息列表。这将很好地满足您获取发送给用户的所有消息的要求,因为不需要执行查询。

  2. 您可以在消息对象中保存用户列表。要获取发送给单个用户的所有消息,请执行查询。

  3. 您可以保存上面的两个列表。请记住,在 App Engine 中,通常无需标准化,也无需担心磁盘空间和重复项。几乎总是构建您的结构,以便查询速度更快。

  4. 您可以忘记列表,并拥有关系对象,就像关系数据库中的表一样。在某些用例中,它仍然是 App Engine 中不错的选择,例如当列表太大(数千)并且会使您的对象膨胀并且甚至可能无法查询时。

决定针对您指定的查询采取哪种方法的最重要变量是通常会向单个用户发送多少条消息,以及是否有最大消息数?如果我们谈论的是平均几十条或更少,最多几百条,那么用户对象中的消息列表对我来说听起来是一个不错的选择。如果我们谈论更多,特别是如果没有限制,它就不会那么好用,您将需要进行实际的查询。

关于java - 使用对象化的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648054/

相关文章:

python - Google Sheet API 4 - 我们可以访问 Google Drive 中 App Engine 应用程序创建的文件吗?

java - 使用 Cloud Endpoints 在一次调用中保存引用的对象(通过 Ref)

java - SQL查询显示在窗口上

java - 转换数组列表

java - 联合身份验证 - openid 注销

google-app-engine - GAE - 很多/_ah/1 秒内启动热身

java - Google App Engine 投影查询返回 0 个结果

java - 关于 objectify 事务排队任务的问题

java - 无法使用 Scanner Java 读取斜杠 (/)

java - 使用两个不同 while 循环中的变量