在为上述DB创建一个与Microsoft框架正确工作的自定义适配器时,我计划在Bot框架中创建类似于cosmosDBPartitionedStorage类的东西。
据我所见,有3种从僵尸构建器存储中继承/实现的读、写和删除操作。
在创建这个适配器时,从数据库的角度来看,是否有什么东西在读取几层源代码时并不明显。例如,初始化()。这是特定于宇宙的,我应该如何解释我所需要的解决方案?
我计划使用两个数据库,其中一个是红色的。我可以在Azure redis实例中测试我的本地开发,我认为这是一个很好的起点。所以简单地说,这最初是针对redis适配器的。
更新:我使用了一个只有Redis的集群解决方案,而且它是可靠的。我无法实现并发性检查,因为这必须是一个服务器端脚本,我正在将其用于CRUD操作,这将更多地涉及到v2更新。
@mrichardson在下面的回答中给出的帮助对于创建您自己的数据存储是非常宝贵的。我也能够在我的TypeScript实现的单元测试中获得大部分重要的基本测试!除了并发性测试。
在使用Redis时,我能够通过RedisJson模块创建一个与JSON兼容的适配器。这是一个Redis模块,您必须通过cmd或conf文件配置来安装。
我使用的库是来自卢的IORedis,学习曲线很陡峭,不一定是他的库,但是与Redis与他的库以及作为一个集群以及使用RedisJson模块集成所做的集成是一个不错的挑战!
由于使用了RedisJson模块,如果没有加载脚本或由于任何原因没有加载脚本,则对于返回到EVAL的每个CRUD操作,我都必须使用LUA脚本load EVALSHA。它还在失败时重新建立脚本。
我不确定使用EVALSHA脚本进行读写操作是否有很大的性能提高,但Redis文档似乎表明了这一点。
脚本的一个很大的优点是它能够以最小的延迟来读取和写入数据,使诸如读、计算、写这样的操作变得非常快(在这种情况下,流水线无法帮助,因为客户端在调用写命令之前需要read命令的答复)。
然而,更重要的是,我最初使用脚本的原因更多地与IORedis客户端有关。它执行流水线操作,但是由于不支持RedisJson命令,所以我不得不执行一个自定义脚本(在IORedis中,它不允许流水线,但会为您做回退),或者创建我自己的EVALSHA到EVAL回退场景。
看起来很棒!
代码库是一个RedisCluster,一旦我完成了对它的一些调整,我将通过github和npm将其作为一个类型记录npm包发布。
输入还采用TTL设置,这对于消息传递应用程序(如Microsoft框架)来说是一个很好的安全性和性能抽象。
发布于 2019-12-11 18:00:47
据我所见,有3种从僵尸构建器存储中继承/实现的读、写和删除操作。
对,是这样。这就是你真正需要的。只要你能成功地做到这些,它就会运转得很好。
在创建这个适配器时,从数据库的角度来看,是否有什么东西在读取几层源代码时并不明显。例如,初始化()。这是特定于宇宙的,我应该如何解释我所需要的解决方案?
同样正确。这是宇宙特有的。基本上,它:
如果您想在尝试任何类型的读/写之前先检查数据库是否存在,您可能需要类似于initialization()函数的内容。这可能是很好的实践,有这样的东西来证明你的机器人(如果你改变/添加数据库或其他东西),但不是必需的。
这最初是针对redis适配器的。
不幸的是,我们没有任何Redis存储适配器,但是在构建您的存储适配器时,可以查看以下一些额外的存储适配器:
当你写你的,如果你想确保它工作适当,我们有一组存储基测试,你可以使用。您的适配器应该传递所有它们。
https://stackoverflow.com/questions/59275552
复制相似问题