文章目录
数据库
数据库,又称为数据管理系统,是处理的数据按照一定的方式储存在一起,能够让多个用户共享、尽可能减小冗余度的数据集合。
各种各样的数据系统组件:
数据库:存储数据,以便自己或其他应用程序之后能再次找到(PostgreSQL,MySQL,Oracle)
缓存:记住开销昂贵操作的结果,加快读取速度(Redis,Memcached)
搜索索引:允许用户按关键字搜索数据,或以各种方式对数据进行过滤(ElasticSearch)
流处理:向其他进程发送消息,进行异步处理(Kafka,Flink,Storm)
批处理:定期处理累积的大批量数据(Hadoop)
数据库分类
数据库,又称为数据管理系统,是处理的数据按照一定的方式储存在一起,能够让多个用户共享、尽可能减小冗余度的数据集合。
数据库可以分为关系数据库(SQL)和非关系型数据库(NoSQL)。
SQL 和 NoSQL 有什么区别?
SQL 数据库 | NoSQL 数据库 | |
---|---|---|
数据存储模型 | 结构化存储,具有固定行和列的表格 | 非结构化存储。文档:JSON 文档,键值:键值对,宽列:包含行和动态列的表,图:节点和边 |
发展历程 | 开发于 1970 年代,重点是减少数据重复 | 开发于 2000 年代后期,重点是提升可扩展性,减少大规模数据的存储成本 |
例子 | MySQL、MariaDB、Percona Server、PostgreSQL、Microsoft Access、Google Fusion Tables、SQLite、DB2、FileMaker、Oracle、SQL Server、INFORMIX、Sybase、dBASE、Clipper、FoxPro、foshub。 | Redis:键值数据库 MongoDB:文档数据库 HBase:列存储数据库 Neo4J : 图形数据库 Memcache、BigTable、Cassandra、CouchDB |
优势 | 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、支持复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 | 1、格式灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性; 4、成本低:nosql数据库部署简单,基本都是开源软件。 |
劣势 | 1、读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度不足; 3、难以高并发读写需求。 | 1、不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。 |
ACID 属性 | 提供原子性、一致性、隔离性和持久性 (ACID) 属性 | 通常不支持 ACID 事务,为了可扩展、高性能进行了权衡,少部分支持比如 MongoDB 。不过,MongoDB 对 ACID 事务 的支持和 MySQL 还是有所区别的。 |
性能 | 性能通常取决于磁盘子系统。要获得最佳性能,通常需要优化查询、索引和表结构。 | 性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。 |
扩展 | 垂直(使用性能更强大的服务器进行扩展)、读写分离、分库分表 | 横向(增加服务器的方式横向扩展,通常是基于分片机制) |
查询语法 | 结构化查询语言 (SQL) | 数据访问语法可能因数据库而异 |
关系型数据库
Oracle
Oracle数据库是甲骨文公司推出的一个数据库管理系统。Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。
优点:
- Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
- 获得最高认证级别的 ISO 标准认证,安全性高。
- 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
- 多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
- 完全向下兼容,因此被广泛应用,且风险低 。
向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。
缺点:
- 对硬件的要求高
- 价格比较昂贵
- 管理维护麻烦
- 操作比较复杂
Access
Microsoft Office Access是由微软发布的小型关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是Microsoft Office 的系统程序之一。
MS ACCESS以它自己的格式将数据存储在基于Access Jet的数据库引擎里。它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。
优点:
- 存储方式简单,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户的操作和管理。
- Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。
- 界面友好、易操作。Access 是一个可视化工具,风格与 Windows 完全一样,用户想要生成对象应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。
- 集成环境,可以处理多种数据信息。Access 基于 Windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。
- 支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。
缺点:
- 不支持并发处理。
- 数据库存储量小安全性不够高。
- Access 是小型数据库,当数据量过大时,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。
- 虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在10-20个用户。
- 单表记录数过百万时,性能就会变得较差,如果加上设计不良,这个限度还要降低。
- 不能编译成可执行文件(.exe),必须要安装 Access 运行环境才能使用。
DB2
DB2是IBM一种分布式数据库解决方案。DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的大型关系型数据库管理系统。它支持多用户或应用程序在同一条SQL 语句中查询不同database甚至不同DBMS中的数据。主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境。
优点:
- 相比较 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模地应用程序执行能力,具有与平台无关的基本功能和 SQL 命令。
- DB2 采用了数据分级技术,能够使大型数据很方便的下载到数据库服务器,使数据库本地化和远程连接透明化。
- 拥有非常完备的查询优化器,改善了查询性能,并支持多任务并行查询。
- 具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统更加使用。
- DB2 可跨平台使用。
缺点:
- 配置文件和参数多,且命名不规范。
- 一些 DB2 产品开发不方便。
- 和 Oracle 相比,命令多,且没 Oracle 统一规范的好。
- 由于其设计框架的问题,如果用户对数据库的本身优化和应用程序优化做的不足,那么 DB2 容易出现锁等待现象。
MongoDB
MongoDB 创立于2007年,被称为“数据库巨头”。 由 DoubleClick, ShopWiki 和 Gilt Groupe 背后的开发人员开发,并由 Fidelity Investments, Goldman Sachs Group,Inc.,Intel Capital 这些机构投资。自成立以来,MongoDB 已经被下载了 2 亿次,并且有超过 1000 个合作伙伴支持。这些合作伙伴致力于这个免费的开源解决方案,他们相信编码与数据库应该是简单而自然的。
优点:
- 文件验证
- 加密存储引擎
- 具有内存存储引擎(beta)的实时应用程序
- 减少主要故障恢复的时间
缺点:
- 不适合需要处理复杂事务的应用程序
MySQL
MySQL是一个关系型数据库管理系统,MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、开放源码等特点,一般中小型网站的开发都选择MySQL作为网站数据库。
优点:
- 性能卓越服务稳定,很少出现异常宕机
- 开放源代码且无版权制约,自主性强、使用成本低。
- 历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
- 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
- 支持多种操作系统,提供多种 API 接口,支持多种开发语言。
缺点:
- MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
- MySQL 不允许调试存储过程,开发和维护存储过程很难。
- MySQL 不支持热备份。
- MySQL 的价格随平台和安装方式变化
MariaDB
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。MariaDB是发展最快的MySQL分支版本。
优点:
- 高可扩展性,易于集成
- 能够实时访问
- 具备 MySQL 的核心功能(MariaDB 是 MySQL 的替代方案)
- 备用存储引擎,服务器优化和补丁
- MariaDB 已经运作了20多年的广泛知识库
缺点:
- 缺少密码复杂性插件
- 没有 memcached 界面
- 没有优化器跟踪
SQL Server
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。主要应用于大型的管理系统中。
优点:
- 与微软的 Windows 系列操作系统的兼容性很好。
- 高性能设计,可充分利用 WindowsNT 的优势。
- 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置。
- 强壮的事务处理功能,采用各种方法保证数据的完整性。
- 支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。
缺点:
- SQL Server 只能在 Windows 系统上运行,没有丝毫开放性。
- 没有获得任何安全证书。
- 多用户时性能不佳 。
- 只支持 C/S 模式,SQL Server C/S 结构只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接
SQLite
SQLite,是一款轻型的数据库,它是D.RichardHipp建立的公有领域项目。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。
优点:
- 没有单独的服务器进程
- 文件格式是跨平台的
- 紧凑型库:运行速度比更大内存的还要快
- 符合 ACID 原则,可提供专业支持
缺点:
- 不适用于:客户端/服务器应用程序、大容量网站、大数据集、高并发性
PostgreSQL
PostgreSQL 拥有超过 15 年的积累,是另一个明星级开源选择,运行于所有主要的操作系统,包括Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和 Windows。 PostgreSQL 还完全符合 ACID 要素(原子性,一致性,隔离性,持久性)。
PostgreSQL 是一款富有特色的自由数据库管理系统,甚至可以说是最强大的自由软件数据库管理系统。该数据库管理系统支持了目前世界上最丰富的数据类型。是自由软件数据库管理系统中唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的自由软件。
优点:
- PostgreSQL 遵循的是 BSD 协议,是一个完全开源、免费、同时非常强大的关系型数据库。
- 与 PostgreSQL 配合的有很多分布式集群软件,如 pgpool、pgcluster、slony、plploxy 等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这些 MySQL 则比较难实现。
- PostgreSQL 源代码写的很清晰,易读性比 MySQL 强,所以很多公司基本都是以 PostgreSQL 做二次开发的。
- PostgreSQL 是多进程的,而 MySQL 是多线程的。并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL 的总体处理性能不如 PostgreSQL,原因是 MySQL 的线程无法充分利用 CPU 的能力。
- PostgreSQL 有很强大的查询优化器,支持很复杂的查询处理。
- 框架允许定义和创建自定义数据类型,创建自定义数据类型和查询方法
缺点:
- 对于简单而繁重的读取操作,相比较其它数据库来说,PostgreSQL 性能较低。
- PostgreSQL 数据库扩容花费时间很长。
其他
SQL
SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便。
Sybase
Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。
VF
VF一般是指visual foxpro。visual foxpro是Microsoft公司是一款快速处理数据的桌面型数据库开发软件。主要用于开发数据管理与运算等方面。visual foxpro独具特色的数据库容器提供了集中的数据管理功能,它支持面向对象的编程方法,可生成真正事件驱动的应用程序,与其他应用程序共享和交换数据,具有客户/服务器能力。