【问题标题】:Cache Dataset in session to fetch on demand在会话中缓存数据集以按需获取
【发布时间】:2014-04-21 15:02:51
【问题描述】:

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

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

【问题讨论】:

  • 您的结果集内容如何?一些巨大的二进制 blob 和许多简单的值行?您想使用什么数据库引擎?

标签: c# performance wcf delphi rest


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多