2017-03-15 40 views
0

基本上我想知道如果我可能需要使用一個RDBMS,而不是谷歌的數據存儲谷歌數據存儲左加入相當於

所以,我在GDS以下三種

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




request_recipient 
key request_ledger     to 
1 key(request_ledger,xyz) [email protected] 
2 key(request_ledger,xyz) [email protected] 



result_ledger 
key | request_ledger   | to   | deliveredTimestamp | bouncedTimestamp 
1  key(request_ledger,xyz) [email protected] 10-10-11; 

我使用單獨的種儘可能使我不會遇到更新/覆蓋問題 - 我總是隻保存新實體,而不是進行任何更新。

的request_ledger和request_recipient實體在同一時間被創建,但在result_ledger實體以後創建的網絡掛接的結果,所以基本上上面的模型將翻譯成以下報告:

  • 電子郵件喬@喇嘛在11年10月10日
  • 電子郵件被送到[email protected]仍懸而未決(即沒有交付或退回收到的網絡掛接事件還)

如果這是一個普通的RDBMS我可以使用左連接允許我可以通過3個表格進行報告,並且在result_ledger中沒有相關匹配的情況下允許空值。

例如,像..

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   [email protected] 10-10-11 
email <content> 10:10:10   [email protected] 

,但在谷歌數據存儲,我不知道這是可能的嗎?

回答

0

嘗試在使用Datastore時忘記連接和規範化的數據結構。您可能需要考慮使用實體組; request_ledger作爲父項,result_ledger作爲子項。

您應該考慮將一些數據從request_recipient移動/複製到request_ledger,但將request_recipient KEY保留在對象中 - 這對於需要檢索整個request_recipient對象時很有用。