Google数据存储区左侧连接等效

时间:2017-03-15 16:44:25

标签: google-cloud-datastore

基本上我想知道我是否需要使用rdbms而不是谷歌数据存储区

所以,我在gds中有以下3种

request_ledger
key | type   | content | sentTimestamp  
xyx   email    <ssd>     10-10-10 




request_recipient
key request_ledger                  to
1    key(request_ledger,xyz)    joe@bla.com
2    key(request_ledger,xyz)    john@bla.com



result_ledger 
key | request_ledger            | to          | deliveredTimestamp | bouncedTimestamp 
1     key(request_ledger,xyz)    joe@bla.com    10-10-11;

我尽可能使用不同的类型,以免我遇到更新/覆盖问题 - 我总是只保存新实体而不是进行任何更新。

request_ledger和request_recipient实体是同时创建的,但是result_ledger实体稍后是作为webhook的结果创建的,所以基本上上面的模型将转换为以下报告:

  • 发送电子邮件至joe @ bla于10-10-11发送
  • 发送电子邮件至john@bla.com尚待处理(即尚未收到已发送或退回的webhook活动)

如果这是一个普通的rdbms我可以使用左连接来允许我报告3个表并允许在result_ledger中没有相关匹配的空值

e.g。类似......

select a.type, a.content, a.sentTimestamp, b.to, c.deliveredTimestamp, c.bouncedTimestamp from request_ledger a left join request_recipient b on a.key=b.request_ledger left join result_ledger on b.request_ledger = c.request_ledger and b.to = c.to

这会给我一些像

的东西
a.type | a.content |a.sentTimestamp |b.to .      |c.deliveredTimestamp | c.bouncedTimestamp
email  <content>  10:10:10          joe@bla.com   10-10-11
email  <content>  10:10:10          john@bla.com  

但在Google Datastore中我不确定这是否可行?

1 个答案:

答案 0 :(得分:0)

尝试在使用数据存储区时忘记连接和规范化数据结构。您可能需要考虑使用实体组; request_ledger作为父级,result_ledger作为子级。

您应该考虑将一些数据从request_recipient移动/复制到request_ledger,但将request_recipient KEY保留在对象中 - 这在您需要检索整个request_recipient对象时很有用。