deepstream 不会立即更新 rethinkdb 文档
deepstream does not update rethinkdb document immediately
我想在 record.set(...) 调用和数据库中的文档更新之间存在延迟。请注意,该文档最终会在数据库中更新,但不会立即发生。我有涵盖文档更新流程的验收测试,有时它会在检测到更新时通过,有时它会失败,因为它检查数据库时它还没有更改。即使测试失败,我也可以手动检查数据库并查看文档是否已更新。测试代码直接连接rethinkdb查看更新后的文档。我想知道 deepstream 是否真的有记录更新延迟以及我如何调整它。请注意,我没有在测试环境中为 deepstream 启用像 redis 这样的缓存。要更好地理解案例,请查看下面的代码片段。
假设我有一个 rpc 端点,例如:
ds.rpc.provide('update-document', function (data, response) {
var record = ds.record.getRecord(`document/${data.id}`);
record.whenReady(function () {
user.set('field','value');
response.send({ status: 'UPDATED' });
})
});
测试代码如下:
var document = {...}; // document properly created and saved in DB here
client.rpc.make('update-document', document, function (error, result) {
// we hit successfully, so the call ended well
assert.equal(result.status, 'UPDATED');
rethinkDBService.get(`document/${document.id}`).then(function (documents) {
assert.equal(documents.length, 1);
var updatedDocument = documents[0]._d;
// problem here: sometimes it has "field" property with 'value'
// sometimes it doesn't
assert.equal(updatedDocument.field, 'value');
done();
})
.catch(console.log)
})
rethinkDBService 只是我对 rethinkdb 库的包装器,它只是为了测试目的直接获取或插入数据到数据库。
在数据库上设置的记录没有强制延迟,但是在通知其他客户端它已更新之前不需要写入数据库,只需要写入缓存。这有助于保持消息延迟非常低。
您可以看到执行此操作的行 here。
设置记录然后直接从数据库中查询它似乎是一个很奇怪的组合,你能告诉我更多关于你的用例吗?
我想在 record.set(...) 调用和数据库中的文档更新之间存在延迟。请注意,该文档最终会在数据库中更新,但不会立即发生。我有涵盖文档更新流程的验收测试,有时它会在检测到更新时通过,有时它会失败,因为它检查数据库时它还没有更改。即使测试失败,我也可以手动检查数据库并查看文档是否已更新。测试代码直接连接rethinkdb查看更新后的文档。我想知道 deepstream 是否真的有记录更新延迟以及我如何调整它。请注意,我没有在测试环境中为 deepstream 启用像 redis 这样的缓存。要更好地理解案例,请查看下面的代码片段。
假设我有一个 rpc 端点,例如:
ds.rpc.provide('update-document', function (data, response) {
var record = ds.record.getRecord(`document/${data.id}`);
record.whenReady(function () {
user.set('field','value');
response.send({ status: 'UPDATED' });
})
});
测试代码如下:
var document = {...}; // document properly created and saved in DB here
client.rpc.make('update-document', document, function (error, result) {
// we hit successfully, so the call ended well
assert.equal(result.status, 'UPDATED');
rethinkDBService.get(`document/${document.id}`).then(function (documents) {
assert.equal(documents.length, 1);
var updatedDocument = documents[0]._d;
// problem here: sometimes it has "field" property with 'value'
// sometimes it doesn't
assert.equal(updatedDocument.field, 'value');
done();
})
.catch(console.log)
})
rethinkDBService 只是我对 rethinkdb 库的包装器,它只是为了测试目的直接获取或插入数据到数据库。
在数据库上设置的记录没有强制延迟,但是在通知其他客户端它已更新之前不需要写入数据库,只需要写入缓存。这有助于保持消息延迟非常低。
您可以看到执行此操作的行 here。
设置记录然后直接从数据库中查询它似乎是一个很奇怪的组合,你能告诉我更多关于你的用例吗?