数据库产生的背景

http://blog.csdn.net/weiwenhp/article/details/8093506

市场上出现某个产品往往是为了满足大家啥需求.只有在某个需求背景下才会产生相应的产品来.当然也有人说再厉害点的公司是创造一种需求出来,但实际上也要人在潜意识里有那种需求才行的,人可能在潜意识里有很多需求,只不过他自己也不确切的知道,你通过一个产品帮助他发现罢了.说到这里就忍不住想来聊点题外话了,我们经常听到这样一种说法,把公司分为三种境界.

题外话,公司和程序员等级划分

一流的企业卖的标准,二流的企业卖的是品牌,三流的企业卖的是产品.

这句话的大概意思可以这样简单的理解,是像国内很多加工工厂,没有自己的品牌产品.只为他人做嫁衣裳.最有代表性的如富士康.软件行业就是各种外包公司和做各种各样小项目的呗. 像一流企业和二流企业划分其实就没那么明显了.有自己的品牌,但是名气还不能达到业界前一两位那水平可能就算二流.像微软,Oracle,google这样的名气比较大的可能就得算一流了.还有啥英特尔之类的.不过实际上这种划分也纯属娱乐拉.人家老板只要赚钱就行,管你干嘛.像人家富士康老板赚的钱还不多啊.

另外以前还看到一个给程序员分类的文章,叫啥程序员九重天来着.有点记不清了.大概是说程序员从低到高分为菜鸟,大虾,牛人,大牛,专家,学者,大师,科学家,哲学家.觉得还挺有趣的.也是纯属娱乐下了.

很多时候我们都喜欢把啥东东都来划个三六九重,高低贵贱.其实也没必要拉,觉得还是像佛教那样,觉得众生平等,所有相皆是虚妄,一切有为法如梦幻泡影,如露亦如电,当作如是观.把人生就当作一个游戏,一场梦呗.至于工作啊,政治啊,经济啊这些啥东东也不用太那么较真了.

扯得有点远了,还是来说数据库吧.

文件系统缺陷

我们知道刚开始是没有数据库这概念的.当数据量比较少时用一个啥txt文本文件就差不多就能搞定了.但数据量稍微多一点时,而且数据保存在不同的文件中.比如啥txt,doc,excel等文件.此时要处理数据还是手动去查询更改就非常之麻烦.可能得再整个简单应用程序帮你做些事了.只给你提供一些简单的用户界面.封装背后的一些复杂操作.此时数据的组织和保存还是主要依靠操作系统的文件系统.应用程序只是简化了下用户的操作.

当数据量非常多的时候会发现应用程序加文件系统的方式会存在下面一些明显的缺陷

1.数据关联度小,查询困难
举个很简单的例子,假如有一个文本文件.里面有很多信息.你想通过指定一些条件查一些信息.如果只是指定一个关键字,用它自带的查找功能就能找到.但如果条件一多咋整?比如要条件中要符合多个关键字,而且有些条件不是关键字,比如是以数字结尾的文字.你可能想可以通过正则表达式啊.实际上如果还不是非常复杂也可以呢.但如果再复杂一点,可能正则表达式就整不出来了啊.
有时你想找到一些关联信息出来.比如你要找一个人所有相关的信息.咋整?在一个个文件中
你没法知道哪些信息与另外信息有啥关联啊.

2.并发操作时容易带来混乱
我们知道现在很多数据不会是你一个人去操作.有很多人同时操作的.所以你去修改,别人也去修改很容易得到一个谁也不确定的错误结果了.

3.安全性问题
首先是文件系统中,数据都放一堆了.你没法精细的控件哪一部分数据不能被随便读取或修改.而有些重要或保密的数据必须得严格控件.另外一个就是意外出现时,比如突然断电或死机了.数据肯定会丢失.虽然你可能之前会有一些备份.但你不可能实现实时备份,所以总会丢一部分数据.而且可能断电的那瞬间.有些中间结果已经写进去了.于是系统中就有了错误的数据存在.你以后操作可能由这错误的数据带来更多的问题.

4.数据冗余与不一致性

各种各样的文件由于由不同的人操作,相与之间关联系也不大.可能一些信息在某个文件中保存了,在另外的文件中又保存了.有时修改一个文件中的信息时,另一文件中相同的信息没有同时更新.

上面说的这几个是比较容易想到的问题.可能还存在其他一些问题.

数据库怎么解决文件系统缺陷

于是为了解决上面问题,数据库应运而生.刚开始可能有啥网状结构之类的数据库.现在的话占主流的就是像Oracle,SQL Server,DB2,Sybase,MySql,PostgreSQL等一些关系型数据库.就以关系型数据库来举例说下怎么解决上面的一些问题的.

1.解决冗余不一致
在数据库里面以有为单位来组织数据.在设计表的时候你遵守一些范式就可以消除绝大部分容信息,因为你可以方便的把一些公用数据保存在一个表中,然后啥主键外键可以很方便的关联起来.
不一致性是由冗余引起的.冗余少了不一致性自然也少了.
另外你还可以通过编写啥触发器,进一步控制不一致的问题.比如你修改某一处内容时,还可以是相关的信息同时更新.这里的相关信息不一定是完全相同的信息,而只是相关.

