对于服务于大量用户的服务器应用程序,无疑应当选择使用 SQL Server 2005。至于具体选择基于服务器的哪个版本,则取决于应用程序的规模及其针对的领域,但通过功能列表您可以很容易地确定自己需要哪个版本。此外,更改版本只是决定使用何种许可,通常不需要更改体系结构。
对于客户端应用程序或小规模服务器应用程序,选择数据存储技术稍微有些棘手。对于客户端应用程序,由于成本、复杂性、平台要求和很多其他因素,将完整的 SQL Server 2005 实例放在每个客户端计算机上是没有意义的。小规模的服务器应用程序可能不需要 SQL Server 2005 的某些额外功能,并且昂贵的许可成本也是小型项目无法接受的。对于移动设备应用程序,平台无法支持完整版本的 SQL Server。
本白皮书主要讨论使用新的 SQL Server 2005 Compact Edition (SSCE) 时所涉及的数据存储体系结构挑战、方案和解决方案。文章对 SSCE、其他 SQL Server 2005 版本以及其他关系数据库技术(包括移动设备上的 EDB 嵌入式数据库引擎)之间的异同进行了比较。
数据存储挑战:
对于客户端应用程序或小规模服务器应用程序,您需要解决很多数据存储方面的挑战:
• 数据存储位置。如果您要构建分布式客户端应用程序,并且可以承担将数据存储于后端服务器并通过网络检索数据的费用,完全可以在服务器上使用 SQL Server 2005。如果要构建移动设备或客户端应用程序,则可能需要在客户端建立本地数据存储,以便在脱机时缓存数据。同时您可能还需要在客户端进行缓存,以避免通过网络重复检索诸如产品目录的大型数据集。对于客户端应用程序,可能只需在本地访问数据,在这种情况下,将数据存储在后端服务器上是没有意义的。
在客户端应用程序中,应当将目标锁定在两种选择中的其中一个,具体取决于它是桌面应用程序,还是移动设备应用程序。如果是桌面应用程序(运行于桌面工作站、便携式计算机或 Tablet PC 之上),应考虑采用 SQL Server 2005 Compact Edition (SSCE) 或 SQL Server 2005 速成版 (SSE)。而对于运行 Microsoft Windows CE 或 Mobile 操作系统的移动设备,则可以选择 SSCE 或 EDB 嵌入式数据库引擎。
• 小规模 Web 应用程序。这些是简单的 Web 平台客户端应用程序,用于通过 Web 向少数用户展示动态信息。例如小型企业、社区和非赢利组织或俱乐部。这些程序需要公开 Web 服务器,但要能够从桌面操作系统(例如,Windows Vista 或 Windows XP Professional)运行。
• 缓存应用程序。无论客户端应用程序是否是为脱机工作而设计的,在需要查找诸如城市、省份、邮政代码、产品目录列表等信息时,每次都执行完整的数据库往返通常是没有意义的。通过实现客户端数据缓存,可以为呈现列表或在很少更改的查找表中进行搜索提供重大的性能改进。另外,某些应用程序在设计时所使用的分布式体系结构可能涉及需要与集中后端应用程序服务器通信的智能客户端、移动设备或 Web 客户端应用程序。应用程序服务器可能需要将数据缓存在本地,以避免发生往返数据库服务器的操作。虽然需要将数据缓存在本地计算机,但不能因此就购买完整的 SQL Server 实例或承担高昂的开销将其安装于本地应用程序服务器上。
从简单化的角度考虑,使用平面文件或 XML 文件表面上看似乎很吸引人:大多数开发人员已经知道如何使用 Microsoft .NET 或 XML 序列化操作对文件进行数据读写操作,或使用数据集的各种功能从文件以 XML 的形式对其进行读写。但是,文件在一致性和可靠性方面存在问题。如果应用程序在没有正确完成 I/O 操作并关闭文件的情况下发生中断或被关闭,则所包含的数据可能会损坏,而文件锁定功能可能导致应用程序无法正常运行。这些问题可以通过编写符合标准的代码和错误处理来解决,但一旦这样做,最初使平面文件吸引人所依靠的简单性也就荡然无存了。
而且其内部也缺乏文件查询功能,通常必须先将文件的全部或大部分读取到内存数据结构中,然后数据才可用。因此,如果在应用程序的整个执行过程中需要对数据进行查询、读取和写入操作,则这些数据不适合采用平面文件和 XML 文件。对于诸如配置设置和首选项等简单数据,采用 XML 配置文件比较合适。另外,最好根据访问模式将较大的文档和文件存储为平面文件,而将元数据保存在数据库中。但应用程序的大多数随机访问读/写数据应当通过数据库引擎进行存储和访问。
EDB:
EDB 嵌入式数据库引擎是 Windows CE 5.x、6.x 和 Mobile 6.x 操作系统自带的一部分。EDB 是一种简单的关系数据引擎,它允许用户使用有限的类型系统和查询功能存储表格数据。如果您希望使用设备上的自带功能,或者希望安装的功能在设备上占用资源最少、开销最低,则 EDB 是个不错的选择。对于某些种类的简单数据检索,EDB 可能比 SSCE 更快,但如果需要执行复杂查询操作,它可能较慢。使用 EDB 的最大缺点之一是只能通过使用 Microsoft Visual C++ 中低级别的 API 来访问它。如果要使用 .NET Compact Framework 来编写应用程序以实现使用托管代码开发所带来的生产力优势,则必须使用 C++ 编写单独的数据访问组件用以处理 EDB 数据库,然后需要通过托管代码与该组件进行互操作。这样做所带来的复杂性很可能会远远抵消使用 EDB 的优势。只有在您编写应用程序时使用了嵌入式 C++ 并且侧重于使资源占用量最小化和使应用程序性能最大化的情况下,才应当考虑 EDB。
SQL Server 2005 Compact Edition (SSCE):
SSCE 是一种轻型的 (< 2 MB)、免费的关系数据库引擎,可以安装在目前任何的 Windows 操作系统上。由于 SSCE 是本白皮书的重点讨论对象,因此在随后一节中将介绍它的完整功能集。从较高的层面上看,SSCE 支持表、关系、约束、复杂查询处理、事务、复制和数据安全性。若要为 SSCE 编程,需要使用 ADO.NET 托管提供程序,其数据访问编码模式与用于其他托管提供程序(例如,SQL Server SQLClient 托管提供程序)的模式类似。还可以使用 OLE DB 从非托管客户端访问 SSCE。SSCE 作为一组通过使用应用程序进行引用的库在进程中运行,很容易用应用程序库或作为单独的 MSI 安装来部署它。SSCE 可以很方便地用 ClickOnce 应用程序进行部署,或者通过 Xcopy 部署到移动设备上。SSCE 还将预安装在 Windows Mobile 6.0 或更高版本上。
SSCE 类型系统是 SQL Server 2005 类型系统的子集,并非支持完整 SQL Server 实例所支持的所有功能。SSCE 不支持的 SQL Server 用于服务器应用程序的常用功能包括存储过程、触发器、视图、函数、用户定义的数据类型以及参与 SQL Server Service Broker 消息传递的功能。
SQL Server 2005 速成版 (SSE):
SSE 是一种资源占用量相当少的 (< 55 MB)、免费的数据库引擎服务,它可以安装在目前任何桌面机或服务器的 Windows 操作系统上。由于 SSE 作为一项 Windows 服务运行,因此它需要目标计算机安装 Windows Installer (MSI)。SSE 可以通过 ClickOnce Bootstrapper 进行部署,以允许通过 ClickOnce 部署的应用程序使用它。SSE 支持用户实例隔离,该功能通过确保将一个用户的数据与其他用户的数据自动隔离,从而方便 ClickOnce 部署。
SSE 支持完整 SQL Server 实例的大多数功能,包括表、视图、存储过程、触发器、函数和 SQL CLR。从托管代码访问 SSE 实例中的数据与从完整 SQL Server 实例访问数据的方式相同,都要使用 SQLClient 托管提供程序。还可以通过使用 OLE DB 提供程序,从非托管应用程序访问它。
与完整 SQL Server 实例相比,SSE 的限制相当容易理解。SSE 只使用计算机的一个处理器(即使存在多个处理器);它只使用 1 GB 内存;并且它只允许数据库大小增长到 4 GB。另外,对于所有类型的复制,SSE 可以是订阅者但不能是发布者,只要 SQL Server Service Broker 消息是通过完整的 SQL Server 实例传递的(就是说,在传递链中 SSE 实例之间除了完整实例以外没有对等消息传递),它就可以发送和接收该消息。
SQL Server 2005 Compact Edition 概述
在概念上,可以将 SSCE 视为 SQL Server 2005 数据库引擎的高度精简版本。但是,它是单独的数据库引擎,旨在使驻留应用程序的磁盘、内存和安装要求最小化,同时最大程度提供简单、安全和事务性关系数据存储所需的关键功能。
SSCE 历史:
SSCE 的起源可以追溯到 2001 年发布的 SQL Server CE 1.0,这是 Microsoft 针对移动设备操作系统发布的第一个关系数据引擎,它基于 SQL Server 2000 数据库功能。后续版本 1.1 和 2.0 改进了用户体验,并且 2.0 提供了与 .NET Compact Framework 应用程序的集成。SQL Server 2005 Mobile Edition 作为下一代移动数据库引擎与 .NET 2.0 和 SQL Server 2005 一起发布。SQL Server 2005 Mobile Edition 提供了很多新功能,可靠性更高,性能更为强大,同步选项更加合理,并且能够与 SQL Server 2005 和 Microsoft Visual Studio 2005 更好的集成。
当 SSCE 在 TechEd 2006 上首次发布时,此版本的新名称为 SQL Server 2005 Everywhere Edition。第一次发布后仅过了很短时间,Microsoft 即优化了 SSCE 的计划和版本功能,并于 2006 年 11 月在 TechEd Europe 2006 会议上发布了这些内容和新名称。因此,您可能会发现 Web 上的某些材料在短期内还会使用旧名称 SQL Server 2005 Everywhere Edition 或简称 SQL Everywhere,对于这些名称,请将它们视为与 SSCE 相同。值得注意的是,与早期的 SQL Server CE 版本相比,SSCE 这一数据引擎完全不同并且功能得到了大幅增强,因此需要小心分辨它们。
根据客户端平台的数目和类型以及应用程序的规模,FFA 解决方案体系结构也大不相同。图 2 描绘了典型的体系结构。FFA 由涉及 PDA/电话平台、Tablet PC、便携式计算机或它们的混合的多个客户端组成。通常,它们通过受保护的 Web 服务或虚拟专用网络 (VPN) 连接连接到后端服务,以便可以通过任何可用的 Internet 连接与后端数据同步,而不必返回家庭网络。向它们公开的前端通常放在外围网络(也称为“DMZ”、“外围安全区域”和“被筛选的子网”)中,以限制被它打开的端口数目和类型,而与后端网络的连接也会受到限制。对于更大规模的应用程序,外围网络 Web 服务器可能会连接到运行业务逻辑和数据访问组件的应用程序服务器,该应用程序服务器将直接与后端数据库进行会话。
使用 SSCE 作为数据库引擎的 PIM 应用程序可能使用 SqlCeResultSet API 来尽可能简化数据检索和存储。用于此操作的代码看起来非常像前一节中的第二个代码示例。
小规模 Web 应用程序
对于预期通信量较低的简单网站来说,如果只是为了建立动态、数据驱动的网站,则并不需要购买昂贵的服务器软件,或选择涉及数据库实例的成本更高的托管服务。SSCE 和 SSE 都为存储可用于在网页上显示内容的动态数据提供了简单而免费的方法。无论网站使用 ASP.NET 还是能够通过 OLE DB 提供程序执行数据访问的其他 Web 技术,SSCE 或 SSE 都可以提供站点页面需要的数据。
适用于 SSCE 或 SSE 的 Web 应用程序的用户数不大 - 用户总数可能比较大,但每秒并发请求数应该相当小。
可以作为 SSE 或 SSCE 候选方案的 Web 应用程序的示例包括:
• 用户数不大的业余爱好/俱乐部站点。
• 小型用户组组织。
• 小型企业内部的 Web 应用程序。
除非 Web 应用程序预期的利用率非常低,扩展到更大用户数的可能性很小,否则,对于小规模 Web 应用程序来说,SSE 通常是比 SSCE 更合适的选择。如果应用程序为每小时请求数很低的单线程 Web 应用程序(例如,每小时 < 300-500 请求),则 SSCE 或 SSE 均可以处理所需的吞吐量。
但是,随着应用程序复杂性的增长和/或每秒请求数的增加,SSE 提供了更强大的可选方案,以便不断扩大应用程序的规模来满足与日俱增的需求。正如本文前面所述,SSE 支持存储过程、函数和其他企业级功能,这可以将复杂应用程序的体系结构分成更多层,各个结构之间的相互影响更小。另外,由于 SSE 作为服务运行,因此可以从同一计算机甚至不同计算机上更好地支持来自多个 Web 应用程序的并发访问。在 SSE 中,基于角色的安全性有更多选项,并且可以无缝升级到 SQL Server 完整版,即不必更改数据访问代码,因为 SSE 和 SQL Server 使用相同的数据提供程序。而且,SSE 和 SQL Server 的文件格式是相同的,因此,SSE 数据库正好可以附加到完整 SQL Server 实例,并且可以立即运行。从 SSCE 切换到 SSE 或 SQL Server 完整版时需要进行数据迁移,由于 SSCE 使用与 SSE 或 SQL Server 不同的数据提供程序,因此还需要重新编写某些数据逻辑的代码。
如果选择让 Web 应用程序使用 SSCE,则必须进行某些配置才能允许 SSCE 驻留在 Web 应用程序进程中。
很多应用程序都需要可靠、事务性、持久、高效的数据存储,但并不一定需要 SQL Server 2005 提供的全部功能。SSCE 提供了免费、功能强大而且容易使用的数据库引擎,它可以广泛用于各种应用场合和体系结构中。它可以用于现场团队应用程序、个人信息管理应用程序、小型 Web 应用程序或应用程序数据缓存。它提供了很多目前已有和新出现的数据同步选项,使其可以成为使用后端 SQL Server 2005 数据库的更大型分布式应用程序体系结构的一部分。SSCE 应当是任何需要轻型关系数据存储的应用程序的备选数据库技术之一。