【问题标题】:Error: global queries do not support strong consistency错误:全局查询不支持强一致性
【发布时间】:2016-05-14 03:30:00
【问题描述】:

我插入一个实体:

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

那我想通过邮件查询用户:

var query = datastore.createQuery('Users').filter('email', 'bob@gmail.com');
    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;
        }

        });
});

但我得到了错误:

全局查询不支持强一致性

在文档中看到无法修改node的一致性,请问如何查询?

【问题讨论】:

    标签: node.js google-app-engine google-cloud-platform


    【解决方案1】:

    当您查询 Datastore 时,这些操作默认为 eventually consistent。这意味着您最近编写的结果可能不会显示在您的查询中。

    您可以通过添加 you can only perform strongly consistent queries. 来确保 Datastore 查询高度一致,这会将查询限制为单个实体组(Datastore 中的一致性单元)。

    当您在事务中运行时,you can only perform strongly consistent queries. 由于您在事务中运行但未指定祖先过滤器,您会收到此错误。

    【讨论】:

    • 如果我使用 gcloud-nodejs 怎么样。我如何指定我希望这些查询是强一致的?在文档中它说不能在 gcloud-node 中指定读取一致性。为什么是这样? gcloud 会支持这个吗?
    • 对不起,我现在有点糊涂了哈哈。这是我的场景:我有一个叫做“用户”的类型。这里的实体没有父母或孩子。我需要查询一些用户,如果发现他们,我需要“锁定”这些实体。然后我需要查询更多实体,但这次我需要查询名为friends 的KIND 中的实体(同样,这些实体都没有父母或孩子)。我知道需要更新 USER 实体,并且需要再插入几个朋友实体。这必须是原子的,全有或全无。使用 gcloud-node 可以吗?
    • 如果您没有父级,则无法在事务中查询。 read_consistency 选项只能用于降低一致性级别 - 如果您正在运行强一致性查询,您可以出于性能原因要求最终一致性,但反之则不行。
    • 如果您不想要父母,唯一的解决方法是将用户的键名设置为您要查询的名称。例如,如果用户 A 将用户 B 添加为好友,则在 txn 中您可以获取 A,获取 B(如果 B 不存在则失败并回滚),然后将 B 添加到用户 A 的好友列表中。您只需执行 get/lookup 即可找到 B 而不是查询。
    • 感谢您提供的信息和可能的解决方法。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多