词条统计
浏览次数:6452 次
编辑次数:3次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者

web开发中的数据存储,按照数量多少,可以分成三类:

1、很固定,就一个对象。比如配置对象,整个系统就一个。
2、较少的对象,一般几十条、几百条,至多几千条吧
3、很多,并且随着系统规模扩张,可能会无限制的增长下去

根据数据量的多少,我们使用不同的存储(持久化)方式:

1、整个系统就一个的对象,建议使用前一节所讲的配置类
2、几十条、几百条,最多上千条的数据,建议使用本节我们要讲的文本数据库
3、数据量可能会无限制增长的,当然使用一般的数据库系统了

之所以要使用不同的存储方式,在于提高系统性能。对第一类数据,整个系统就一个对象,基本不变,那就没有必要存储在数据库中,每次访问页面,还要读取一次数据库是很夸张的。

对于几十条、几百条的数据,我觉得存储在数据库中也过分了,所以在 wojilu framework 中,单独设计了一种文本类型的持久化方案。

不管您是使用第一种的配置类,还是第二种的文本数据库,最终都会加载到系统的内存中,所以性能是最优的,普通数据库在性能上根本不能与之相比。

【需求】

到目前为止,我们只有一个后台。现在需要给网站设计一个简单的首页。如下图(草图):

其中页脚的“关于我们|联系方式|人才招聘|公司新闻” 部分,一般也就四五个链接(最多十几个),也就只有几条数据,正好适合使用文本数据库。

第一部分:建立文本数据库类型的对象

 

奇怪吧,只有一个属性?其实是三个属性,父类CacheObject自带了两个属性Id和Name

说明:要使用文本数据库,必须让对象继承自 CacheObject 父类。这个父类之所以叫 CacheObject,是因为它是缓存对象的意思,它持久化在硬盘中,这是一种缓存;首次使用的时候,全部加载到内存中,又是一种缓存,所以叫CacheObject。

第二部分:和前面的 Article 等模型一样,建立控制器和视图:

看下效果图:

数据都添加进去了。问题是,这些数据到底存储在哪里?

请打开网站根目录下 framework/data 目录,您会看到一个 wojilu.cms.Domain.Footer.config 的文件:

 

这是一个文本文件,请随便用什么文本编辑器打开(记事本也行),您会发现里面已经有4条记录了,这4条记录使用了json格式。之所以用json格式,而不用xml,在于json格式占据的空间更小,可阅读性也更强。

看到了吗,连文章内容的html标记都存储在里面了。

好了,我们现在做一个简单的前台首页,请修改MainController,并添加视图文件:

当然,您还要在controller中绑定数据,这里代码就不贴了。

【缓存数据库API】

对继承自CacheObject的对象,使用cdb进行管理。cdb具有如下方法:

基本上和 db 类的操作差不多。但有1个缺点:

不能使用sql语句检索,只能使用 findBy 进行简单的检索。如果实在要用复杂检索,请使用 linq to object 查询(需要dotnet 3.0),反正数据都在内存中。

不过话说回来了,这个文本型的缓存数据库本来就没打算用在大量数据的情境下。它的目标只是追求极致的性能,和阅读修改的便利,您觉得方便、够用、轻快就行了。

【补充】:1.5开始,增加了findPage方法,可以进行翻页:
DataPage<T> findPage<T>( int pageSize )
——分页是在内存中进行的,也就是先查询内存中所有记录,然后根据当前页和 pageSize 获取特定页面的数据。

【补充2】:1.7新增

另外,1.7还可以针对任意列表数据分页显示,不仅仅是CacheObject对象,还可以是你自己的List<T>,做法是:
DataPage<T>.GetPage( List<T> list, int pageSize  )


比如你有一个List<Post>2000条数据,全部缓存在内存里,现在可以——

List<Post> list = 我的post缓存;

DataPage<Post> page = DataPage<Post>.GetPage( list, 20 );

通过这种方式分页浏览。