2.解决数据查询困难,关联度小,并发操作
在表中查询数据再方便不过了啊.直接几个简单的sql,再复杂的条件用几个嵌套的sql或在where后面指定些啥条件就能整出来.而且sql语句里面也能用正则表达式.所以你更能方便的操纵数据了.并发操作嘛就用加锁来解决.

3.解决安全问题
通过各种备份手段,日记文件啥的.可以保证数据不丢.通过各种权限措施可以精细的控制你对各种数据的操作.还有啥审计功能,比如oracle,sql server中的trace啊,可以记录下来数据库中的所有操作.

数据库ACID的原理

实际上多部分时候我们用户使用数据时最为关心的一是准确,二是安全.三是速度快点.其他啥的不管你系统咋整我可不管啊.比如举个例子.你把钱存银行里去了后.你最关心的一个是钱在银行系统里数量可不能出错.比如你做一些操作时,比如存钱,取钱之后.数据一定不能错.不能突然就让你的钱变少了.当然要是变多了你可能还不会生气.这就是数据的准确性.另外一个是安全性,你的账号密码可不能被人偷了,别人把你的钱给取了啊.

为了实现安全性上面说了.这里再说下准确性.关系型数据库通常把各种操作当成一个个的事务来看待.而通过让事务具有ACID四个特性来达到准确和安全的目的.
ACID是原子性(Atomicity),一致性(Consistency),隔离性或独立性(Isolation),持久性(Durability)这四个词的简称.
下面简单介绍下四个词

原子性
我们学化学时知道刚开始人们认为原子是组成世界万物的最小粒子.是最基本的单位不能划分.实际上后面发现还有更小的一些粒子,比如啥质子,电子,侉子之类的.这里我能只取原子最初的意思,最基本的单位.那我们在数据库的操作中,也把某一组操作看成一组基本单位,比如你寄钱,然后更新自己账户,另一个人收钱,然后更新自己账户.完全完成了之后再最终提交.提示成功了.如果中间哪出问题了就回退在最初状态,把中间所有步骤撤销.
数据库虽然有了对原子事物这样的支持.但具体怎么指定一系列操作是一个原子性的事物是由具体的应用程序决定的.所以如果你应用程序中一系列操作较复杂,你也把它当原子事物来处理.假如里面还涉及到了drop表.到时那表都给删没了,你到时还咋回退去啊.

一致性.
一致性就是一个地方的某个数据改了,与之相关的信息都得更新.保持一致嘛.数据库通过主外键,约束条件,触发器这些机制基本上能实现一致性.

隔离性
并发操作时涉及到一些问题,比如你在更新某个数据时你不希望别人也同时更新.于是你要把数据先暂时隔离起来.一般用加锁来解决.你操作的时候别人就没法操作那数据了.

持久性
简单点的讲就是数据永不丢失了.一般通过实时联机备份,日志文件之类的.保证数据不丢.

关系数据库的一些缺点

世界上没有完美的事务.啥都有会缺点的.像关系型数据库也有一些缺点,这里讲一个最容易想到的缺点.就是性能问题.如果有海量的数据的话,速度会变得很慢.为啥呢,一个是你把数据都放表里,假如表里面有个几十G的内容.你查找起来能不慢吗,特别是多个表一关联查找,更加慢得死.而且你还有啥触发器,约束等一些额外的操作作用在表上.需要些额外的操作就变得更慢了.实际上你就算简单的执行一些啥操作.关系型数据库为了实现一致性,隔离性等一些目的.还会在后台做很多操作.这样得到一个结果会很慢的.

NoSQL数据库

随着现在上网的人一多,出现了很多啥sns系统,可能一看到sns这词你觉得还有点陌生,不知道啥意思.没准你眼一花还以为我说的是关于sm的网站呢.你可能对sm还是蛮熟悉的.

sns是Social Networking Sevices,这就是我们讲的社交网络,比如啥Facebook, 人人网之类的.这样的的网站数据量极大.而且不像一些商务网站那样对数据的准确性,实时性要求那么高.  但对速度要求非常高.如果你网站慢得像蜗牛了谁还能用你的.而一些商务型的系统可能得到一些复杂的结果需要等蛮长时间.比如一个查询海量复杂数据的几百行甚至上千行的SQL一执行起来可能得几个小时甚至一整天.

于是出现了很多非关系型数据库,一般叫NoSQL数据库(Not Only SQL)的简称.这些数据库不像关系型数据库都整成一个个的表.它们组织数据的结构比较灵活点.像比较出名的有MongoDB(貌似百度,淘宝,盛大,新浪都有用到它呢).还有啥Big Table, google有用它.

这些数据库可能把主要精力放在怎么提高你读写的速度上了. 而实时性准确性,安全可能不如关系型数据库吧.(这里说的实时性不是说查询速度快,而是说你更新实时,你一修改马上就给更新,相关的数据也一起更新),凡事有利有弊呗

