首页 / 软件开发 / C# / 闭关纪要3.C#的结构化存储功能以及在Web开发之中的应用
闭关纪要3.C#的结构化存储功能以及在Web开发之中的应用2010-03-04 cnblogs step1 K_Reverter这次,我来谈一点高深的话题:结构化存储(Structured Storage).也许有人要奇怪我为什么研究到那个东西去了,不就是个打杂的么?还要研究这些东西?我先说说来由。我的网站上的地名信息系统一共包含70万个文件,这么多的文件处理起来是很成问题的,例如采用以下方法:1.不在服务端任何缓存处理,直接在用户访问时返回页面,这样的话,缺点是反应速度慢,对Web服务器和数据库服务器产生的压力挺大,毕竟,与地图相关的查询通常是比较耗性能的(据我所知,一般的地图公司的查询引擎很少基于SQL)。2.在服务端保存缓存文件,这样的话数据库的压力小了,可是在页面上缓存许多文件维护起来是很麻烦的事情(最麻烦的是通过FTP删除了),而且,在文件夹下放太多的文件本身就会对系统的性能有挺大的影响。基于以上的情况,我原来的Step1.cn处理方法是只对级别比较高的地名进行缓存,现在网站升级之后我有5G的空间可以用,因此我打算用第二套方法,可是没有过多久,万网居然通知我网站的文件数超出限制,我这才知道,在对文件大小的限制居然只有5万个,如果我改回到Step1.cn的那种模式,这么大的空间就完全浪费了,因此,我需要一种方法将这些文件合并起来。在这里,需要预先说明的是,这样做应该是会耗损服务器的性能的,我也是抱着一个技术研究的想法去玩这个,目前还不敢部署上去,因为在网站服务器上使用这个可能会比较奇怪,对服务器的性能消耗有多大,我心里也没有底。下面先说说结构化存储,所谓的结构化存储就是实现了一个简单的文件系统的功能,可以向这个文件系统添加删除文件或目录,用起来和物理文件系统差别不大,主要区别是结构化存储最终是将所有的文件存储到一个大的文件里面,这样就可以实现我的需求。关于结构化存储,我虽然走通了其使用,可是我不是专家,如果要了解更多信息,建议参考如下文章并和博主联系:1.C# 中基于 COM+ 的结构化存储(JianHua Zhang)2.结构化存储C#类库(BlueDog)我是直接使用了BlueDog的库文件,在调用的时候,发现存在一个严重BUG,会造成文件句柄不能正常释放的问题,该问题和解决方案我会在本文最后附上,目前正准备联系BlueDog修正这个问题。有了这个库(需要说明的是,我以前其实打算直接用ZIP格式的,可是后来发现,ZIP文件一旦生成,不能修改,而且我觉得ZIP会附加一个压缩和解压过程,应该对性能的影响更大),下面要解决的问题就是网站上如何使用这个库,当然不能在业务之中使用这个类,因为这样架构是不合理的,似乎从.NET架构上来讲,应该使用VirtualPathProvider Class (System.Web.Hosting)来实现的(例如写一个类并继承这个VirtualPathProvider,然后在Web.Config文件之中注册,之后网站使用到System.IO.File的地方自动由自定义的类来处理,详细情况可以参考ASP.NET 2.0 里的VirtualPathProvider)可是我研究了决定不使用,因为相对比较麻烦,不够灵活,而且我想把GZIP功能直接附加进去。