2016-04-10 19 views
0

我插入一個實體:錯誤:全局查詢不支持強一致性

datastore.save({ 
    key: datastore.key(['Users', 'bob']), 
    method: 'insert', 
    data: [ 
     { 
      name: 'email', 
      value: '[email protected]', 
      excludeFromIndexes: false 
     } 
    ] 
}, function(err) { 
    if (!err) { 
     console.log('insert was a success'); 
    }else{ 
     console.log(err); 
    } 
}); 

然後我想查詢通過電子郵件用戶:

var query = datastore.createQuery('Users').filter('email', '[email protected]'); 
    datastore.runInTransaction(function(transaction, done) { 
     transaction.runQuery(query, function(err, entities) { 
      if (!err) {     
       //insert another thing into the datastore here ... 

     }else{ 
       console.log('err = ' + err); 
       transaction.rollback(done); 
       return; 
     } 

     }); 
}); 

但我得到的錯誤:

global queries do not support strong consistency

我看到我無法修改文檔中節點的一致性,所以如何查詢?

回答

1

當您針對數據存儲進行查詢時,這些操作默認爲eventually consistent。這意味着您最近編寫的結果可能不會顯示在您的查詢中。

您可以通過添加you can only perform strongly consistent queries.來確保數據存儲查詢的強一致性,該查詢將查詢限制爲單個實體組(數據存儲區中的一致性單位)。

當您在事務中運行時,you can only perform strongly consistent queries.由於您在事務中運行但未指定祖代過濾器,因此會出現此錯誤。

+0

如果我使用gcloud-nodejs,那該怎麼辦?我如何指定我希望這些查詢強烈一致?在文檔中,它表示讀取一致性不能在gcloud-node中指定。爲什麼是這樣?在gcloud中會有這種支持嗎? – user2924127

+0

對不起,我現在有點困惑哈哈。這是我的場景:我有一個叫'用戶'的類。這裏的實體沒有父母或孩子。我需要查詢一些用戶,如果他們發現我需要'鎖定'這些實體。然後我需要查詢更多的實體,但這次我需要查詢名爲朋友的實體(同樣,這些都沒有父母或孩子)。我知道需要更新用戶實體,我需要插入更多的朋友實體。這必須是原子的,全部或沒有。使用gcloud-node可能嗎? – user2924127

+0

如果您沒有父母,則無法在事務中進行查詢。 read_consistency選項只能用於降低一致性級別 - 如果您運行的是一致性強的查詢,則可以出於性能原因要求最終的一致性,但不能反其道而行之。 –