30

我有一个小项目,将在 1 台计算机上拥有 1 个用户。数据库将相当小(可能小于 1 mb 的数据)。我计划为该项目使用 WPF 和实体框架。

我为我的项目提出了 2 个潜在的数据库解决方案:SQL Server CESQL Server Express LocalDB(使用 SQL Server 2012)。我从来没有使用过这些,我更习惯于使用完整的 SQL Server 2008 安装。

我还希望它易于安装在客户端上。理想情况下,我只想将一堆文件放在一个文件夹中(连同我的 .exe 文件)。

所以这里的任何人都可以建议我使用最好的技术吗?

谢谢!

4

6 回答 6

38

请参阅介绍 SQL Server Express 本地数据库运行时演示文稿 - 提供了很好的概述。

LocalDB 的巨大优势在于它是真正的 SQL Server——它是 SQL Server Express 的特殊版本,但它基本上支持“真正的”SQL Server 所拥有的一切——空间数据类型、存储过程——你可以命名它。

另一方面,SQL Server Compact Edition 是一个非常缩小的版本 - 不支持许多功能和数据类型。它更小,更“敏捷”——但它缺乏很多冲击力。

我个人会在 SQL Server CE 4 上选择带有 LocalDB 运行时的 SQL Server Express - 除非您特别需要 SQL Server CE 的小尺寸(例如在移动设备上)。

另请参阅ErikEJ 出色的Everything SQL Server Compact网站上的SQL Server CE 3.5、CE 4.0、SQL Server Express 2008 R2 和 SQL Server 2012 Express LocalDB之间的比较。

于 2012-03-11T14:04:50.417 回答
29

这取决于,但根据您的要求(即非常少量的数据和 XCopy 安装),您唯一的选择是 SQL Server Compact,因为 SQL Compact 在磁盘上的占用空间约为 18 MB,而 LocalDB 为 160 MB,而 LocalDB 需要管理员安装(仅作为 MSI 提供)-但如果 SQL Server 兼容性更重要,LocalDB 是最佳选择(如 marc_s 注释)

于 2012-03-11T16:12:17.207 回答
6

忘记所有模糊的“它更容易”、“它更小”、“它缺乏冲击力”或“它更轻”的答案(没有冒犯),我认为在面临选择时应该关注两者之间的主要区别:

  • LocalDB 是进程外的。
  • CE 正在进行中。

作为申请过程的一部分运行或不运行有很多含义,可能应该在单独的问题中进行探讨。

最明显的一点是,如果您需要使用进程内 DBMS(例如 CE)从多个应用程序访问数据库,所有应用程序都将使用自己的 cpu-time 直接访问数据库文件。同步它们真的很困难,实现这一点有助于理解为什么 CE 的功能较少(以及许多其他东西)。

另请注意,虽然人们可能会担心运行相同 CE 代码的多个进程可能会占用过多的内存,但请记住,操作系统足够智能,可以在多个进程之间共享其页面缓存中的页面,因此一个确实不是问题.

LocalDb 只是一种自动管理普通 Express 实例的方法,并且基于每个用户(它与 SQL Server Express 没有什么不同,它是同一件事)。

于 2013-08-01T15:39:55.493 回答
5

我真的不会和 ErikEJ 一起去这里。我没有投票赞成他的答案的声誉,但鉴于您要求的目标 SQL CE 确实是最快的进出。marc_s 在 SQL CE 的“缺失功能”VS LocalDB 上提供的许多比较问题通过使用 EntityFramework 得到缓解(不支持过程 T-SQL,但如果您使用 EF 和 Lambda 和 LINQ,则不会真的是个问题)。

于 2012-03-11T18:03:58.750 回答
3

有关为什么创建 LocalDB 的背景信息,请参阅此页面

它是专门为开发人员创建的。它易于安装,无需管理,但在 API 级别与其他 SQL Server 版本兼容。在这方面,它就像免费的SQL Server Express版本的轻量级版本。

虽然这看起来与SQL Server Compact相似,但也有区别:

  • 执行模式:SQL Server Compact 是一个进程内 DLL,而 LocalDB 作为一个单独的进程运行。
  • 磁盘使用量:所有 SQL Server Compact 二进制文件大约需要 4MB,而 LocalDB 安装需要 140MB。
  • 特性:SQL Server Compact 提供查询等核心 RDBMS 功能,而 LocalDB 提供更丰富的特性集,包括存储过程、几何和地理数据类型等。

在我看来,LocalDB 通常用于离线开发,以确保您开发的代码与您的生产 SQL Server 数据库 100% 兼容。

于 2013-08-12T21:56:04.043 回答
2

此外,如果隐藏您的知识产权/架构/数据以防止用户轻松访问很重要,那么 SQL CE 可以进行密码保护/加密。SQL Local db 可以从管理工作室轻松打开。

于 2012-10-06T01:22:21.400 回答