数据库(database)是有组织的数据集合。
关系数据库是遵循关系理论的数据库。严格意义上地说是模式( schemas)表格( tables),查询( queries,,报告(reports),视图( views)和其他元素的集合。关系数据库用数学中的集合论来指导数据库的设计、存储和查询等过程。
数据库管理系统(DBMS)是一种计算机软件应用程序,用于终端用户,应用程序和数据库本身进行交互以获取和分析数据。通用数据库管理系统允许定义,创建,查询,更新和管理数据库。
通常意义上我们说的数据就是关系数据库,数据库也实际上指的是DBMS,比如常见的Oracle、DB2、sql server、mysql,PostgreSQL等。
数据库的发展其实经历了三个大的阶段
导航数据库的记录和对象是通过链接其他对象的引用进行查询。
导航数据库分为 网络模型和层级模型两种。
网络数据库:
层级模型是以树形结构组织数据的,每个子节点只会拥有唯一的父节点,比如IBM的IMS数据库以及常用LDAP数据库就属于层级模型。
上世纪70年代埃德加·科德(Edgar Frank Codd) 处于对导航模型CODASYL方法数据的,特别是“搜索”功能的严重欠缺,他撰写了一篇划时代的论文《大型共享数数据的关系模型》(A Relational Model of Data for Large Shared Data Banks)发表在《ACM通讯》上,在论文中首次提出了关系模型的概念。关系模型对数据的设计和存储提出了一定的规范,最主要的是要符合范式:
1NF: 字段是最小的的单元不可再分;
2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到);
3NF:满足2NF,非主键外的所有字段必须互不依赖;
4NF:满足3NF,消除表中的多值依赖;
一般来说关系模型必须符合到第三季模式。
关系数据库最重要是,也是第一流行的原因还主要是SQL语言的发张和流行,而SQL语言也来源于科德的贡献,他最初版本叫 SEQUEL。
由于埃德加·科德的杰出贡献,现在尊称他为“关系数据库之父”,于1981年获得ACM图灵奖。
NoSQL数据库结构简单,无固定的表模式,存储非规格化的数据可以避免搜索中连接操作从而实现快速读写。NoSQL设计时候考虑可以实现水平扩展。
最流行的NoSQL系统包括MongoDB,Couchbase,Memcached,Redis,CouchDB, Cassandra和HBase等等,基本上都是开源软件。
NewSQL是一类现代关系数据库,旨在为在线事务处理(读写)工作负载提供与NoSQL系统相同的可扩展性能,同时仍然使用SQL并维护传统数据库系统的ACID保证。这些数据库包括Google F1,Spanner,Citus,CockroachDB,TiDB,ScaleBase,MemSQL,NuoDB和VoltDB等。
在上面的第二部分我们介绍了两者特地,这里再概括下:
关系数据库,结构严谨、符合关系理论,可以存储结构化数据;支持比较复杂的数据关系关联查询;支持事务,可以保障数据安全;支持SQL语言做操作。
NoSQL: 结构简单、健值对关系,而且大多数都是直接存内存的,所以具有很高的性能;而且结构简单支持水平扩展;大多数都是开源,可以免费试用。
mogondb、redis和memcached可能是用的最多的的NoSQL数据库了。关于redis和memcached笔者有另一个问答做过比较,现在在介绍下mongodb和redis:
我们知道redis支持有几类的数据结构包括字符串、哈希,列表、数据集和有序数集合等数据类型,而mongodb则支持更多更丰富是数据类型,还支持索引,比较接近于关系型数据库,支持丰富的查询语句(大多数sql语句都有类似的语句表达,虽然比较别扭)。
mongodb存采用的文件存储,比较适合大数据量存储,依靠os虚拟内存,采用镜像文件存储;内存占用率比较高。redis数据存储在内存中,对内存要求较高,支持数据持久化到文件。
mongodb支持主从结构,复制集集群。其中官方推荐复制集群,具有自动故障恢复,自动分片,auto sharding机制。redis支持主从,但是严重依赖持久化的快照,而且增量恢复做的不好,很多时候恢复主从需要全量快照复制
mongodb不支持事务,redis支持一定的事务
所以选择来看,mongodb适合作为替代关系数据库比如mysql sqlserver等作为线上数据库用,而redis还主要适合用于做缓存。
联系客服