【问题标题】:In term of performance is mormot rest connection is better than Oracle direct connection? [closed]就性能而言,mormot rest 连接是否优于 Oracle 直接连接? [关闭]
【发布时间】:2019-04-22 13:36:10
【问题描述】:

我在一家公司工作,开发一个使用 Delphi 10 Seattle (VCL) 制作的大型应用程序,使用直接连接到 Oracle 数据库服务器(2 层)。

一位专家建议使用mormot(或其他库/组件)迁移到三层架构。

他的一个论点是新架构(3 层)将提供更高的性能(交换数据的时间),因为 https 比直接 oracle 连接更快,并且 json 对象更轻(其余部分不使用缓存策略) ) 然后我们就可以制作网络客户端了。

我没听懂:

  • 为什么 https 比 oracle 连接协议快? (如果是真的,为什么oracle不使用https和json作为交换数据的协议?)。
  • 如果我们让所有功能和查询都在客户端(即使我们会做 Web 客户端),这不是安全问题吗?

真诚的

【问题讨论】:

  • 三层将为您提供可扩展性、可移植性和冗余性。如果后端和中间层使用比客户端更快的硬件,性能可以超过 2 层...

标签: json rest delphi oracle11g mormot


【解决方案1】:

在任何 n 层框架的上下文中,通过 REST 解决方案进行远程 SOA 访问可能具有性能优势。

mORMot 文档试图介绍所有这些概念(SOA、REST、MVC、n-Tier、清洁架构、DDD...),然后只讨论性能影响。不要孤立地使用文档语句。考虑整体情况和用例。

为什么 https 比 oracle 连接协议快?

HTTPS 并不是“更快”在 se。意思是它可以更有效地进行远程连接,尤其是通过 Internet。

Oracle 连接协议设计为在本地网络上运行,而 HTTP 是一种查询/应答模型。

Oracle 协议的主要优点是它比简单的查询/应答模型更完整(复杂?):它可以与 Oracle 服务器对话以缓存语句和数据,它可以有实时通知,它可以准备二进制形式的数据,准备进行编码。

在性能方面,Oracle 协议的主要缺点是它需要更多的线路以外的往返:它被设计为在本地网络上工作,具有低延迟。通过 Internet 连接,速度会慢很多,并且出于安全原因,很可能会被封装到 VPN 中 - 进一步降低性能。

我们不应该以抽象的方式谈论“性能”。有几种方法可以给猫剥皮……如果您想要原始查询性能,请使用另一种数据库,例如 Redis。

但对于业务应用程序,主要的“性能”点可能更多地与扩展有关。在这里,Oracle 协议的数据库连接成本更高。维护连接,尤其是维护事务,可能非常苛刻。在典型的 Oracle 服务器上,您最多可以同时维护几十个/百分之一的数据库连接。而让一个 REST 服务器同时维护数千个客户端非常容易。即使您目前只期望少数客户,您如何想象您的未来?如今,所有严肃的应用程序都期望有一个类似 REST 的接口。并将数据库连接保持在服务器端本地。

如果我们让所有功能和查询都在客户端(即使我们会做网络客户端),这不是安全问题吗?

安全性是另一个问题,这里的 REST Web 客户端具有已知且经过验证的策略,以及适当的审计方法。在 REST 接口中,您永远不会“让所有功能在客户端上”。该框架提供了多种身份验证和授权方式 - check the documentation,从 URI 签名到 JWT。

就安全性和可扩展性而言,向整个 Internet 开放 Oracle 端点并不是一个好主意。甚至甲骨文也提供dedicated solutions for proper networking

无论如何,像 mORMot 这样的框架旨在在一个包中提供 REST、SOA、ORM 和 Web MVC,并且性能是从头开始驱动的 - 作为奖励。如果您希望设计 RAD VCL/FMX 应用程序,请使用直接数据库连接,并以数据为中心。如果您想要更开放和可维护的东西,请考虑 SOA,并以服务为中心。今天,我以Micro-Services 的身份开发我所有的 SOA 解决方案,使用独立的数据库,并以 mORMot 作为工具,具有巨大的性能 - up to million of data items per second

【讨论】:

    【解决方案2】:

    对我来说这听起来像是一个模糊的故事,除非我有充分的证据证明,否则我很难相信这一点。即便如此,在比较这种不同架构方式的性能时,也很容易比较苹果和橙子。

    我不认为https一般比直接连接快,但它取决于很多变量。

    此外,mORMot 本身也需要连接到数据库,它可以使用一些直接 Oracle 访问(我假设与您比较的相同)或 OleDB(又名ADO) 通常与 DOA 相同或更慢,因此没有增益。 mORMot 只有额外的开销。见software architecture of mORMot

    那么,怎样才能更好呢?

    例如,如果中间层在客户端不能使用连接池时使用连接池。在这种情况下,拥有一个用于池化连接的中间层可以带来更好的性能,因为不需要在每个请求上建立新的连接。这样可以节省大量开销。

    缓存也是如此。如果您想构建一个网站或 Web 应用程序,如果可以缓存查询结果而不考虑用户,那么拥有一个中间层可以大大改善缓存。如果你有客户端缓存,你只为那个用户/浏览器/会话缓存它,而在中间层,你可以为所有访问者缓存一些数据,这是一个很大的好处。

    如果在涉及数据库之前需要进行大量处理。这可以在高端中间层更快。再说一次,如果你有很多用户,你可能会用完硬件容量(或云预算),你可能会考虑在客户端上做部分工作。

    所以 3 层有各种好处。 whosrdaddy 已经将其命名为可扩展性、可移植性和冗余。性能可能也是好处之一,如果您勾选上面列出的任何一点,但一般来说,这不是从 2 层到 N 层的主要原因。

    【讨论】:

    • 感谢您非常详细的回答,能否请您告诉我您对第二点的看法(如果我们将所有 sql 查询器和方法都保留在客户端编码,那么安全问题可能会做未来的网络客户端)?
    • 我不太了解 mORMot,但一般来说,使用 ORM,您将发送对象(可能以 Json 数据的形式),因此您的客户不会有任何查询。相反,客户端只是创建、读取、更新、删除 (CRUD) 对象,而 ORM 中间层将负责将其转换为 SQL。
    • 值得一提的是,您可以在不触及客户端层的情况下更改数据库层(或者甚至使用多个数据库供应商而无需更改/重写客户端)。如果我必须面对很多客户(或将来可能有很多客户),我只会去 N 层
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2011-10-10
    • 2017-06-19
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多