azure服务结构可靠字典linq查询非常慢

2024-01-11

我在服务结构有状态服务中有一本可靠的字典。我有一个简单的 linq 表达式。
我正在使用 Ix-Async 包来构建异步枚举。


using (ITransaction tx = this.StateManager.CreateTransaction())  
        {  

          var result = (await customers.CreateLinqAsyncEnumerable(tx))
                .Where(x => x.Value.NameFirst != null && x.Value.NameFirst.EndsWith(n, StringComparison.InvariantCultureIgnoreCase))
                    .Select(y => y.Value);

           return await result.ToList();


        }  

数据分为 2 个分区,每个分区中约有 75,000 条记录。我使用 Int64 范围作为分区键。在上面的代码中,“Result.ToList()”为每个分区执行大约需要 1 分钟。另一个奇怪的事情是,实际结果是空的!在 sql server 中运行的相同 sql 返回客户名字以“c”结尾的行。但是,这不是重点。我最关心的是“ReliableDictionary”linq 查询的性能。
Regards


可靠字典定期从内存中删除最近最少使用的值。这是为了启用

  • 大型可靠词典
  • 更高的密度:每个副本的可靠集合密度更高,每个节点的副本密度更高。

代价是,这会增加读取延迟:需要磁盘 IO 来检索未缓存在内存中的值。

有几个选项可以降低枚举延迟。

1) 关键过滤枚举:您可以将要在查询中使用的字段移至 ReliableDictionary 的 TKey(上例中的 NameFirst)。这将允许您使用创建枚举异步 https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.data.collections.ireliabledictionary-2#Microsoft_ServiceFabric_Data_Collections_IReliableDictionary_2_CreateEnumerableAsync_Microsoft_ServiceFabric_Data_ITransaction_System_Func__0_System_Boolean__Microsoft_ServiceFabric_Data_Collections_EnumerationMode_接受关键过滤器的过载。键过滤器允许 Reliable Dictionary 避免从磁盘中检索与查询不匹配的键的值。这种方法的一个限制是 TKey(因此其中的字段)无法更新。

2) 使用通知的内存二级索引: 可靠的词典通知 https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-notifications可用于构建任意数量的二级索引。您可以构建一个二级索引,将所有值保留在内存中,从而交换内存资源以提供更低的读取延迟。此外,由于您可以完全控制二级索引,因此您可以保持二级索引有序(例如,通过示例中的 NameFirst 的反向)。

我们还考虑使 Reliable Dictionary 的内存中 TValue 扫描策略可配置。这样,如果读取延迟是您的首要任务,您将能够配置可靠字典以将所有值保留在内存中。

由于在您的场景中,枚举的大部分时间都花在磁盘 IO 上,因此您还可以从使用您的自定义序列化器 https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicefabric.data.ireliablestatemanager?redirectedfrom=MSDN#Microsoft_ServiceFabric_Data_IReliableStateManager_TryAddStateSerializer__1_Microsoft_ServiceFabric_Data_IStateSerializer___0__这可以减少磁盘和网络占用空间。

谢谢你的问题。

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

