gpt4 book ai didi

typescript - 为自定义数据库解决方案创建 Microsoft Bot Framework 状态存储适配器的指南

转载 作者:行者123 更新时间:2023-12-05 01:36:01 25 4
gpt4 key购买 nike

在为将与 Microsoft Bot 框架一起正常工作的所述数据库创建自定义适配器时,我计划创建类似于 bot 框架中的 cosmosDBPartitionedStorage 类的东西。

据我所知,有 3 个读取、写入和删除操作是从 botbuilder 存储继承/实现的。

从数据库的角度来看,在创建这个适配器时是否需要考虑任何从阅读几层源代码中看不到的东西。比如initialization()。那是宇宙特有的,我应该如何解释我需要的解决方案?

我计划使用 2 个数据库,其中一个是 redis。我可以在 Azure redis 实例中测试它以进行本地开发,我认为这是一个很好的起点。简而言之,这最初是针对 redis 适配器的。

更新:我使用了仅 Redis 的集群解决方案,它很可靠。我无法实现并发检查,因为那必须是服务器端脚本,我将它们用于我的 CRUD 操作,这将更多地参与 v2 更新。

@mrichardson 在下面的答案中提供的帮助对于创建自己的数据存储非常宝贵。我也能够在我的 TypeScript 实现的单元测试中获得大部分重要的基础测试!除了并发测试。

在使用 Redis 时,我能够通过 RedisJson module 创建与 JSON 兼容的适配器。 .这是您必须通过 cmd 或 conf 文件配置安装的 Redis 模块。

我去的图书馆是IORedis from Luin学习曲线很陡峭,不一定是他的库,但与 Redis 与他的库所做的集成以及作为一个集群并使用 RedisJson 模块集成是一个很好的挑战!

由于使用 RedisJson 模块,我不得不使用 LUA 脚本 load EVALSHA对于回退到 EVAL 的每个 CRUD 操作如果脚本尚未加载或因任何原因丢失。它还会在失败时重新建立脚本。

我不确定将 EVALSHA LUA 脚本用于读写操作是否有很大的性能提升,但 Redis 文档似乎表明它确实如此。

A big advantage of scripting is that it is able to both read and write data with minimal latency, making operations like read, compute, write very fast (pipelining can't help in this scenario since the client needs the reply of the read command before it can call the write command).



然而更重要的是,我最初使用脚本的原因更多的是与 IORedis 客户端有关。它确实流水线,但由于没有对 RedisJson 命令的 native 支持,我不得不做一个自定义脚本(在 IORedis 中,它不允许流水线但为你做 evalhas 后备)或创建我自己的 EVALSHAEVAL后备方案。

似乎工作得非常棒!

该代码库用于 RedisCluster,一旦我完成了一些调整,我将通过 github 和 npm 将其发布为 typescript npm 包。

输入还采用 TTL 设置,这对于消息传递应用程序(例如 Microsoft bot 框架)来说是一个很好的安全性和性能抽象。

最佳答案

From what I see there are 3 operations of read, write, and delete that are inherited/implemented from botbuilder storage.



正确的。这就是你真正需要的。只要你能成功地做到这些,它就可以正常工作。

Is there anything from the database perspective that has to be considered in creating this adapter that isn't apparent from reading through a couple layers of source code. Such as initialization() for example. That is cosmos specific and how should I interpret that for the solution I need?



也正确。那是 Cosmos 特有的。基本上,它:
  • 如果数据库不存在则创建数据库
  • 将现有/创建的数据库存储为类的属性,以便以后检查数据库是否存在时,它只查找类属性而不需要发出 HTTP 请求
  • 在执行上述操作时锁定类以防止并发问题

  • 你会想要像 initialization() 这样的东西如果您想在尝试任何类型的读/写之前首先检查数据库是否存在,请使用该函数。拥有这样的东西来让你的机器人适应 future 可能是一个好习惯(如果你更改/添加数据库或其他东西),但不是必需的。

    this would be for a redis adapter initially.



    不幸的是,我们没有任何 Redis 存储适配器,但这里有一些额外的存储适配器,您可以在构建时查看:
  • BF SDK Node Azure Adapters (currently Azure Blob, Cosmos)
  • BF Node MemoryStorage (不要在生产中使用)
  • BF SDK C# Azure Adapters (currently Azure Blob, Cosmos)
  • BF C# MemoryStorage (不要在生产中使用)
  • Community Repo Node Adapters (currently Azure-Table, MongoDb, MS SQL)
  • Community Repo C# Adapters (currently Elasticsearch and EntityFramework)

  • 在编写您的测试时,如果您想确保它正常工作,我们有一组您可以使用的存储基础测试。您的适配器应该通过所有这些。
  • Node StorageBaseTests (currently a PR)
  • Node implementation example (currently a PR)
  • C# StorageBaseTests
  • C# implementation example
  • 关于typescript - 为自定义数据库解决方案创建 Microsoft Bot Framework 状态存储适配器的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59275552/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com