Matrix blog 在设计之初就考虑支持不同的数据库,因此数据层使用了Repository pattern,第一个实现是基于Entity framework的Code first来做的,避免了直接使用SQL语句,在开发期间只需要关注对象和对象间的关系就可以了,提高了开发效率,这也是Matrix blog开发时间短的一个原因。为了方便部署使用了SQL CE 4数据库,性能表现还不错,足以满足blog的日常事务。 但部署到我购买的ISP的服务器时就出现问题了。SQL CE 4支持Bin deploy,所以在服务器上没有安装SQL CE也是可以正常运行的,但SQL CE需要运行在Full trust模式下,我的ISP服务器不支持trust模式设置,所以SQL CE没办法使用了,以前一直用Access数据库,所以没发现这问题。另外一个使用SQL CE的应用部署在一个香港ISP提供的服务器上,可以正常运行,他们的服务器支持trust模式设置,所以没费劲网站就上线了。咨询我购买的ISP的技术人员,半天也给不出个解决方案,想单独购买个数据库吧,发现成本比购买虚拟空间的成本还要高,对我一个个人用户来说颇觉得不值,一个做技术的人来说总有解决办法的。 方案一 SQLite一个嵌入型数据库,跨平台,按官方说法支持web应用,并能满足日点击量在10万左右的网站应用。SQLite面世有很多年了,之前在解决一个桌面应用时就想使用了,后因其它原因放弃,现在SQLite提供了对Entity framework的支持,这样我的源代码不需要做任何的调整就可直接使用了,下载并测试果然好用,上传至服务器依然不好,报无法加载程序集的错误,后确定还是因为Medium trust模式所导致的,无法绕过网站的限制。经过实践发现SQLite是一个不错的嵌入数据库解决方案,使用时应该注意以下几个方面。 方案二 Json.Net是一个不错的Json类库,性能很不错,纯.Net编写,在服务器上肯定可以运行,可以直接串行化和反串行化对象,这样可以与Repository pattern进行结合,我只需要实现一个基于Json的Repository即可。经过一天多的实现运行良好,而且性能还不错,模拟了上千个post文件,每个post被串行化为一个单独的文件,Json的加载速度很快。但问题又出现了,基于文件的保存只能模拟数据的保存,但对于对象之间的关系处理起来就很难,如Post和Category之间是many to many的关系,用文件的形式很难保存这种关系,如果要保存这种关系就需要自定义Json的串行化与反串行化,并在对象加载期间做额外的工作,开发时间与成本就要提高很多,其可维护性和可靠性也不太好保障,因为我需要的是一种简单、可靠的方式,这种方式也只好放弃。 方案三 重新梳理了一下Matrix blog对数据存储的需求。 这时发现了Effiproz,一个免费、开源、纯.Net代码的数据库,支持medium trust模式,支持entity framework,基本符合我的需求,经初步测试可以在网站上运行。 之后把已有数据迁移到Effiproz上了,在迁移的过程中出现了不少问题。 到目前为止Matrix blog可以支持的数据库如下:
1: <system.data>
2: <DbProviderFactories>
3: <remove invariant="System.Data.SQLite"/>
4: <add name="SQLite Data Provider"
5: invariant="System.Data.SQLite"
6: description=".Net Framework Data Provider for SQLite"
7: type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.77.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
8: </DbProviderFactories>
9: </system.data>
10:
11: <startup useLegacyV2RuntimeActivationPolicy="true">
12: <supportedRuntime version="v4.0"/>
13: </startup>
Search
About
Access Count: 16132
Posts: 26
Comment: 0
Welcome
Posts
Matrix blog支持的数据库
( 1/12/2012 2:25:00 AM )
Category:
Matrix blog
Tag:
Matrix
blog
Read ( 48 ) | Comment ( 0 )
Comment ( 0 )