SQL LocalDB与SQL Server CE的区别

30

我有一个小项目,只有1个用户在1台计算机上。数据库将非常小(可能少于1MB的数据)。我打算使用WPF和Entity Framework来完成这个项目。

我为我的项目想出了两个潜在的数据库解决方案:SQL Server CESQL Server Express LocalDB(带有SQL Server 2012)。我从未使用过任何一种,我更习惯于使用完整的SQL Server 2008安装。

我也希望它能够在客户端上轻松安装。理想情况下,我只想把一堆文件放在一个文件夹中(以及我的.exe文件)。

那么这里是否有人能建议我使用最好的技术?

谢谢!

6个回答

38

请观看介绍SQL Server Express Local DB Runtime演示文稿——它提供了很好的概述。

LocalDB的巨大优势在于它是真正的SQL Server——它是SQL Server Express的特殊版本,但它基本上支持所有“真正”的SQL Server具有的功能——空间数据类型、存储过程等等。

另一方面,SQL Server Compact Edition是一个非常简化版本——许多功能和数据类型不被支持。它更小、更“灵活”——但它缺少很多功能。

我个人会选择使用带有LocalDB运行时的SQL Server Express,而不是SQL Server CE 4——除非您特别需要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之间的比较


1
另一个好链接:http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx - nawfal

29

这要看情况,但根据您的要求(即数据量很小和XCopy安装),您唯一的选择是SQL Server Compact,因为SQL Compact在磁盘上的占用空间约为18 MB,而LocalDB则需要160 MB,并且LocalDB需要管理员安装(只能作为MSI文件提供)- 但如果SQL Server兼容性更重要,则LocalDB是最佳选择(正如marc_s所指出的那样)。


6
忘记所有模糊的“它更容易”、“它更小”、“它缺乏冲击力”或“它更轻”的答案(无意冒犯),我认为当面临选择时,应该专注于两者之间的主要区别:
- LocalDB是外部进程。 - CE是内部进程。
作为应用程序进程的一部分运行与否有许多影响,这些影响可能应在单独的问题中探讨。
最明显的一个是,如果您需要使用内部DBMS(如CE)从多个应用程序访问数据库,则所有应用程序将直接使用自己的CPU时间访问数据库文件。同步它们非常困难,认识到这一点有助于理解CE为什么具有较少的功能(以及其他很多事情)。
还要注意的是,虽然人们可能担心运行相同CE代码的多个进程可能占用比必要更多的内存,但请记住,操作系统足够聪明,可以在多个进程之间共享其页面缓存中的页面,因此这不是一个问题。
LocalDb只是一种自动管理普通Express实例并基于每个用户的方式(它与SQL Server Express没有区别,是同一件事)。

5

我非常同意ErikEJ的观点。虽然我没有足够的声望来投票支持他的答案,但是考虑到您所需的目标SQL CE确实是最快速的入门和退出方式。由于您使用EntityFramework,SQL CE的“缺失功能”与LocalDB提供的链接中给出的许多比较问题都得到了缓解(不支持过程性T-SQL,但如果您使用EF、Lambda和LINQ,这将不是一个问题)。


3
没错。当你在处理本地文件时,我不认为你需要存储过程。我也会选择CE。 - Allon Guralnek

3
请查看此页面,了解LocalDB创建的背景。
LocalDB专为开发人员而创建。它易于安装,不需要管理,但与其他SQL Server版本在API级别上兼容。在这方面,它类似于免费的SQL Server Express版的轻量级版本。
虽然这似乎类似于SQL Server Compact,但是存在一些差异:
  • 执行模式:SQL Server Compact是一个in-proc DLL,而LocalDB作为单独的进程运行。
  • 磁盘使用:所有SQL Server Compact二进制文件总共只有4MB,而LocalDB的安装需要140MB。
  • 功能特性:SQL Server Compact提供核心RDBMS功能,如查询,而LocalDB提供更丰富的功能集,包括存储过程、几何和地理数据类型等。
我认为,LocalDB通常用于离线开发,以确保您开发的代码与生产SQL Server数据库完全兼容。

非常好的回答,如果您能解决部署差异(如果有的话),那就更棒了。谢谢。 - NoChance
小提示:顶部的链接已经失效。 - NoChance
1
这是Wayback Machine存档的链接副本:http://web.archive.org/web/20110716081753/http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx - Amro

2
此外,如果将知识产权/架构/数据隐藏以防止用户轻易访问是重要的话,SQL CE可以进行密码保护/加密。而SQL Local db可以很容易地从管理工具中打开。

如果应用程序可以打开数据库,用户也可以。 - Andrew Barber
我认为这就是他说要隐藏不易访问的原因。一个普通用户必须知道数据库密码才能进入。 - Tiago César Oliveira
不幸的是,这一点是最昂贵的,这让我到现在还不能决定迁移到LocalDB :( - Ahmed Suror

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接