微微信.NET 为什么采用文件系统而不是数据库?
2014-05-08 04:35
465 查看
最近接触的微微信.NET的朋友几乎都会问我一个问题,“微微信.NET为什么不用数据库?”我总结了一下在这里给予大家解答,当然我写这些的目的不为证明文件系统比数据库更好,而是想说,对于有些应用采用文件系统是一个更优的选择:
平时可以感觉到的几个事实: 1 音乐、视频数据都是放在文件系统中、2 大图片文件是放到文件系统中的、3 小的配置文件,文件系统会比数据库的效率高出很多
假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读 内容,无关任何排序或查找操作.而微信应用符合这个特性。
微信的开发中的关键词回复是最适合于文件系统存储的应用: 这个是最适合于文件系统来存储的应用,直接将关键词命名为文件名,直接解决搜索问题,每次的读写IO开销可能在1K以内,这是数据库系统做不到的,对于有些不适合于做文件名的关键字,可以采取一种转义编码作为文件名来实现存储。
除此之外,对于用户上传图片、语音的存储和管理也适合于采用文件系统管理。
对于一个应用系统若想使用文件系统代替数据库,首先需要设计出一个精巧的数据存储结构。笔者看来,在NOSQL开始繁荣的今天文件系统存储是一种NOSQL应用的提现。文件系统必须足够精巧才能解决并发冲突的问题,这就要求足够分散的文件,太多小文件对于传统的机械式硬盘来讲不是一个好主意,但现在SSD已经开始普及,用SSD做主存的服务器能够把文件系统读写的开销有效降低,如果你想获得更高的性能和更小的资源消耗,在中小型项目中使用文件系统代替数据库是个不错的选择。
微微信.NET采用文件系统作为存储系统还有一个考虑就是因为 微微信.NET是纯的C#代码,所以 微微信.NET的系统直接可以在 Mono ASP.NET上部署使用,从而实现在 Linux、Unix 甚至安卓下运行(这个在未来是重要的,会有大量的android设备闲置,是一个变废为宝的好方法,我们对此已经展开研究会在后续介绍:
基于废旧智能手机的云计算集群) 。
导读: 下面有几篇关于文件系统与数据库效率比较的文章
★读配置文件、读数据库数据哪个效率高?
http://blog.csdn.net/jackpk/article/details/5954295
★ 读写文件与读写数据库的效率比较
http://www.metsky.com/archives/313.html
★ 磁盘读写和数据库读写哪个效率更高?磁盘读写与数据库的关系
http://www.jb51.net/diannaojichu/91733.html
★ 保存图片到数据库还是文件系统
http://www.360doc.com/content/06/0312/15/5047_78678.shtml
最后 广告一下 : 完整的 微微信.NET 可以在这里找到 udoo123.taobao.com
平时可以感觉到的几个事实: 1 音乐、视频数据都是放在文件系统中、2 大图片文件是放到文件系统中的、3 小的配置文件,文件系统会比数据库的效率高出很多
假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读 内容,无关任何排序或查找操作.而微信应用符合这个特性。
微信的开发中的关键词回复是最适合于文件系统存储的应用: 这个是最适合于文件系统来存储的应用,直接将关键词命名为文件名,直接解决搜索问题,每次的读写IO开销可能在1K以内,这是数据库系统做不到的,对于有些不适合于做文件名的关键字,可以采取一种转义编码作为文件名来实现存储。
除此之外,对于用户上传图片、语音的存储和管理也适合于采用文件系统管理。
对于一个应用系统若想使用文件系统代替数据库,首先需要设计出一个精巧的数据存储结构。笔者看来,在NOSQL开始繁荣的今天文件系统存储是一种NOSQL应用的提现。文件系统必须足够精巧才能解决并发冲突的问题,这就要求足够分散的文件,太多小文件对于传统的机械式硬盘来讲不是一个好主意,但现在SSD已经开始普及,用SSD做主存的服务器能够把文件系统读写的开销有效降低,如果你想获得更高的性能和更小的资源消耗,在中小型项目中使用文件系统代替数据库是个不错的选择。
微微信.NET采用文件系统作为存储系统还有一个考虑就是因为 微微信.NET是纯的C#代码,所以 微微信.NET的系统直接可以在 Mono ASP.NET上部署使用,从而实现在 Linux、Unix 甚至安卓下运行(这个在未来是重要的,会有大量的android设备闲置,是一个变废为宝的好方法,我们对此已经展开研究会在后续介绍:
基于废旧智能手机的云计算集群) 。
导读: 下面有几篇关于文件系统与数据库效率比较的文章
★读配置文件、读数据库数据哪个效率高?
http://blog.csdn.net/jackpk/article/details/5954295
★ 读写文件与读写数据库的效率比较
http://www.metsky.com/archives/313.html
★ 磁盘读写和数据库读写哪个效率更高?磁盘读写与数据库的关系
http://www.jb51.net/diannaojichu/91733.html
★ 保存图片到数据库还是文件系统
http://www.360doc.com/content/06/0312/15/5047_78678.shtml
最后 广告一下 : 完整的 微微信.NET 可以在这里找到 udoo123.taobao.com
相关文章推荐
- 如何将附加文件存储在文件系统而不是数据库
- 采用HADOOP的MAPREDUCE使用其他文件系统或数据库系统的方式
- XAF 如何将文件存储在文件系统中而不是数据库中
- 重装系统通过数据恢复软件找回来的数据库文件提示不是有效的SQL SERVER文件的修复案例
- 将Oracle数据库改为归档模式并启用RMAN备份 如下Linux环境下对Oracle单节点数据库采用文件系统情况的配置归档模式过程。首先查看数据库归档模式和磁盘使用情况,确定归档文件放到什么位置。
- 解析 bootstat.dat 文件,探究为什么XP知道上次系统启动失败。。。
- [置顶] 解密微信数据库文件解析
- .NET的资源并不限于.resx文件,你可以采用任意存储形式[上篇]
- 文件系统开发手记-第2篇 我为什么要在Lustre上做QoS
- 文件系统,模块系统,数据库系统
- 做个友善的系统配置页面、数据库连接串加密方式存储在配置文件的做法参考
- win7下elnet命令为什么提示telnet不是内部或外部命令,也不是可运行的程序或批处理文件
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中灵活经典的.NET2.0数据库访问组件,附源码
- 64位系统使用Access 数据库文件的彻底解决方法
- 温州市公路管理处数据库和文件容灾备份软件系统项目
- Flash文件系统介绍和平台采用squashfs+ubifs原因
- 自学.net(3)把数据库连接信息写入App.config配置文件
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增“行政区域管理”,同时大批量树采用异步加载
- [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件
- .NET Core采用的全新配置系统[8]: 如何实现配置与源文件的同步