1

我猜在 record.set(...) 调用和数据库中更新文档之间存在延迟。请注意,该文档最终在 DB 中更新,但不会立即发生。我有涵盖文档更新流程的验收测试,有时它会在检测到更新时通过,有时它会失败,因为它检查数据库的时间还没有更改。即使测试失败,我也可以手动检查数据库并查看文档是否已更新。测试代码使用直接连接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 库的包装,它只是出于测试目的而直接将数据获取或插入到数据库中。

4

1 回答 1

2

在数据库上设置的记录没有强制延迟,但是在通知其他客户端它已更新之前不需要写入数据库,只需写入缓存即可。这有助于保持消息延迟非常低。

您可以在此处看到执行此操作的行。

设置记录然后直接从数据库中查询它似乎是一个很奇怪的组合,你能告诉我更多关于你的用例吗?

于 2016-03-18T15:01:40.080 回答