从Cloud SQL迁移到DataStore

时间:2017-10-31 17:19:53

标签: java google-app-engine google-cloud-datastore google-cloud-sql

我正在创建需要制作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

我需要一些建议。

  1. 这是一个好方法吗?
  2. 在这种情况下提供最佳性能?
  3. 如果成千上万的用户(大量用户)同时访问帖子和评论数据 哪一个可以更好地处理它?<​​/ li>
  4. 如果我从云端SQL迁移到DataStore,那么定价效果如何? 情况?
  5. 如果您的App需要连续数据库,则SQL实例连续运行 让它成本高,不是吗? 例如在我的应用中,每个用户在打开应用时都需要显示帖子 是大量的用户然后我认为SQL实例永远不会关机。哪一个 意味着它在一个月内运行 730小时
  6. 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我会将评论作为帖子的子实体。祖先的查询比你的其他查询要快。

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

所以你最终得到的结构如下:

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

编辑:Tim Hoffman是对的,评论应该是&#34; User&#34;而不是&#34;用户&gt;交&#34;