java—从云sql迁移到数据存储

n8ghc7c1  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(370)

我正在创建一个应用程序,我需要在那里发布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小时。
有什么建议吗?

tvz2xvvm

tvz2xvvm1#

我会把评论作为帖子的子实体。按祖先查询比其他查询更快。
我可能也有职位作为子实体的用户
所以你最终得到了这样一个结构: | User, 123 | --> | Post, 456 | --> | Comment, 789 | (Grand Dad) (Dad) (Child) 编辑:蒂姆·霍夫曼是对的,评论应该是“user”的子项,而不是“user>post”。

相关问题