问题描述
我正在创建在线竞赛。平台上的所有成员都可以组成团队。所有团队评分均基于Big Query中已经存在的交易数据。该数据由某些同步作业填充。
有问题吗?我的Big Query交易数据每天更新一次。在成员和团队数据位于数据存储区的情况下,我必须运行一项工作才能从Big Query获取所有交易数据,然后更新数据存储区(传播)中的每个实体。
这感觉非常昂贵。我希望将我的团队和成员数据放入Big Query中。然后调用Getscore(),它将检索所有内容,而无需传播到DataStore。我可以这样做吗?我知道Big Query不应用作事务数据库,而BigQuery中只会出现成员创建/更新,团队创建/更新以及团队邀请和团队接受的情况。这样小的交易操作是否足以继续使用Big Query进行所有操作?
涉及的所有类型。团队和成员当前在数据存储区中,得分在BigQuery中:
type Member struct {
PhoneNum string `json:"phoneNum"`
Teams []string `json:"teams"`
Password string `json:"password"`
}
type Team struct {
TeamName string `json:"teamName"`
scoreId string `json:"scoreId"`
InviteCode string `json:"inviteCode"`
}
type score struct {
scoreId string `json:"scoreId"`
score1 float64 `json:"score1"` [these scores are calculated in the BigQuery]
score2 float64 `json:"score2"`
score3 float64 `json:"score3"`
}
如果我们在BigQuery中使用团队和成员,那么外键可以用于该“传播过程”
非常感谢您抽出宝贵的时间回答我的问题。
解决方法
将其作为社区Wiki答案发布,其一部分基于评论。
使用BigQuery并不是存储数据的最佳选择,因为将其用作应用程序的数据库,主要是因为考虑到需要尽快将数据加载到应用程序的前端这一事实,BigQuery速度可能不如您所需。因此,最好使用特定的数据库应用程序。
此外,您可能想看看数据库应用程序的另一种方法是本机模式下的Firestore。由于您的应用程序基本上可以处理文本和少量数据,因此Firestore可以用较小的文档进行组织,因此Firestore可以为您提供帮助。除此之外,尽管Datastore和Firestore都具有相同的免费配额-检查配额和价格here和here-它们的成本是不同的,并且一个对您来说可能更有意义。