我正在开发一个使用关系数据库(SQL Server 2008)的项目。本地(本地)应用程序都读取和写入数据库。我正在为Azure(MVC2 Web角色)开发一个不同的前端,它将使用相同的数据,但是只读。如果我正在部署传统的Web应用程序,我会使用SQL Express作为本地数据库,并通过更新应用程序(数据变化非常缓慢)或通过某个同步系统来部署更改。
使用Azure,图片有点阴天(对不起,我不得不)。我似乎无法找到任何信息来指示SQL Express是否可以在Web角色内部工作,如果是,那么如何操作。有谁知道是否可以在Azure Web角色中使用SQL Express?
如果强制我可以做的其他选项:SQL CE或使用SQL Azure。两者都有许多缺点,绝对不够完美。
谢谢, 埃里克
修改 我认为我的情景可能不够清楚。
此数据在部署之间不会更改,并且只能从Web角色中访问;它基本上是一个静态缓存。内部部分是一种红色鲱鱼,因为它不会影响Web角色的数据(除了它的来源)。基本上,我想要做的是拥有一个本地数据存储/缓存,我使用现有的T-SQL / DAL代码。
虽然我可以使用SQL Azure,但它不会添加任何内容,如果有的话只会增加额外的开销和故障点。我也可以使用VM角色,但这太昂贵/复杂了。
在一个完美的世界中,我会将MDF打包到cspkg中(因此它会随应用程序一起部署),然后在角色中本地使用它。如果没有办法做到这一点,那就没关系,我需要弄清楚其他解决方案的优缺点。我们生活在一个完美的世界里。 :)
答案 0 :(得分:2)
您可以使用自定义VHD运行SQL Express,但是您无法依赖该VHD上存在的任何数据。虚拟机在重新启动时完全重置 - 重新启动后没有物理持久性。
如果您愿意,您可以在Azure blob存储中找到整个SQL Server安装。
但是,在完成所有这些操作时,您将只能拥有一个可以使用该数据库的worker / web角色。请记住:SQL Server数据库一次只能连接到一个SQL Server。如果要扩展,则必须为每个Web /辅助角色创建新的SQL Server实例。
除了成本问题之外,我无法想到SQL Express中的任何内容应该是99.9%的应用程序的显示阻止。
答案 1 :(得分:2)
添加到Jeremiah的答案:SQL Azure应该为您提供SQL Express今天所做的几乎所有事情,您可以使用Sync服务将本地SQL Server与SQL Azure同步。
如果您将SQL Express安装到VM角色中,那么每月仅为该实例消耗大约90美元,加上blob存储(您需要云驱动器才能获得持久性)。根据定义,VM角色(或任何角色)必须支持横向扩展;如果由于某种原因要扩展到2个实例,则两个实例都需要自己的数据库副本,因此您需要为每个实例创建一个blob快照。
但是,请记住,如果您选择在VM中安装SQL Express:一旦您处于2个实例,并且每个blob存储实例为20GB,那么您每月接近200美元,那么您就是维护您的VM的操作系统补丁,SQL Express配置和更新,故障恢复程序等。相比之下,20GB的SQL Azure,同样花费200美元,将提供更好的性能并使用同步服务,同时完全删除任何操作系统或数据库您的服务器管理任务。
答案 2 :(得分:1)
要添加到现有的答案,并想知道在云中运行SQL Express是否是一个好主意: 它作为临时存储区域确实有意义。考虑这种架构方法: 说你正在旋转节点来运行工作。在本地SQL Express中为每个节点存储大量计算结果可能是个好主意,并且当作业在节点上完成时立即提供聚合响应。将不再热门的结果传输到外部SQL服务器以用于将来的报告/等可以在后面进行。从容量/延迟/成本角度来看,SQL Azure可能不是最佳的,可以存储大量的结果,而ATS并不总是符合要求,特别是在涉及关系数据,性能或现有代码时。
答案 3 :(得分:1)
要扩展David所提到的,您可以注册SQL Azure Data Sync CTP2,这将允许从SQL Server同步到SQL Azure:http://www.microsoft.com/en-us/SQLAzure/datasync.aspx
确保使用CTP2,因为CTP1不支持SQL Server。
答案 4 :(得分:0)
如果它是只读本地缓存 - SQL CE 4或SQLite。
两者都有实体框架提供者。
如果你正在写它 - SQL Azure