您的位置:首页 > 数据库

数据库、文件系统

2017-06-29 11:09 169 查看
数据库、文件系统的区别

1:数据重复(冗余)

文件与文件之间没有任何联系,举例子,一个学生选了双专业——计算机和金融,学校每个专业都有自己的管理方式,在C盘,建立了两个文件夹,一个叫计算机专业,里面存放了该学生的资料(电话住址身高体重三围),另外一个文件夹叫金融专业,里面把学生的资料(电话住址身高体重三围)又重新记录一遍,这造成了数据的重复(冗余),如果一个学霸选了4个专业,那相同的信息就要重复4次,造成的后果是浪费磁盘空间,如果有一天学霸换电话了,那就有4个地方需要修改了,修改地方越多越容易出错,造成资料不一致,这是用“文件系统”存储造成的问题,我们希望重复的资料,记录一次就够了,以后修改一次就方便了,“数据库管理系统”可以解决这个问题

2:数据读写操作(特别关联操作)困难

如果有一个txt文件,里面记录了某个城市学生的档案,从小学到大学每个年级,每个学生都有长长的一行资料,办事的人想要知道所有学生小学期末考成绩,这只需要“档案.txt”文件中某个局部的数据,肯定不是直接打开整个txt文档来找,为了满足这个需求,程序会写代码,如C语言,JAVA语言去从这个“档案.txt”中提取符合“小学毕业考试”的数据,但过几天后,办事的人可能想要单独看男生的成绩,或者女生的成绩,或者只看语文的成绩,或者语数英的平均分等,如果每个访问数据的需求,都需要编写相关的C语言程序代码才能满足的话,那程序员会忙死了,如果把档案数据录入“数据库”,使用sql语句,你想怎么提取数据就怎么提取,无法使改变select和where条件语句

3:数据安全问题

C/JAVA应用程序会读取整个文件的信息,如果文件是比较敏感的话,比如“工资表”或者“账号密码”表,“文件系统”无法屏蔽一个数据文件的某部分信息(比如工资,密码部分),只展现某部分信息(姓名,账号名字等),但“数据库”可以使用 视图 和 权限 功能来解决问题

4:不能保证数据完整(无事务处理)

我们要运行的程序和访问的数据,需要从硬盘提取到内存,才能被CPU处理,放在内存的东西,只要一断电就没了,计算机不可能总是正常工作,除了断电还可能会有其他故障问题,这会影响到我们正在操作的数据,假设银行用“文件系统”来保存每个人的账户,“A账户.txt”有100元,“B账户.txt”有0元,现在A账户把100元转给B账户,用C语言就是两步操作,1. A账户 - 100 ,2.B账户+100,但程序只运行了第一步时刚好断电,第二步运行不下去,那A账户的钱就凭空消失了,这造成了数据的不一致(数据一致有点像能量守恒),文件系统解决不了这个问题,“数据库系统”可以用一条绳子把1,2两步骤捆绑成一起,只有允许存在两种情况,要么同时成功,要么同时失败

5:并发访问出错(无锁机制)

如果京东某种商品只剩下一个,某个网友看到了,点击购买,接着应用程序就把商品的单位把1个改成0个,显示“没货”这是没有问题,但如果剩下一个商品,有同时20个网友看中了,都放进购物车,随后购买,无法同时满足会出错的,而“数据库”可以用“锁机制”来防止这种情况


数据库由来:

为了解决文件系统的问题,出现数据库。数据库管理系统通过权限、事务、锁机制等读写文件系统获取数据。


文件系统分类

(1):传统文件系统(posix【可移植性操作系统接口】文件系统),比如(ext3、ext4)。
这种经典的文件系统旺旺由于考虑太多功能需求和结构标准,无法应对互联网海量文件存储在性能和伸缩上的要求。在posix文件系统上引入数据库管理系统得到关系型数据库。
(2):No-Posix的分布式文件系统,比如 mongodb、hbase、hdfs
为了解决传统文件系统问题,适应互联网海量文件存储在性能上和伸缩上的要求,在此背景下差生No-Posix的分布式文件系统


数据库分类

(1):关系型数据库,
eg:mysql oracle
依托于传统文件系统。
数据结构:B+树

(2):nosql数据库,
eg:mongodb hbase
依托于No-posix的分布式文件系统
数据结构:很多参考LSM树型结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