【问题标题】:GAE Datastore entity for private messages用于私人消息的 GAE 数据存储实体
【发布时间】:2015-01-13 10:54:53
【问题描述】:

我想创建一个 Android 应用,用户只能通过向他们的朋友发送私人消息来进行交流。我正在为我的 GAE 应用程序使用 java。

更准确地说,如果用户 A 有三个朋友 B、C 和 D,我希望他能够选择其中两个(比如说 B 和 C)并启动一个 D 看不到的线程。在该线程中,A B 和 C 可以像在论坛中那样以异步方式交谈。

问题是:如何让我的实体以最有效的方式满足这些标准?

目前,我认为我需要两个实体:线程和消息。但是例如,当 A 将在数据存储中发送线程请求时,我不知道应该在哪里添加对 B 和 C 的引用。如果我将它作为用户列表添加到字段收件人中,我认为用户请求他被邀请的所有线程会太长。

我知道我想做的很经典,请问谁能帮帮我?

【问题讨论】:

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


    【解决方案1】:
    class User(ndb.Model):
      pass
    
    class Thread(ndb.Model):
      participants = ndb.KeyProperty(kind=User, repeated=True)
    
    class Message(ndb.Model):
      thread = ndb.KeyProperty(kind=Thread)
      user = ndb.KeyProperty(kind=User)
    
    # user's thread
    Thread.query(Thread.participants == user.key).fetch()
    
    # all thread messages
    Message.query(Message.thread == thread.key).fetch()
    

    【讨论】:

    • 对不起,我忘了说我正在使用 Java。我将编辑我的问题。
    • 好的,谢谢,但我不懂 Python。希望有人可以用 Java 转换您的代码。
    • 使用文档在 Java 中找到等效的 data modelsquery forms 一点也不难。随意使用可用于您正在使用的任何软件系统的文档,它肯定会帮助您理解,甚至让您成为自己问题的专家! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多