在我们一头扎进数据库设计之前,我们先了解一下除了关系型数据库之外的数据存储方式。
平面文件Flat File)
包括以.txt和.ini结尾的文件。
eg: 一个.ini文件的内容:
- [WebSites]
- MyBlog=http://www.cnblogs.com/DBFocus
- [Directorys]
- Image=E:\DBFocus Project\Img
- Text=E:\DBFocus Project\Documents
- Data=E:\DBFocus Project\DB
优点:
文件的存储形式非常简单,普通的编辑器都能对其进行打开、修改
缺点:
无法支持复杂的查询
没有任何验证功能
对平面文件中间的内容进行插入、删除操作其实是重新生成了一个新文件
适用场景:
存放小量,修改不频繁的数据,如应用配置信息
Windows注册表
错误的修改Windows注册表会引起系统的紊乱,故不建议把很多数据存放在注册表中。
Windows注册表为树形结构,存放着一些系统配置信息和应用配置信息。
通过把不同的配置存放在注册表的不同分支上,使得应用程序公共配置信息与用户个人配置信息分离。
eg:某文档版本管理系统,能通过配置与本主机上安装的文件比较器建立关联进行文档比较。这是一个公共配置信息,文件比较器路径可以存放在注册表的HKEY_LOCAL_MACHINE\SOFTWARE分支下。
同时该文档版本管理系统能记录用户最近打开的10个文档路径。这是用户个人配置信息,对于不同的Windows用户最近打开的10个文档可以不同,这些配置信息可存放在注册表的HKEY_CURRENT_USER\Software分支下。
Excel表单Spreadsheets)
优点:
Excel 非常普及,用户对于Spreadsheet的表现形式非常熟悉
可以进行简单统计,方便出各种图表
缺点:
不适用于许多Spreadsheet之间关系复杂的情况
无法应对复杂查询
数据验证功能弱
适用场景:
数据量不是非常大的办公自动化环境
XML
XML是一种半结构化的数据。相比于超文本标记语言HTML),其标签是可以自行定义的,即可扩展的。
eg:一个XML文件内容
-----------------------------------------------------
- <?xml version=”1.0” encoding=”UTF-8” ?>
- <ClassSchedule>
- <Class Name=“Psychology” Room=”Field 3”>
- <Instructor>Richard Storm</Instructor>
- <Students>
- <Student>
- <FirstName>Ben</FirstName>
- <LastName>Breaker</LastName>
- </Student>
- <Student>
- <FirstName>Carol</FirstName>
- <LastName>Enflame</LastName>
- <NickName>Candy</NichName>
- </Students>
- </Class>
- </ClassSchedule>
-----------------------------------------------------
XML文件有几个特点。
首先,XML标签要求严格对应,且不能出现交错的现象。
其次,XML文件必须有一个根节点,该节点包含所有其他元素。
第三,同级别的不同节点内不必包含相同的元素,如上例中第二个学生Carol有一个特别的节点NickName。这个特性使得在某些场景中XML比关系数据库更能应对变化。
优点:
缺点:
适用场景:
适合存放数据量不大,具有层次型结构的数据,如树形配置信息
NoSQL数据库
非关系型数据库我接触的不是很多,除了给出一些产品名称之外不做很多展开。园子里已有一些文章,本文最后也给出了链接供大家学习、研究。
1. Key-Value数据库
Redis, Tokyo Cabinet, Flare
2. 面向文档的数据库
MongoDB, CouchDB
3. 面向分布式计算的数据库
Cassandra, Voldemort
这几年NoSQL非常热。我认为NoSQL并不是“银弹”,在某些SNS应用场景中NoSQL显示了其优越性,但在如金融行业等对数据的一致性、完整性、可用性、事务性高要求的场景下,现在的NoSQL就未必适用。我们应充分分析应用的需求,非常谨慎地选择技术和产品。