基本上我想知道我是否需要使用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的结果创建的,所以基本上上面的模型将转换为以下报告:
如果这是一个普通的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中我不确定这是否可行?
答案 0 :(得分:0)
尝试在使用数据存储区时忘记连接和规范化数据结构。您可能需要考虑使用实体组; request_ledger作为父级,result_ledger作为子级。
您应该考虑将一些数据从request_recipient移动/复制到request_ledger,但将request_recipient KEY保留在对象中 - 这在您需要检索整个request_recipient对象时很有用。