2016-04-10 3 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.を追加することで、Datastoreクエリが強固に一貫していることを確認できます。you can only perform strongly consistent queries.は、クエリを単一のエンティティグループ(Datastoreの一貫性の単位)に制限します。

トランザクションで実行している場合you can only perform strongly consistent queries.トランザクションで実行していて、祖先フィルタを指定していないため、このエラーが発生します。

+0

私はgcloud-nodejsを使用していますか?どのようにしてこれらのクエリを強く一貫させたいのですか?ドキュメントでは、gcloud-nodeでRead consistencyを指定することはできません。どうしてこれなの?これをgcloudでサポートしますか? – user2924127

+0

申し訳ありません私はちょっと混乱しています。これは私の風景です。私は「ユーザー」というKINDを持っています。ここの主体には親や子供がいません。私はいくつかのユーザーを照会する必要があり、それらが見つかった場合、これらのエンティティを「ロック」する必要があります。次に、より多くのエンティティを照会する必要がありますが、今回は、友人というKINDのエンティティにクエリを行う必要があります(これには親や子がありません)。私はユーザーのエンティティを更新する必要があることを知っているので、もう少しFriend Entitiesを挿入する必要があります。これは、すべて、またはまったく原子的でなければなりません。 gcloud-nodeを使用することは可能ですか? – user2924127

+0

親がいない場合は、トランザクションで照会することはできません。 read_consistencyオプションは、整合性レベルを低下させるためにのみ使用できます。強固に一貫性のあるクエリを実行している場合は、パフォーマンス上の理由で最終的な一貫性を求めることができます。 –

関連する問題