c# - 在 session 中缓存数据集以按需获取

标签 c# performance wcf delphi rest

我正在考虑使用WCF或mormot作为RESTful服务的框架,其中需要访问的业务/遗留代码是用Delphi编写的。性能是项目的前提。 应用程序必须为负载平衡做好准备。 REST服务桌面的客户端是Windows应用程序。这些桌面客户端允许用户查看大量数据,以及 SQL 语句中的巨大结果集。实现缓存记录集并通过 REST 服务缓慢消耗它的服务的最佳方式是什么?可以示范一个很好的例子吗?记录集必须缓存在 session 中,直到客户端完成咨询或决定进行完整提取。我正在寻找合适的架构?

启用负载平衡在 WCF 中有效吗?由于记录集缓存在单个服务器上,因此行获取请求(如果有)必须落在同一服务器上。

最佳答案

WCF 和 mORMot 共享相同的高性能内核模式 http.sys 服务器。两者都具有 IOCP 和多线程功能。

对于性能,mORMot will be lighter ,将分配(少得多)的内存,不会受到垃圾收集器卡住的影响,并且能够直接从数据库引擎获取 JSON 内容(绕过大多数临时数据转换和分配) - 这样您 can achieve amazing speed 。简而言之,mORMot 的设计目的是为了从头开始提供 REST/JSON 内容的性能 - 使用多线程内核(而例如 node.js 是单线程的)。如果您的目的还在于缓存一些数据,mORMot 作为 64 位 native 服务可以很好地工作,可以在需要时访问所有系统 RAM,并且内置 real-time content compression .

WCF 是一个出色的通用通信库,它可以是 RESTful,但从其(历史)根源来看并不是 RESTful。我看到的 WCF 的主要问题是在应用程序之间配置它很困难(.exe.config 调整可能会令人困惑),而且它是一个大黑匣子。例如,不可能实现 Cross-origin resource sharing当服务器作为 Windows 服务托管时使用 WCF(Access-Control-Allow-Origin: HTTP header 被 WCF 删除!):您必须将其托管在 IIS 中 - 并且无法修复问题,而使用完整的开源解决方案,您可以解决任何问题。

可以使用相同的算法在mORMot和WCF中实现负载平衡。在您的情况下,无需使用循环算法,基于内容的简单路由可能就足够了。

使用 WCF 来服务用 Delphi 编写的业务逻辑会很慢、容易出错并且难以维护。混合技术会带来不必要的复杂性。我不会朝这个方向发展。

如果您有现有的 Delphi 代码库和一些 Delphi 技能,我想mORMot可能是更好的选择。它was reported例如生产中的单个服务器每天能够处理超过一百万个请求,为数千个并发客户端提供服务,dedicated JavaScript process在服务器端。 mORMot 设计目标之一是 help working with existing code and legacy projects 。但我并不是 100% 公平,因为我是这个开源项目的主要维护者。 :)

关于c# - 在 session 中缓存数据集以按需获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23199982/

相关文章:

c# - 简单快速的异步二进制 TCP 套接字服务器?

c++ - 在 C++ 中拥有大型抽象类是好是坏?

c# - WCF 更新服务引用不再为数据协定生成类型

c# - 监视 ADO.NET 连接打开时间

wcf - 如何在 ASP.Net MVC 应用程序中访问 WCF 服务?

c# - 使用 c#.net 解析 HTML

c# - 为现有类创建接口(interface)?

c# - asp.net mvc - 包含元关键字和描述等 SEO 信息的策略

c++ - 分配函数值和不分配给变量之间的速度差异

performance - 多个 OnEdit 函数的最佳实践