azure服务结构可靠字典linq查询非常慢 的相关文章

  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 我必须做什么才能使通过 HTTPS 提供的图像等内容缓存在客户端?

    我使用 Tomcat 作为服务器 使用 Internet Explorer 6 作为浏览器 我们应用程序中的网页大约有 75 张图像 我们正在使用 SSL 加载所有内容似乎非常慢 如何配置 Tomcat 以便 IE 缓存图像 如果您通过 h
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 如何循环空手道响应数组并将其传递到另一个 Web 服务响应的 json 路径中

    我正在使用空手道版本 0 8 0 1 我想执行以下步骤来测试一些响应 我做了一个获取网络服务 1 使用 jsonpath 从 Web 服务 1 的响应中查找货币值 currencies 第 2 步给出了以下结果 USD HKD SGD IN
  • 当结果具有相同分数时在 Azure 搜索中进行分页

    我在电子商务网站上使用 Azure 搜索 现在在搜索页面上遇到分页问题 当我重新加载搜索页面时 我可以获得不同的产品顺序 因此 当我使用分页时 我可以在不同页面上看到相同的产品 这一点至关重要 我开始研究出了什么问题 我在 Microsof
  • 从 cakephp 的数组中删除数组键

    打印数组 array Order gt array id gt 1 base price gt 65 min price gt 95 检索数据时是否可以删除键 Order 如果不是 我如何使用 array shift 或以一行结束并防止出现
  • Haskell 中类型安全的“read”

    向你学习 Haskell http learnyouahaskell com making our own types and typeclasses讨论以下数据类型 data Day Monday Tuesday Wednesday Th
  • Python 等待队列和事件

    我有一个队列和一个事件 我想在事件设置为 True 时退出循环 但是循环中有一个queue get 它会阻塞 直到其中有东西为止 当设置 closeEvent 事件标志时 如何中止 self commandQueue get 的等待 注意
  • webapp2.Route 带有可选的前导部分

    我正在学习webapp2 http webapp improved appspot com 框架以其强大的Route http webapp improved appspot com api webapp2 html webapp2 Rou
  • 当方法名称是动态时,如何在 Ruby 中调用方法? [复制]

    这个问题在这里已经有答案了 video Video new thumb video thumbnail video thumbnail video video thumbnail works fine video thumbnail vid
  • Java 中处理循环事件的优雅方法?

    我认为这对我来说不是一个特定的问题 每个人以前可能都遇到过这个问题 为了正确地说明它 这里有一个简单的 UI 正如您所看到的 这两个旋转器控制着一个变量 A 唯一的区别是他们使用不同的视图来控制它 由于这两个旋钮的显示值是同步的 因此会出现
  • 信号处理程序不会看到全局变量

    问题是 这个程序应该接收来自 stdin 的输入并计算插入的字节数 SIGUSR1 信号将停止主程序 并在文件标准错误上打印当我发送 SIGUSR1 时已复制了多少字节 这就是我的老师希望我这样做的方式 在一个终端运行中 cat dev z
  • 为什么在使用 Javassist 更改方法体后必须调用 .toClass()?

    我修改getMessage 我的方法体TestClass由Javassist这样写 ClassPool cp new ClassPool true CtClass ctClass cp get my test javassist TestC
  • CSS:使 iframe 充满高度,没有滚动条

    我怎样才能在 iframe 上拥有完整的高度 这样如果超过指定的高度 我就没有滚动条height 500px 我只想让页面滚动条存在 而不是 iframe 滚动条 我知道你可以隐藏滚动条 但这样你就看不到 iframe 中的所有内容 你怎么
  • Sparklyr 与 S3 存储桶的连接抛出错误

    我正在尝试从 R Sparklyr 连接到 S3 存储桶 我能够将本地文件读取到 Spark 上下文中 然而尝试连接 s3 似乎是个问题 抛出一大堆错误 这是所使用的代码列表 注意 单个 s3 存储桶有多个 csv 文件 遵循相同的模式 l
  • 如何将 C 联合转换为 Delphi?

    typedef struct FILE OBJECTID INFORMATION LONGLONG FileReference UCHAR ObjectId 16 union struct UCHAR BirthVolumeId 16 UC
  • 如何在 Flutter 中使用 fl_chart 在折线图中水平滚动?

    我想用折线图显示列表中的数据 问题是宽度太小 所以我希望你可以水平滚动来查看所有内容 如何使用 fl chart 包执行此操作 这是我的代码 我从列表中构建点 override Widget build BuildContext conte
  • 使用php获取字符串中的第一个图像

    我正在尝试从我的每篇文章中获取第一张图片 如果我只有一张图像 下面的代码效果很好 但如果我有多个 它会给我一个图像 但并不总是第一个 我真的只想要第一张图片 很多时候第二张图片是下一个按钮 texthtml Who is Sara Bare
  • 根据 R 中的名称向量删除列

    我有一个data frame called DATA Using BASE R 我想知道如何删除中的任何变量DATA被命名为以下任意一个 ar c out Name mdif stder mpre 目前 我使用DATA names DATA
  • 如何自定义 jquery 自动完成以在 DIV 中显示

    我只是想知道 我以前使用过自动完成插件 但 jquery 网站上的示例似乎非常简单且有用 function var availableTags ActionScript AppleScript Asp BASIC C C Clojure C
  • CSS 参数“如果第一个孩子是”

    我需要一个用于 div 内部的 CSS 选择器 但我希望它仅选择该 div 内特定类的第一个元素 正如您的标题所暗示的 如果第一个孩子是 div gt test first child将选择任何的第一个孩子 div if它有类test 但如
  • 如何将事件记录到 ASP.NET Core Web API 中的事件查看器?

    我正在尝试登录到托管在 Windows Server 2016 Standard 上的 ASP NET Core 2 1 Web API 中的事件查看器 我的控制器中有这个 private readonly ILogger
  • azure服务结构可靠字典linq查询非常慢

    我在服务结构有状态服务中有一本可靠的字典 我有一个简单的 linq 表达式 我正在使用 Ix Async 包来构建异步枚举 using ITransaction tx this StateManager CreateTransaction