服务结构具有 100 万个键的可靠字典性能

2023-12-20

我正在使用包含约 100 万个键的可靠字典来评估 Service Fabric 的性能。我得到的结果相当令人失望,所以我想检查我的代码或我的期望是否错误。

我有一本初始化的字典dict = await _stateManager.GetOrAddAsync<IReliableDictionary2<string, string>>("test_"+id);

id每次测试运行都是唯一的。

我用一个字符串列表填充它,比如 “1-1-1-1-1-1-1-1-1”, “1-1-1-1-1-1-1-1-2”, “1-1-1-1-1-1-1-1-3”......多达 576,000 项。字典中的值没有被使用,我目前只使用“1”。

将所有项目添加到词典中大约需要 3 分钟。我必须一次将交易拆分为100,000,否则它似乎永远挂起(在需要之前,交易中的操作数量是否有限制)CommitAsync()?)

//take100_000 is the next 100_000 in the original list of 576,000
using (var tx = _stateManager.CreateTransaction())
{
    foreach (var tick in take100_000) {
        await dict.AddAsync(tx, tick, "1");
    }
    await tx.CommitAsync();
}

之后,我需要遍历字典来访问每个项目:

using (var tx = _stateManager.CreateTransaction())
{

    var enumerator = (await dict.CreateEnumerableAsync(tx)).GetAsyncEnumerator();

    try
    {
        while (await enumerator.MoveNextAsync(ct))
        {
            var tick = enumerator.Current.Key;                
            //do something with tick                    
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

这需要 16 秒。

我不太关心写入时间,我知道它必须被复制和持久化。但为什么要花这么长时间来阅读呢? 576,000 个 17 个字符的字符串键在内存中不应超过 11.5mb,并且值只是单个字符并被忽略。 Reliable Collections 不是缓存在 RAM 中吗?迭代相同值的常规字典需要 13 毫秒。

然后我打电话ContainsKeyAsync空字典上 576,000 次(在 1 个事务中)。这花了 112 秒。在任何其他数据结构上尝试此操作可能需要大约 0 毫秒。

这是在本地 1 节点集群上。当部署到 Azure 时,我得到了类似的结果。

这些结果可信吗?我应该检查任何配置吗?我是否做错了什么,或者我的期望非常不准确?如果是这样,是否有更适合这些要求的东西? (约 100 万个小键,无值,持续事务更新)


好吧,就其价值而言:

  • 并非所有内容都存储在内存中。为了支持大型可靠集合,某些值会被缓存,其中一些值会驻留在磁盘上,这可能会在检索您请求的数据时导致额外的 I/O。我听说有传言说在某个时候我们可能有机会调整缓存策略,但我认为它还没有实施。

  • 你一条一条的迭代读取数据记录。恕我直言,如果您尝试对任何数据源发出 50 万个单独的顺序查询,结果不会太乐观。我并不是说每个 MoveNext() 都会导致单独的 I/O 操作,但我想说的是,总的来说,它看起来不像是一次单独的提取。

  • 这取决于你拥有的资源。例如,尝试使用单个分区和三个副本在我的本地计算机上重现您的案例,我平均在 5 秒内获得记录。

考虑解决方法时,想到的是:

  • Chunking我尝试做同样的事情,将记录拆分为以 10 个元素为上限的字符串数组(IReliableDictionary)。所以本质上是相同数量的数据,但时间范围从 5 秒减少到 7 毫秒。我想如果您将项目保持在 80KB 以下,从而减少往返次数并保持 LOH 小,您应该会看到性能得到改善。

  • 过滤 创建枚举异步 https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.data.collections.ireliabledictionary-2.createenumerableasync?view=azure-dotnet#Microsoft_ServiceFabric_Data_Collections_IReliableDictionary_2_CreateEnumerableAsync_Microsoft_ServiceFabric_Data_ITransaction_System_Func__0_System_Boolean__Microsoft_ServiceFabric_Data_Collections_EnumerationMode_有一个重载,允许您指定委托以避免从磁盘中检索与过滤器不匹配的键的值。

  • 状态串行器如果您超越简单的字符串,您可以开发自己的字符串串行器 https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.data.ireliablestatemanager.tryaddstateserializer?view=azure-dotnet#Microsoft_ServiceFabric_Data_IReliableStateManager_TryAddStateSerializer__1_Microsoft_ServiceFabric_Data_IStateSerializer___0__并尝试减少针对您的类型产生的 I/O。

希望这是有道理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务结构具有 100 万个键的可靠字典性能 的相关文章

  • 在 Service Fabric 集群中存储大量状态

    我有一个场景 我们需要存储 x 100 GB 的数据 一般来说 数据是服务结构集群本身中参与者 良好分区 仅由特定参与者使用 持久状态的良好候选者 对于这种规模的数据 是否建议使用服务结构持久状态存储 我们的计算负载将相当低 因此仅仅为了存
  • 从 Service Fabric 集群中删除应用程序

    我尝试使用服务结构资源管理器从服务结构中删除应用程序 我使用 删除应用程序 操作删除了我的应用程序 然后 当我尝试取消配置应用程序类型时 我收到错误消息 错误 版本 1 0 0 的应用程序类型无法取消配置为 它仍然包含活动的应用程序 我可以
  • 将 Application Insight 添加到现有的 Azure Service Fabric 群集

    自过去 4 个月以来 我们一直在开发 Azure Service Fabric 但现在决定拥有一个统一的日志基础设施 我们正在使用 AppInsight 我们如何将 AppInsight 密钥添加到现有的 Service Fabric 集群
  • Service Fabric 微服务与 Azure 云服务/Web 应用程序集合的优势

    我有一个可以分解为多个通信服务的应用程序 我当前的实现是整体的 我想重新组织它 以便可以独立地部署 迭代和扩展各个组件 我发现使用 Azure 有两种方法可以实现此目的 Service Fabric 服务由一组通信微服务 无状态 Web A
  • 部署期间 Azure 中的 Service Fabric 错误

    将集群部署到 Azure 时遇到问题 一切都在本地运行 但是当部署到 Azure 时 我在尝试调用其中一项服务时收到错误 在 Azure 中 服务结构是6 1 480 9494 并且无法升级 但我的本地版本是6 2 262 94946天前发
  • 在开发人员计算机上自动创建没有 DefaultServices 的服务

    在最近的 Service Fabric 社区问答第 24 版中 有很多关于在 Service Fabric 中使用 DefaultService 构造的讨论 ApplicationManifest xml以及它的缺点 Microsoft 建
  • Service Fabric 服务远程处理

    过去几周我一直在从云服务迁移到 Service Fabric 并且在两个服务之间使用远程处理时遇到了一些障碍 我一直在使用服务远程处理的官方文档和示例代码 特别是我试图让此处概述的示例正常工作 https learn microsoft c
  • 命令行包 Service Fabric 应用程序

    直到最近 我们的持续交付设置都是使用以下命令交付 Service Fabric 包 msbuild SFApp sfproj t Package 这是必要的 因为目标Package在解决方案级别不可用 IE 命令 msbuild SFSol
  • Azure Service Fabric 有状态服务中的可靠字典对象自动过期

    是否有任何内置方法可以将可靠字典对象的过期时间设置为在特定时间后过期 尝试看看我们是否可以开始使用可靠的集合来存储用户会话对象 无状态服务可以访问有状态服务创建的字典对象吗 抱歉 如果这些都是蹩脚的问题 尝试理解这些概念 Thanks 不
  • 删除 Service Fabric 应用程序后进程仍继续运行

    当我删除服务结构应用程序时 我已经看到了这一点 应用程序内服务的旧进程仍然继续运行 应用程序中包含的服务有以下类型 Actors 无状态服务 ASP NET 核心 当我重新部署应用程序时 我注意到了这个问题 并且 ASP NET Core
  • FabricInvalidAddressException:尝试从 .NET Core 应用程序连接时出现 NamedEndpoint“V2Listener”

    我正在尝试使用以下方式连接到 Service Fabric 应用程序ServiceProxy像这样的类 return ServiceProxy Create
  • 由于缺少服务结构包,不会添加依赖项

    启动一个新的空 NET Core 2 类库 我尝试使用 nuget 添加任何依赖项 但出现此错误 错误本地源 C Program Files Microsoft SDKs Service Fabric packages 不存在 但服务结构应
  • 可靠集合缓存作为 Service Fabric 中的缓存

    我的系统使用一堆微服务来处理一个项目 我计划创建一个有状态微服务来保存该项目的最新状态 在该服务中 我计划将所有项目状态存储在可靠的字典中 并且每当访问项目时都会更新该项目的 上次访问 字段 我的要求是 我只想将最近使用的项目存储在可靠的集
  • Service Fabric 重启应用程序

    我有一个在启动时从 KeyVault 读取的服务结构应用程序 当我们更改 KeyVault 值时 我们必须重新启动节点才能读取新值 这会导致同一节点上的其他应用程序出现故障 我正在尝试编写一个 PowerShell 脚本来重新启动服务结构应
  • 如何设置 IHostingEnvironment.ContentRootPath?

    在我的 Azure Service Fabric Web API 项目中 我可以使用以下代码将 appsettings json 文件添加到我的配置中 Api cs class protected override IEnumerable
  • Service Fabric:找不到 EntryPoint Blah.exe

    我进行了一些项目重命名并更改了文件夹结构 现在我无法将服务结构应用程序部署到本地服务结构集群 Register ServiceFabricApplicationType 找不到 EntryPoint IdentityService exe
  • Service Fabric:删除了参与者,现在升级失败

    我正在尝试混合使用有状态和无状态参与者来升级 Service Fabric 应用程序 我做了一些重构 因此删除了一些我不再需要的演员 现在 当我尝试升级应用程序时 出现以下错误 在删除服务类型之前 必须显式删除服务 经过一番思考后 我thi
  • 使用 WebListener 或 OWIN 作为 Azure Service Fabric 的 API 网关

    我们在服务结构中有 4 个无状态服务微服务 它们使用 Kestrel 作为服务器 我们需要向前端公开这 4 个服务 并且对使用 WebListener 还是 OWIN 作为服务器有疑问 任何人都可以告诉谁对性能更好 我们还有用于处理令牌的身
  • Service Fabric 在启动时生成 actor

    有没有办法要求系统在启动时生成某些参与者 目前我激活了我需要的演员集Program cs演员注册后 这工作正常 但我偶尔会遇到ReminderLoadInProgressException因为正在激活的参与者需要注册提醒 但在它尝试这样做时
  • 在 Service Fabric 应用程序中动态创建服务

    这有点描述性 所以请耐心等待 在我尝试构建的应用程序中 产品具有独特的功能 用户可以选择选择功能 A B D 但不能选择 C 我构建此功能的方式是 每个不同的功能都是一个服务 无状态 我正在考虑将数据存储在 Azure SQL 中 数据库并

随机推荐

  • 相机捕获图像后 Phonegap 应用程序退出。 [安卓]

    我在使用 Phonegap 1 4 1 时遇到错误 我创建的phonegap应用程序在拍照后返回到应用程序后重新启动 这是我正在使用的代码 function capturePhoto Take picture using device ca
  • Mailitem.PrintOut() 转 PDF

    我想将完整的电子邮件打印为 pdf 格式 标准打印机选择为 microsoft Print to PDF 运行打印输出方法 出现一个保存窗口 我不知道如何以编程方式处理它 我仍然知道通过单词对象进行转换的方法 但这不起作用 因为屏幕截图不会
  • 如何将使用docker创建的MySQL连接到另一个端口(不是端口3306)?

    我已经在我的电脑上安装了 mySql 所以端口 3306 已经很忙 这就是为什么我必须使用 3306 以外的端口的原因 我希望能够在不使用 docker 命令的情况下将我的机器连接到我的 docekr 实例 这样我就能够使用我的应用程序 S
  • Hibernate 覆盖 @transient

    我有一个映射的超类 它有一个我的数据库中的一些表共享的字段 我希望用 Transient 注释这个字段 这样大多数实体都会忽略它 但在子实体上 de Transient 或 un Transient 这可能吗 谢谢你 伊多布 您也许可以使用
  • 用于特定运行配置的 IntelliJ 键盘快捷键

    我有一个 JUnit 运行配置来运行所有单元测试 如何将键盘快捷键绑定到 JUnit 配置的运行 现在有一个第三方插件 将配置作为操作运行 https plugins jetbrains com plugin 9448 run config
  • 通过http协议上传位图到服务器

    我有一个相机活动 之后我拍照并将其保存到图库并上传到服务器我的上传代码不起作用 我需要这方面的帮助吗 图像捕捉 Intent intent new Intent android media action IMAGE CAPTURE star
  • 在日期时间数据类型中插入 NOW() 值将返回 0000-00-00 00:00:00

    我有一个数据库 它有一个完美运行的 NOW 函数 显示正确的日期 并且在不小心删除了它之后 我创建了一个类似的数据库 但是当我插入 NOW 来插入时 current 当前日期 它将插入为 0000 00 00 00 00 00 显示的警告是
  • 如何从 n x 3 数据集绘制非凸曲面

    R中有没有直接绘制非凸曲面的方法 我对凸面使用了类似以下的东西 效果很好 xyz lt cbind y x z tbr lt t surf tri xyz delaunayn xyz rgl triangles xyz tbr 1 xyz
  • 如何将许多 php 变量传递给 python

    我使用以下代码启动 python 脚本并向其传递 php 变量 tmp exec python path to pythonfile py myVariable mySecondVariable output 这工作得很好 我的问题是我需要
  • Etsy API 图片上传错误

    我有一个 oauth 连接 它可以很好地处理所有其他请求 但有一个 上传列表图像 这是代码 connection this gt getEtsyConnection imageApiUrl https openapi etsy com v2
  • 在 R 中使用多个更改参数应用函数

    我想对引用 R 数据框中的多列的所有行应用一个函数 例如 如果我有一个名为 data 的数据框 其中包含三个变量 var1 var2 和 var3 并且我想对每一行应用一个函数 myfunc lt function var1 var2 va
  • 获取音频文件大小而不导出

    我正在开发一个应用程序 用于导出存储在 iPod 库中的音频文件 但我应该在导出和上传之前验证文件大小 服务器有固定的最大上传大小 我知道导出文件后 大小不会相同 有什么方法可以估计新大小 主要问题 我可以在导出之前知道原始文件大小 使用
  • Python:为什么需要 functools.partial?

    部分应用很酷 有什么功能functools partial https docs python org 3 library functools html functools partial提供你无法通过 lambdas 的报价 gt gt
  • 使用 ColdFusion 的 reCaptcha v3

    我正在尝试将 reCaptcha v3 集成到 ColdFusion 站点 我对 CF 语法不太感兴趣 目前我似乎从服务器端的验证请求中没有得到任何返回 任何人都可以看到任何明显错误和 或请指出我正确的方向吗 客户端
  • 从firebase存储Xamarin获取图像下载url

    我试图从上传到 firebase 存储的照片中获取图像 url 以便我可以将图像的引用存储在另一个表中 这将使我能够在整个应用程序的其他位置显示图像 我目前有 private void UploadPhoto if filePAth nul
  • 如何使用 Python 从 Windows 7 中迭代连接的 iPhone 上的照片?

    当我将 iPhone 连接到 Windows 7 系统时 Windows 资源管理器会打开 DCIM 内容的虚拟文件夹 我可以通过 Pywin32 218 访问 shell 库接口 如下所述 我可以在 python 中使用库抽象吗 http
  • 需要配置的打字稿

    我正在构建一个 Web 应用程序 其中的开发不是基于 TypeScript 构建的 但是该应用程序具有我想要使用插件样式进行的集成点 这就是使用 TypeScript 的地方 TypeScript 代码位于第二个解决方案中 我将 js 文件
  • git status 报告新克隆的存储库中修改的文件

    Solved 远程存储库似乎包含两个名称相同的文件 除了第一个字母之外 这导致我的系统上的文件被覆盖 从而导致以下问题 Update 看起来它与换行符无关 但我还找不到解释 事情是这样的 git status报告FileStartingWi
  • 获取在 Windows 上构建轮错误 Pygame 的要求

    我正在尝试使用以下命令安装 Pygame pip install pygame我得到这个结果 pip 安装 pygame 收集pygame 使用缓存的 pygame 2 4 0 tar gz 13 2 MB 安装构建依赖项 完成 获取构建轮
  • 服务结构具有 100 万个键的可靠字典性能

    我正在使用包含约 100 万个键的可靠字典来评估 Service Fabric 的性能 我得到的结果相当令人失望 所以我想检查我的代码或我的期望是否错误 我有一本初始化的字典dict await stateManager GetOrAddA