Google app engine 模型数据存储应用程序

Google app engine 模型数据存储应用程序,google-app-engine,google-cloud-datastore,gcloud-node,gcloud-java,Google App Engine,Google Cloud Datastore,Gcloud Node,Gcloud Java,我正在寻找如何创建一个有效的模型,以满足我在下面提出的要求。我曾尝试使用gcloud节点,但注意到它在读取一致性、引用等方面存在局限性。我更愿意编写这篇文章,但只要它能改进我的模型,我愿意用java或python编写。我正在围绕将于7月1日推出的新定价模式进行构建 我的应用程序由一个封闭的电子邮件系统组成。本质上,用户注册到该站点。这些用户可以交朋友。然后他们可以互相发送电子邮件 应用程序的组件: USER -email (id) //The email doesn't need to be t

我正在寻找如何创建一个有效的模型,以满足我在下面提出的要求。我曾尝试使用gcloud节点,但注意到它在读取一致性、引用等方面存在局限性。我更愿意编写这篇文章,但只要它能改进我的模型,我愿意用java或python编写。我正在围绕将于7月1日推出的新定价模式进行构建

我的应用程序由一个封闭的电子邮件系统组成。本质上,用户注册到该站点。这些用户可以交朋友。然后他们可以互相发送电子邮件

应用程序的组件:

USER
-email (id) //The email doesn't need to be the id, but I need to be able to retrieve users by their email
-hash_password
-name
-account_status
-created_date

FRIEND
-id (auto-generated)
-friend1
-friend2
-status

EMAIL
-id (auto-generated)
-from
-to
-mutual_id
-message
-created_date
-has_seen
用户-可以加入的用户数量不限

朋友-一个用户可以有200个已确认的朋友和100个待定的朋友请求。当检索到好友列表时,它应该显示好友的姓名。(我还需要收到朋友的id,以便在客户端使用它创建电子邮件)

电子邮件-用户可以向朋友发送电子邮件,也可以接收朋友的电子邮件。然后,用户可以独立查看其发送的所有电子邮件(sentbox)和接收的所有电子邮件(inbox)。 他们还可以查看自己和朋友之间通过最新订单发送的电子邮件。电子邮件应显示发件人和收件人的姓名。一旦电子邮件被读取,它就需要被标记为已读

我的模型看起来像这样,但正如你所看到的,它们效率低下

数据存储类型:

USER
-email (id) //The email doesn't need to be the id, but I need to be able to retrieve users by their email
-hash_password
-name
-account_status
-created_date

FRIEND
-id (auto-generated)
-friend1
-friend2
-status

EMAIL
-id (auto-generated)
-from
-to
-mutual_id
-message
-created_date
-has_seen
申请程序:

USER
-email (id) //The email doesn't need to be the id, but I need to be able to retrieve users by their email
-hash_password
-name
-account_status
-created_date

FRIEND
-id (auto-generated)
-friend1
-friend2
-status

EMAIL
-id (auto-generated)
-from
-to
-mutual_id
-message
-created_date
-has_seen
注册-获取操作以查看是否存在使用此电子邮件的用户。如果不插入密钥

登录-获取基于电子邮件获取用户的操作。如果存在,则从实体检索哈希_密码,并与用户的输入进行比较

发送好友请求-将为每个关系写入两次好友数据。然后使用friend1上的索引和status上的索引,我将查询一个用户的所有朋友,并仅过滤那些“待定”的朋友。然后我会数一数这些朋友,看看他们是否超过X。同样,我会为其他用户这样做。如果它们都未超过待定限制,我将插入好友请求。这需要在事务中运行

接受好友请求-将为每个关系写入两次好友数据。然后使用friend1上的索引和status上的索引,我将查询一个用户的所有朋友,并仅过滤那些挂起的朋友。然后我会数一数这些朋友,看看他们是否超过X。同样,我会为其他用户这样做。如果两个实体都未超过待定限额,我会将这两个实体的状态更改为“已接受为交易”

显示已确认的好友-将为每个关系写入两次好友数据。然后使用friend1上的索引和status上的索引,我将查询一个用户的所有朋友,并只过滤那些被接受的朋友。不确定我将如何显示朋友的姓名(例如,如果用户更改了他们的姓名会发生什么情况,这需要反映在所有朋友关系和电子邮件中!)

显示待处理的好友-每个关系的好友数据将写入两次。然后使用friend1上的索引和status上的索引,我将查询一个用户的所有朋友,并仅过滤那些挂起的朋友。不确定我将如何显示朋友的姓名(例如,如果用户更改了他们的姓名会发生什么情况,这需要反映在所有朋友关系和电子邮件中!)

查看已发送电子邮件-使用from属性上的索引,我将查询以按创建日期(最新优先)排序的时间从用户5获取所有已发送电子邮件。(例如,如果用户更改了自己的姓名会发生什么情况?这需要反映在所有朋友关系和电子邮件中!)

查看收到的电子邮件-使用“收件人”属性上的索引,我将查询以按创建日期(最新优先)排序的时间将所有收到的电子邮件发送给用户5。当看到一封电子邮件时,它将更新实体已看到的属性为true。(例如,如果用户更改了自己的姓名会发生什么情况?这需要反映在所有朋友关系和电子邮件中!)

查看两个用户之间的电子邮件-使用基于[lower_Lexicalographic_email]:[higher_Lexicalographic_email]的互惠id索引来查询互惠电子邮件。最新订购,每次5台。(例如,如果用户更改了自己的姓名会发生什么情况?这需要反映在所有朋友关系和电子邮件中!)


创建电子邮件-使用friend1和状态索引,我将确认用户是朋友。如果他们是朋友,我将插入一封电子邮件。

您可能想更具体地回答您的问题。我建议您提出一两个数据模型,询问它们的相对可行性和效率,甚至询问数据建模决策所依赖的特定数据存储特性。我确实提供了一个数据模型。这三种类型及其所有属性和它们之间的关系描述您可以使用这样的入门模板,然后应用您的业务逻辑。这个问题太广泛、太大,没有任何具体要求。我认为你需要发布所有这些来验证Arquit体系结构,但是s.o.不是合适的地方。