我正在创建一个应用程序,我需要在那里发布feed。现在我正在使用appenginestandard和cloudsql示例db-n1-standard-1,它基于 MySQL
但我注意到它很贵。应用程序正在生产模式下,在第一个月的价格远远高于我的预期。云sql中最昂贵的东西是示例小时率,所以,我决定将其迁移到数据存储上。
我有三个表,1-users2-posts3-comments,每个表大约有1000万行。帖子和评论表增长非常快,预计将有1亿行。
用户表
user_id name email phone
--------------------------------------------------
u123 Abc abc@m.com 123456
u124 Cde cde@m.com 789065
u786 Qwe qwe@m.com 754599
. . . .
. . . .
. . . .
posts表
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
为了这个。我可以很容易地在cloudsql中使用它,因为它是基于mysql的。
这三个表之间有关系,我知道cloudsql是关系数据库,而datastore不是。
我想把这些表转换成数据存储
1-创建实体为 Users
并将所有用户记录保存在那里2-创建实体为 Posts
并将所有post记录保存在那里3-创建实体为 Comments
并保存所有评论记录
post id总是我知道我需要为哪个post获取数据
例如,我需要关于id的post数据 p098
我在用java我决定创建两个 threads
第一个线程获取 post
数据来源 Posts
实体和第二个线程get comment
数据来源 Comments
实体。然后我使用java合并这两个数据集,生成与 JOIN
就像 MySQL
因为我认为数据存储是不允许的 JOINS
我需要一些建议。
这样做好吗?
在这种情况下,哪一种性能最好?
如果成千上万的用户(大量的用户)同时访问帖子和评论数据,哪一个能处理得更好?
在这种情况下,如果我从云sql迁移到数据存储,定价效果如何?
如果你的应用程序需要连续的数据库,那么sql示例就可以连续运行,这样成本就高了,不是吗?例如,在我的应用程序中,每个用户在打开应用程序时都需要显示帖子,如果有大量用户,那么我认为sql示例永远不会关闭。也就是说它一个月能跑730小时。
有什么建议吗?
1条答案
按热度按时间tvz2xvvm1#
我会把评论作为帖子的子实体。按祖先查询比其他查询更快。
我可能也有职位作为子实体的用户
所以你最终得到了这样一个结构:
| User, 123 | --> | Post, 456 | --> | Comment, 789 | (Grand Dad) (Dad) (Child)
编辑:蒂姆·霍夫曼是对的,评论应该是“user”的子项,而不是“user>post”。