从云SQL迁移到DataStore



我正在创建一个应用程序,在那里我需要制作Post Feeds。现在我使用的是App Engine Standard和Cloud SQL实例db-n1-Standard-1,它是基于MySQL的,但我注意到它非常昂贵。应用程序处于生产模式,第一个月的价格远高于我的预期。Cloud SQL中成本最高的是实例小时数,因此,我决定在数据存储上迁移它。

我有三个表,1-用户2-帖子3-论每个表都有大约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
.               .              .               .
.               .              .               .
.               .              .               .

帖子表

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。我可以很容易地在云SQL中使用它,因为它是基于MySQL的。

这三个表之间有关系,我知道Cloud SQL是关系数据库,但DataStore不是。

我脑海中有一个转换DataStore中这些表的想法

1-将实体创建为Users,并将所有用户记录保存在那里2-将实体创建为Posts,并将所有帖子记录保存在那里3-将实体创建为Comments,并将所有评论记录保存在中

帖子id总是我知道我需要为哪个帖子获取数据

例如,我需要发布关于idp098的数据,我正在使用Java我决定创建两个threads第一个线程从Posts实体获取post数据,第二个线程线程从CCD_ 15实体中获取CCD_。然后我用java将这两个数据集合并,生成与JOIN相同的结果,就像MySQL一样,因为我认为DataStore不允许JOINS

这里我需要一些建议。

  1. 这样做好吗
  2. 在这种情况下,哪种表现最好
  3. 如果成千上万的用户(大量用户)同时访问帖子和评论数据哪一个能处理得更好
  4. 如果我在这种情况下从云SQL迁移到DataStore,那么定价效果如何情况
  5. 如果您的应用程序需要连续数据库,则SQL实例运行连续数据库成本高,不是吗?例如在我的应用程序中,每个用户在打开应用程序时都需要显示帖子是大量的用户,那么我认为SQL实例永远不会关闭。哪一个意味着它在一个月内运行730小时
  6. 有什么建议吗

我会把Comments作为Posts的子实体。对于您的Join,按祖先查询比其他查询更快。

我可能也有帖子作为用户的子实体

所以你最终会得到这样的结构:

| User, 123 | --> | Post, 456 | --> | Comment, 789 | (Grand Dad) (Dad) (Child)

编辑:Tim Hoffman是对的,评论应该是"用户"的子代,而不是"用户>帖子"。

相关内容

  • 没有找到相关文章

最新更新