全部。我正在使用 DBExpress 和 C++ Builder(Delphi) 2007 和 MySQL、firebird ......我想制作使用数据库(位于我的 Web 服务器上)的 win 32 应用程序。我尝试使用 DBExpress(MySQL 的 TSQLConnection),它太慢了……我尝试了本地数据库,然后使用 Indy 上传/下载……但它并不好而且有点复杂。那么在win 32应用程序中使用基于Web的数据库的基本方法是什么?你有什么经验吗?或任何文件或任何评论都会如此优雅..非常感谢..
4 回答
通过 Internet 链接(使用或不使用 VPN)的数据库连接速度很慢 - 你完全正确。恕我直言,主要原因是每个请求的“ping”延迟,这在本地网络上非常低,而通过 Internet 则更高。所以直接连接不是一个好主意。
在最新版本的 Delphi 中,您拥有DataSnap组件,这是进行远程访问(包括 Web 访问)的新“标准”(或 Embarcadero 推荐)方式。即使一开始发现有点局限,但最新版本完全可用,并且正在成为使用 Delphi 构建跨平台应用程序的关键产品。但它不适用于 Delphi 2007。
一种非常成熟的产品(可用于 Delphi 2007)是Data Abstract:
Data Abstract 是一个使用多层数据访问模型构建数据库驱动应用程序的框架,适用于各种平台。
当然,这不是免费的,但这是一个行之有效的解决方案。
您还可以看看我们的Client-Server ORM,它可以连接到任何 DB,并且能够使用 Delphi 2007 实现 RESTful SOA 架构,即使不使用 ORM 部分——也就是说,你可以使用现有的 DBExpress——基于源代码,并轻松地向数据公开一些 Web 界面。它是开源的,并使用 JSON 作为安全身份验证机制上的通信格式。包含很多文档(超过 700 页的 PDF),也试图介绍SOA 世界。
您需要一个数据访问库,它提供以下功能:
- 线程安全。通常,您需要为每个线程使用专用连接。
- 连接池。为了快速创建连接((1)所需要的),必须有一个连接池。
- 快速执行 SQL 命令、打开结果集、获取功能。
- 追踪。对于任何一个库,您都可能遇到性能问题。您需要一个工具来查看发生了什么问题。为此,您需要查看和分析客户端和服务器通信。
- 结果集缓存和从不同线程同时读取它的能力。您可能只有很少的只读表,您将获取一次并缓存在您的应用程序中。但是你需要一个机制来从线程中读取这些数据。一种 InMemTable 克隆。
我的回答是有偏见的,但您可以考虑AnyDAC。它具有所有这些和许多其他功能。
PS:dbExpress 也应该可以工作。尝试首先找到性能问题的原因,而不是其他库。因为其他图书馆也可能发生同样的情况......
慢速链接上的数据库应用程序需要不同于使用快速链接的方法。您必须注意您移动了多少数据,以及您的应用程序执行了多少次往返。
通常,当需要的子集在客户端缓存、修改并应用于数据库时,这种方法是可取的(当然,如果不需要立即看到更改,并且冲突的可能性很低)。
如果应用程序在设计时没有考虑到处理慢速链接,那么任何中间件都不会对您有太大帮助。
看看Datasnap:信息