时间: 2024-11-01 00:44:47

数据库产生的背景的相关文章

数据库的本质、概念及其应用实践

今天这堂课,分为三个大点,正如标题所指出的,是讨论数据的本质.概念与应用实践.第一点本质的探讨是站在一个更高的高度来分析数据的产生以及各种使用场景,然后将数据相关的存储手段,作一个汇总讲解.而概念,则是一个串讲,主要放在关系数据库上,因为我们六月份公开课,也将以关系型数据库为主.第三点就是通过一些实例来巩固前面两点所讲的内容. 一.数据库的出现源起和本质 1.1 数据库的起源 想像一下我们的电脑,有目录,有文件,文件有大小,有位置,有格式,这个是有文件系统开始就有这个概念的,肯定在有一个地方,存

golang+数据库定时任务

golang+数据库定时任务 项目背景大致如下,楼主在用nodejs写项目时遇到一些需要定时去处理的事情,例如僵尸用户定时清除,一些产品定时下架,邮件定时发送等等! 期初使用nodejs setTimeOut递归嵌套实现,后来发现内存不断飙升,故而放弃,最终改用了性能不错的golang实现 数据库设计 字段名称 含义 id 编号 name 任务名称 create_at 创建时间 type 1. 执行一次 2.循环执行 separate_time 执行间隔 status 执行状态 0.未开始 1.

数据库相关中间件介绍

数据库相关中间件介绍 详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt412 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据

Oracle 数据库有五个必需的后台进程,DBWR,LGWR,CKPT,SMON,PMON

SMON 是系统监视器(System Monitor)的缩写.如果Oracle实例失败,则在SGA中的任何没有写到磁盘中的数据都会丢失.有许多情况可能引起Oracle实例失败,例如,操作系统的崩溃就会引起Oracle实例的失败.当实例失败之后,如果重新打开该数据库,则背景进程SMON自动执行实例的复原操作. DBWR 是数据库书写器(Database Write)的缩写.该服务器进程在缓冲存储区中记录所有的变化和数据,DBWR把来自数据库的缓冲存储区中的脏数据写到数据文件中,以便确保数据库缓冲存

数据库的本质、概念及其应用实践(一)

原文请详见:http://www.ucai.cn/blogdetail/7033?mid=1&f=5 能够在线执行查看效果哦! 今天这堂课,分为三个大点,正如标题所指出的,是讨论数据的本质.概念与应用实践.第一点本质的探讨是站在一个更高的高度来分析数据的产生以及各种使用场景,然后将数据相关的存储手段,作一个汇总解说.而概念,则是一个串讲,主要放在关系数据库上,由于我们六月份公开课,也将以关系型数据库为主.第三点就是通过一些实例来巩固前面两点所讲的内容. 一.数据库的出现源起和本质 1.1 数据库

SQL Server 在缺少文件组的情况下如何还原数据库

SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为B库(主分区的备份还原可参考:SQL Server 维护计划备份主分区 和 主分区备份与还原),为了对a,b表进新的数据,我修改了a,b表名,在B库新建了两张不分区的a,b表: 这样运行都没有什么问题的,但是在一次我分离了数据库B,拷贝了mdf和ldf文件,现在想使用mdf和ldf还原为B库的时候出

机房收费系统数据库概念结构设计

数据库的设计大致流程想必大家都知道,不知道的也能很容易的在网上找到相关的资料,通常,我们将数据库设计分为6个阶段,即需求分析阶段.概念结构设计阶段.逻辑结构设计阶段.物理结构设计阶段.实施阶段.运行和维护阶段. 本次我们不谈数据库设计的理论知识,主要是以机房收费系统的数据库设计为背景来说明数据库的概念结构设计是如何产生的,当然包括了数据库设计中最难的需求分析了,否则就谈不上什么数据库的概念结构设计了. 因为我们都已经做过一遍了,而且从一开始我们就是照着系统原型做的,没有从无到有的过程,所以无法体

数据库事务、事务隔离级别以及锁机制详解

以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个人学习总结,不对的地方还请指出! 什么是事务? 事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败.一个逻辑工作单元必须有四个属性,称为 ACID(原子性.致性.隔离性和持久性)属性,只有这样才能成为一个事务. 数据库事物的四大特性(ACID): 1)原子性:(Atomicity) 务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 2)一致性:(Consistency) 事务在完成时,必须使所有的

OpenTSDB介绍

OpenTSDB 2.0, the scalable, distributed time series database可扩展.分布式时间序列数据库 1.背景 一些老的监控系统,它常常会出现这样的问题: 1)中心化数据存储进而导致单点故障. 2)有限的存储空间. 3)数据会因为时间问题而变得不准确. 4)不易于定制图形. 5)不能扩展采集数据点到100亿级别. 6)不能扩展metrics到K级别. 7)不支持秒级别的数据. OpenTSDB解决上面的问题: 1.它用hbase存储所有的时序(无须