【问题标题】:What is the best way to use Web database using Delphi?使用 Delphi 使用 Web 数据库的最佳方法是什么?
【发布时间】:2023-04-02 12:00:01
【问题描述】:

全部。 我正在使用 DBExpress 和 C++ Builder(Delphi) 2007 和 MySQL,firebird,... 我想制作使用数据库(位于我的网络服务器上)的 win 32 应用程序。 我尝试使用 DBExpress(MySQL 的 TSQLConnection),它太慢了…… 我尝试了本地数据库,然后使用 Indy 上传/下载 .. 但这并不好,而且有点复杂。 那么在win 32应用程序中使用基于Web的数据库的基本方法是什么? 你有什么经验吗?或任何文件或任何评论都会如此优雅.. 非常感谢..

【问题讨论】:

  • 没有什么比得上“网络”数据库了。只有局域网数据库和远程/广域网数据库。传输协议相同,TCP/IP,您只是体验 Gb 本地 lan 和慢得多的 WAN 连接的区别。当数据库可以在 LAN 之外访问时,也会产生许多安全隐患。

标签: mysql delphi dbexpress


【解决方案1】:

通过 Internet 链接(使用或不使用 VPN)的数据库连接速度很慢 - 您完全正确。恕我直言,主要原因是每个请求的“ping”延迟,这在本地网络上非常低,而通过 Internet 则更高。所以直接连接不是一个好主意。

在最新版本的 Delphi 中,您拥有 DataSnap 组件,这是进行远程访问(包括 Web 访问)的新“标准”(或 Embarcadero 推荐)方式。即使找到at first to be a bit limited,最新版本也完全可用,正在成为使用Delphi构建跨平台应用程序的关键产品。但它不适用于 Delphi 2007。

一个非常成熟的产品(可用于 Delphi 2007)是Data Abstract

Data Abstract 是一个用于构建数据库驱动应用程序的框架 使用多层数据访问模型,适用于各种平台。

当然,这不是免费的,但这是一种行之有效的解决方案。

你也可以看看我们的Client-Server ORM,它可以连接any DB,并且能够实现一个RESTful SOA architecture with Delphi 2007,即使不使用ORM部分——也就是说,你可以使用你现有的DBExpress——基于源代码,并轻松地向数据公开一些 Web 界面。它是开源的,并使用 JSON 作为安全 authentication mechanism 上的通信格式。有很多documentation included(700多页的PDF),也尽量介绍给SOA world

【讨论】:

  • Datasnap is 在 Delphi 2007 中可用。它只是基于 DCOM 而不是 dbExpress 的不同实现。它将使用 DCOM、套接字或 HTTP 在 Internet 上工作。 D2007 中还有一个基于 SOAP 的实现。
  • @Mad 你是对的。但值得一提的是,如今 DCOM 已被完全弃用,而是一个真正可用于 Windows 7 的 PITA(至少从我的实验和愤怒的客户反馈来看)。
  • DCOM 可以与 2008R2 和 7 完美配合,因为很多 Windows 远程管理工具都是基于 DCOM 的。 DCOM 具有严格集成到 AD 安全性中的优势,而大多数其他远程处理技术则没有,并要求您重新发明轮子以添加适当的安全性(这通常意味着没有安全性或只是有缺陷的安全性)。确实,DCOM 是一头难以管理的野兽,如果您不了解它,您会烫伤手指。
【解决方案2】:

看看Datasnap:info

【讨论】:

    【解决方案3】:

    您需要一个数据访问库,它提供以下功能:

    1. 线程安全。通常,您需要为每个线程使用专用连接。
    2. 连接池。为了快速创建连接((1)所需要的),必须有一个连接池。
    3. 快速执行 SQL 命令、打开结果集、获取功能。
    4. 跟踪。对于任何一个库,您都可能遇到性能问题。您需要一个工具来查看发生了什么问题。为此,您需要查看和分析客户端和服务器的通信。
    5. 结果集缓存和从不同线程同时读取它的能力。您可能只有很少的只读表,您将获取一次并缓存在您的应用程序中。但是你需要一个机制来从线程中读取这些数据。一种 InMemTable 克隆。

    我的回答是有偏见的,但你可以考虑AnyDAC。它具有所有这些以及许多其他功能。

    PS:dbExpress 也应该可以工作。尝试首先找到性能问题的原因,而不是其他库。因为其他库也可能发生同样的情况......

    【讨论】:

    • OP 谈到了网络访问。他/她使用 DBExpress 作为数据访问库,但问题不是这个不够快,而是数据库访问预计可以在具有较小 ping 的本地网络上工作。恕我直言,更改为更优化的库(如伟大的 AnyDAC)在这里没有多大帮助。解决方案应该是 DataSnap 或 RemObject(即更改为 SOA 架构以进行远程访问)之类的解决方案。
    【解决方案4】:

    通过慢速链接的数据库应用程序需要不同于使用快速链接的方法。您必须注意您移动了多少数据,以及您的应用程序执行了多少次往返。

    通常,当需要的子集缓存在客户端,修改,然后应用到数据库时,这种方法是可取的(当然,如果不需要立即看到更改,并且冲突的可能性很低)。

    如果应用程序在设计时没有考虑到处理慢速链接,那么任何中间件都不会对您有很大帮助。

    【讨论】:

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