我正在创建需要制作Post Feeds的App。现在我使用基于MySQL
的App Engine Standard和Cloud SQL实例 db-n1-standard-1 但我注意到它非常昂贵。应用程序处于生产模式,第一个月的价格远高于我的预期。 Cloud SQL中最昂贵的事情是实例小时率因此,我决定在数据存储上迁移它。
我有三个表, 1 - 用户 2 - 帖子 3 - 评论并且每个表都有关于 10百万行的回合。 帖子和评论表是 预计将以非常快的速度增长100万行。
用户表
user_id name email phone
--------------------------------------------------
u123 Abc abc@m.com 123456
u124 Cde cde@m.com 789065
u786 Qwe qwe@m.com 754599
. . . .
. . . .
. . . .
帖子表
post_id user_id type src date
------------------------------------------------------------------------
p098 u123 img path/to/file 13-3-17
p456 u123 vid path/to/file 14-3-17
p239 u124 img path/to/file 15-3-17
. . . . .
. . . . .
. . . . .
评论表
cmnt_id post_id user_id comment
--------------------------------------------------------
m392 p098 u123 Some Text
m234 p098 u786 Some Text
m324 p456 u123 Some Text
. . . .
. . . .
. . . .
正如您所看到的,User
可以发布一个或多个 posts
而单post
一个或多个 comments
我需要获取帖子数据以及发表评论我知道我需要使用
JOIN
为此。我可以在Cloud SQL中轻松使用它,因为它基于MySQL。
这三个表之间有关系,我知道Cloud SQL是关系数据库,但DataStore不是。
我有意在DataStore中转换这些表
1-创建实体Users
并保存所有用户记录
2-创建实体Posts
并保存所有帖子记录
3 - 将实体创建为Comments
并保存所有注释记录
我始终知道帖子ID是否需要获取数据
例如,我需要发布有关身份p098
的数据我使用 Java 我决定创建两个threads
第一个线程获取post
数据来自Posts
实体和第二
线程从comment
实体获取Comments
数据。然后我通过使用java合并这两个数据集来生成与JOIN
相同的结果,如同MySQL
因为我认为DataStore不允许JOINS
我需要一些建议。
答案 0 :(得分:0)
我会将评论作为帖子的子实体。祖先的查询比你的其他查询要快。
我也可能将帖子作为用户的子实体
所以你最终得到的结构如下:
| User, 123 | --> | Post, 456 | --> | Comment, 789 |
(Grand Dad) (Dad) (Child)