精华内容
下载资源
问答
  • 关系型数据库和非关系型数据库 组内使用数据库为关系型数据库oracle,现在市场上出现了更为流行的关系型数据库诸如Mysql/MariaDB、PostgreSql、PPAS(增强型PostgreSql),以及当前在大数据框架中比较流行的非关系型...

     

    系统集成组数据库调研对比文档

    1. 关系型数据库和非关系型数据库

    组内使用数据库为关系型数据库oracle,现在市场上出现了更为流行的关系型数据库诸如Mysql/MariaDB、PostgreSql、PPAS(增强型PostgreSql),以及当前在大数据框架中比较流行的非关系型数据库诸如Redis、MongoDB等。

    首先从大的框架进行对比,关系型数据库和非关系型数据库之间的区别,以及两者使用的场景。这两种数据库理论上不应被用来进行对比,两者的侧重点不同,只能说在不同的场景下谁更适合而已。非关系型数据库理的论诞生其实也是因为传统的数据库在某些日益增长的数据量需求面前显得稍微乏力。两者不存在孰优孰劣,根据业务进行选择。

    关系型数据库的特点:

    - 高度组织化结构化数据 
    - 结构化查询语言(SQL) (SQL) 
    - 数据和关系都存储在单独的表中。 
    - 数据操纵语言,数据定义语言 
    - 严格的一致性
    - 基础事务

    非关系型数据库的特点:

    - 代表着不仅仅是SQL
    - 没有声明性查询语言
    - 没有预定义的模式
    -键 - 值对存储,列存储,文档存储,图形数据库
    - 最终一致性,而非ACID属性
    - 非结构化和不可预知的数据
    - CAP定理 
    - 高性能,高可用性和可伸缩性

     

    下面通过几个概念的介绍,将关系型和非关系型进行对比,说明为何两者分别具备上述特点:

      1. 数据结构

    先用一张实例图大概说明关系型数据库和非关系型数据库在存储结构上的区别:

    非关系型数据库是一种基于健值对K-V形式的数据存储结构,类似于Hash表,提供索引和值。在非关系型数据库中不再需要提前定义表(在NoSql中称作集合)的结构,可以将完全不同的数据结构插入到集合中(但一般插入同一集合的数据有一定关联性),如下图:

    这就是非关系型数据库的数据结构不固定的特点,这为他本身的分布式存储及扩展性提供了较好的基础,但缺点是不便于对整个存储的理解。

    而传统的关系型数据库的特点表结构,虽然对后续的信息扩展带来不便。但是基于表结构的关系模型使得存储更容易理解,贴近逻辑世界。同时关系模型提供的丰富的完整性(实体完整性、参照完整性和用户定义的完整性),使得维护方便,大大减低了数据冗余和数据不一致的概率。

      1. 读写性能、并发性能

    在谈读写性能之前需要先说事务性的概念,事务特性可以说是关系型数据库最大的特点,不客气的说应该是区分关系型和非关系型数据库的主要特性。非关系数据库为了高并发和可扩展的性能,对事务特性进行了牺牲,比如弱一致性,后面将会说明非关系型数据本身的特性(CAP定理、BASE特性)。了解关系型数据库的事务特性,对我们进行数据库的选型有决定性的意义。

        1. 关系型数据库ACDI特性

    ACDI特性包括:原子性、一致性、隔离性、永久性

    原子性:原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

    比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

    一致性:一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

    例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

    独立性:所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

    比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

    持久性:持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

        1. 非关系型数据库BASE特性

    谈非关系型数据库的BASE特性之前,先了解CAP定理:

    在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

    • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
    • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
    • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

    CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

    因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

    • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
    • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
    • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

     

    BASE特性:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

    • Basically Availble --基本可用
    • Soft-state --软状态/柔性事务。 "Soft state" 可以理解为"无连接", "Hard state" "面向连接"
    • Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

     

    从上面介绍的三个理论事务特性、CAP定理和BASE特性,在综合对比自己的系统所需要的特性,作为数据库选型的一个参考。

        1. 综述

    关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

    但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

    相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。

      1. 扩展性能

    扩展性能主要分为横向扩展和纵向扩展,纵向扩展主要是指提高单台物理机器的性能,以满足更大的数据需求以及并发的应用场景。横向扩展则是指在面对大数据和高并发的场景之下,可以方便的通过扩展物理机的数量,从而达到使用需求。

    扩展性涉及到的相关概念有分布式系统和分布式的存储算法、分区及分片,其中分布式系统和分布式的存储算法概念都比较大,建议可以通过网络了解,在本文档中主要简单介绍一下分区和分片的概念,为后面对比关系型和非关系型数据库的扩展性能提供一定理论名词基础。

        1. 数据切分Sharding

    数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。

    垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

    水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

        1. Sharding切分:Mysql vs MongoDB

    MongoDB:由于前面说的数据结构不存在严格的关联性,数据之间耦合程度较低,这为非关系型Nosql的扩展性能提供了先天的优势。MongoDB数据库本身就集成了分片的功能。通过增加配置前端路由的节点,让整个集群看上去像单一数据库,前端应用可以透明使用。

    Mysql:关系型数据库Mysql为了达到切分的功能,目前主流的方式是使用中间件,或者叫中间代理层,常用的譬如官方的MySqlProxy、谷歌团队的Hibernate Shards、基于java开发的Amoeba、基于java的HiveDB等。

    因此,在扩展性上,非关系型数据库确实会存在天然的优势。但关系型数据库通过开源框架的中间件配合,也可以达到切分效果,对业务进行分布式的管理。

      1. 其他特性

    SQL语句的支持:非关系型数据库不支持SQL语句,这对于长期使用关系型数据库的SQL语句的人员来说,适应其新的语法也将花不少时间。

           以非关系型数据库MongoDB中对文档进行查询(更新某一条记录)为例:

    1. 关系型数据库MariaDB(MySql)

    MariaDB是MySQL源代码的一个分支,在意识到Oracle会对MySQL许可做什么后分离了出来(MySQL先后被Sun、Oracle收购)。除了作为一个Mysql的“向下替代品”,MariaDB包括的一些新特性使它优于MySQL。

    可以说MariaDB大部分兼容mysql的数据库,基本上原有的基本上原有的mysql写法和特性都支持。除非应用的性能非常高端,否则很难发现有不兼容的地方。

    另外就是在Centos7及以上的操作系统版本中,默认在软件列表中提供的数据库有Mysql变为了MariaDB。

      1. MariaDB在Centos7下的安装

    安装命令

    #yum -y install mariadb mariadb-server

    安装完成MariaDB,首先启动MariaDB

    #systemctl start mariadb

    设置开机启动

    #systemctl enable mariadb

    接下来进行MariaDB的相关简单配置

    #mysql_secure_installation

    首先是设置密码,会提示先输入密码

    Enter current password for root (enter for none):<–初次运行直接回车

    设置密码

    Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
    New password: <– 设置root用户的密码
    Re-enter new password: <– 再输入一次你设置的密码

    其他配置

    Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

    Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

    Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

    Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

    初始化MariaDB完成,接下来测试登录

    #mysql -uroot -ppassword

    完成。

      1. MariaDB在Centos7下的配置

    配置MariaDB的字符集:

    编辑文件/etc/my.cnf

    vi /etc/my.cnf

    在[mysqld]标签下添加

    init_connect='SET collation_connection = utf8_unicode_ci'

    init_connect='SET NAMES utf8'

    character-set-server=utf8

    collation-server=utf8_unicode_ci

    skip-character-set-client-handshake

     

    编辑文件/etc/my.cnf.d/client.cnf

    vi /etc/my.cnf.d/client.cnf

    在[client]中添加

    default-character-set=utf8

    文件/etc/my.cnf.d/mysql-clients.cnf

    vi /etc/my.cnf.d/mysql-clients.cnf

    在[mysql]中添加

    default-character-set=utf8

     全部配置完成,重启mariadb

    #systemctl restart mariadb

    之后进入MariaDB查看字符集

    mysql> show variables like "%character%";show variables like "%collation%";

    显示为


    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client    | utf8                      |
    | character_set_connection | utf8                      |
    | character_set_database  | utf8                      |
    | character_set_filesystem | binary                    |
    | character_set_results    | utf8                      |
    | character_set_server    | utf8                      |
    | character_set_system    | utf8                      |
    | character_sets_dir      | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    +----------------------+-----------------+
    | Variable_name        | Value          |
    +----------------------+-----------------+
    | collation_connection | utf8_unicode_ci |
    | collation_database  | utf8_unicode_ci |
    | collation_server    | utf8_unicode_ci |
    +----------------------+-----------------+
    3 rows in set (0.00 sec)

    字符集配置完成。

      1. MariaDB在Centos7下C++的数据库连接方式
        1. 采用驱动进行连接

    通过Driver的方式,这种方法的优点是可以结合各种面向对象的数据库访问技术(ADO, ODBC, JDBC等等),只要配置好不同的驱动,同样的代码可以访问各种不同的数据库;缺点就在于驱动的安装和配置不是一般的麻烦,还要考虑数据库版本和驱动版本兼容性的问题。

        1. 采用数据库自带的C API连接

    相比于ADO之类的方法,这种方式不用配置驱动,因此也没有反人类的版本兼容性问题。另外在综合处理单元中已经有现成的mysql的连接接口,也是采用数据库自带的接口方式进行连接。

    若编译出错则运行命令yum install mysql-devel安装对应的开发环境。

    编译:

    #g++  -L /usr/lib64/mysql/ mariadbtest.cpp -o mariadbtest –lmysqlclient

    运行:

    ./mariadbtest

    登录数据库查询对应记录:

    给出数据库的操作接口函数:

    mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。  
    mysql_close() 关闭一个服务器连接。  
    mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。  
    mysql_change_user() 改变在一个打开的连接上的用户和数据库。  
    mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。  
    mysql_data_seek() 在一个查询结果集合中搜寻一任意行。  
    mysql_debug() 用给定字符串做一个DBUG_PUSH。  
    mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。  
    mysql_dump_debug_info() 让服务器将调试信息写入日志文件。  
    mysql_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。  
    mysql_errno() 返回最近被调用的MySQL函数的出错编号。  
    mysql_error() 返回最近被调用的MySQL函数的出错消息。  
    mysql_escape_string() 用在SQL语句中的字符串的转义特殊字符。  
    mysql_fetch_field() 返回下一个表字段的类型。  
    mysql_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。  
    mysql_fetch_fields() 返回一个所有字段结构的数组。  
    mysql_fetch_lengths() 返回当前行中所有列的长度。  
    mysql_fetch_row() 从结果集合中取得下一行。  
    mysql_field_seek() 把列光标放在一个指定的列上。  
    mysql_field_count() 返回最近查询的结果列的数量。  
    mysql_field_tell() 返回用于最后一个mysql_fetch_field()的字段光标的位置。  
    mysql_free_result() 释放一个结果集合使用的内存。  
    mysql_get_client_info() 返回客户版本信息。  
    mysql_get_host_info() 返回一个描述连接的字符串。  
    mysql_get_proto_info() 返回连接使用的协议版本。  
    mysql_get_server_info() 返回服务器版本号。  
    mysql_info() 返回关于最近执行得查询的信息。  
    mysql_init() 获得或初始化一个MYSQL结构。  
    mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。  
    mysql_kill() 杀死一个给定的线程。  
    mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。  
    mysql_list_fields() 返回匹配一个简单的正则表达式的列名。  
    mysql_list_processes() 返回当前服务器线程的一张表。  
    mysql_list_tables() 返回匹配一个简单的正则表达式的表名。  
    mysql_num_fields() 返回一个结果集合重的列的数量。  
    mysql_num_rows() 返回一个结果集合中的行的数量。  
    mysql_options() 设置对mysql_connect()的连接选项。  
    mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。  
    mysql_query() 执行指定为一个空结尾的字符串的SQL查询。  
    mysql_real_connect() 连接一个MySQL服务器。  
    mysql_real_query() 执行指定为带计数的字符串的SQL查询。  
    mysql_reload() 告诉服务器重装授权表。  
    mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。  
    mysql_row_tell() 返回行光标位置。  
    mysql_select_db() 连接一个数据库。  
    mysql_shutdown() 关掉数据库服务器。  
    mysql_stat() 返回作为字符串的服务器状态。  
    mysql_store_result() 检索一个完整的结果集合给客户。  
    mysql_thread_id() 返回当前线程的ID。  
    mysql_use_result() 初始化一个一行一行地结果集合的检索。

    1. 关系型数据库PostgreSQL

    首先看一张图,mysql标榜的是最流行(most popular)的数据库,而postgresql标榜的则是最先进的(most advanced)的数据库。可以反馈出当前市场上对两款数据库的评价。流行偏重的是使用基数大,数据库的性能可以说是满足绝大部分应用场景。Postgresql的最先进则偏重技术层面,譬如更多数据类型存储支持(Array和json)、默认事务隔离级别并发性支持好、FDW(用统一的SQL,访问其他关系型数据库或者NoSQL以及一些数据库存储引擎方面的优化。

      1. PostgreSQL数据库vs MySql数据库

    以下摘自知乎:

    一、PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
    二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
    三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。

    四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。
    五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
    六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。
    七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
    八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
    九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
    十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)

    最后说一下我感觉 PG 不如 MySQL 的地方。
    第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。
    第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,
    第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
    第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.
    第五点,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。

    另外一些:
    pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。
    说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。
    对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。
    另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。
    很多pg应用也是24/7的应用,比如skype. 最近几个版本VACUUM基本不影响PGSQL 运行,8.0之后的PGSQL不需要cygwin就可以在windows上运行。
    至于说对于事务的支持,mysql和pgsql都没有问题。

      1. PostgreSQL在Centos7下面的安装

    登录postgresql官网选择对应系统后及需要安装版本之后,官网会给出通过yum安装的命令,按照命令一步步执行即可。下面以安装最新版本Postgresql 10为例进行简要说明:

    https://www.postgresql.org/download/linux/redhat/

      1. PostgreSQL在Centos7下面配置使用

    A、设置环境变量

        # vim /etc/profile.d/prs7000env.sh
            export PATH=/usr/pgsql-10/bin:$PATH
            export LD_LIBRARY_PATH=/usr/pgsql-10/lib:$LD_LIBRARY_PATH
        # source /etc/profile.d/prs7000env.sh

    B、重启服务

        # systemctl restart postgresql-10

     C、修改用户密码

    yum安装postgresql,默认会建一个名为”postgres”的系统账号,用于操作PogreSQL数据库。(PostgreSQL只支持在postgres的账户下操作,root用户无权操作)

        # su - postgres

    切换用户后,提示符变更为“-bash-4.2$”;同时数据库中也会生成一个名为”postgres”的数据库用户,且密码已自动生成;PostgreSQL在数据库用户同名的系统账号下登录免密;

        #psql -U postgres

    进入数据库后修改密码;

       postgres=# alter user postgres with password 'nari'

     D、简单使用

    1)创建用户

    postgres=# create user jeremiah with password 'nari';
    2)创建数据库同时指定数据库的所有者
    postgres=# create database testdb owner jeremiah;
    3)数据库赋权未赋权则账户只能登录控制台
    postgres=# grant all privileges on database testdb to jeremiah;

    4)退出使用新建账号登录新建数据库

    -bash-4.2$ psql -U jeremiah -d testdb

    此处登录若提示对用户的认证失败,则需要更改配置文件,将下面文件中的图示位置处由原来的peer给为md5.

    vim /var/lib/pgsql/10/data/pg_hba.conf

    重启数据库服务:

    Systemctl restart postgresql-10

    5)创建表

    postdb1=> create table tb1(
              id int primary key,
              name VARCHAR(20), 
              salary real
              );
    6)插入数据
    postdb1=> insert into tb1(
              id, name, salary)
              values(
              101, 'Mike', 5000.00
              );
    7)查询
    postdb1=>select * from tb1;
      1. PostgreSQL在Centos7下C++的数据库连接方式

    C/C++连接PostgreSQL,使用libpqxx库,这是官方的C++客户端API用于连接PostgreSQL。

    通过开发库的使用,可以比较快捷的进行C++下PostgreSql数据库实例的连接,以下来自于参考网址:http://www.yiibai.com/html/postgresql/2013/080894.html

    A、安装

    libpqxx最新版本的可供下载链接下载libpqxx。所以下载的最新版本,并遵循以下步骤:Download Libpqxx

    wget http://pqxx.org/download/software/libpqxx/libpqxx-4.0.tar.gz
    tar xvfz libpqxx-4.0.tar.gz
    cd libpqxx-4.0
    ./configure
    make
    make install yiibai.com 

    注意:若执行./configure提示如下错误,则需要先安装PostgreSql的开发环境。

    yum –y install postgresql-devel

    B、编译测试

    编译:

    #g++ test.cpp -lpqxx -lpq -o test

    运行:

    ./test

    登录数据库查询对应记录,成功写入。

    以下是重要接口例程可满足工作需求与PostgreSQL数据库的C/C + +程序:

    S.N.

    API & 描述

    1

    pqxx::connection C( const std::string & dbstring )
     

    这是将用于连接到数据库一个类型定义。这里dbstring提供所需要的参数,例如连接到数据库 dbname=testdb user=postgres password=pass123 hostaddr=127.0.0.1 port=5432.

    如果连接设置成功,那么它创建C与连接对象提供各种有用的函数公共函数。

    2

    C.is_open()
     

    is_open()是一个连接对象的公共方法,并返回布尔值。如果连接处于活动状态,则此方法返回true,否则返回false

    3

    C.disconnect()
     

    使用此方法打开的数据库连接断开。

    4

    pqxx::work W( C )
     

    这是一个类型定义将用于创建一个事务对象,使用C连接方式,最终将被用于执行SQL语句的事务模式。

    如果交易对象被创建成功,那么它被分配到变量W,这将被用来访问相关的事务性对象的公共方法。

    5

    W.exec(const std::string & sql) 
     

    这种从事务对象的公共方法将被用于执行SQL语句。

    6

    W.commit()
     

    这种从事务对象的公共方法将用于提交事务。

    7

    W.abort()
     

    这种从事务对象的公共方法将用于回滚事务。

    8

    pqxx::nontransaction N( C )
     

    这是一个类型定义,被用来创建使用C连接方式,最终将被用于在非事务性模式下执行SQL语句的非事务性对象。

    如果交易对象被创建成功,那么它被分配到变量N将用于访问相关的非事务性对象的公共方法。

    9

    N.exec(const std::string & sql) 
     

    从非事务性对象的公共方法将被用于执行SQL语句,并返回一个结果对象,这实际上是一个的迭代器返回的记录。

     

    1. 非关系型数据库MongoDB

    MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。其旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    MongoDB的主要功能特性有:

    1)面向集合存储,易存储对象类型的数据;

    2) 支持RUBYPYTHONJAVAC++PHPC#等多种语言;

    3) 文件存储格式为BSON(一种JSON的扩展);

    4) 使用高效的二进制数据存储,包括大型对象(如视频等)。

    1. 综述

    若考虑稳定开发,推荐使用mysql/mariadb,数据库本身性能足以满足当前业务需

    要,后续可以配合中间件进行数据库的分布式开发。

    若考虑进行新技术的尝试,可以考虑PostgreSQL数据库。

    不建议切换非关系型数据库。

     

     

    展开全文
  • 关系型数据库的发展历史

    千次阅读 2019-03-12 23:15:03
    数据库发展史 信息系统产生了海量的数据,有数据必须要有数据的存放位置, 无库时代 :没有专门的...非关系型数据库:为适应水平扩展性处理超大量的数据环境,近几年发展非常迅速的发展,衍生类型非常多。 本...

    数据库发展史

    信息系统产生了海量的数据,有数据必须要有数据的存放位置,

    无库时代 :没有专门的数据库,数据大多以文件形式存放

    层次状数据库 :使用层次状模型进行数据库设计和存放

    网状数据库 :使用网状模型进行数据库设计和存放

    关系型数据库 :使用关系型模型进行数据库设计和存放

    非关系型数据库:为适应水平扩展性和处理超大量的数据环境,近几年发展非常迅速的发展,衍生类型非常多。

     

    本文主要考虑对于OLTP和OLAP占据主流的关系型数据库,目前关系型数据库软件主要有:

    大型商用关系型数据库:Oracle,DB2,SQL Sever/Sybase;

    近年发展较快的开源关系型数据库:MySQL,PostgreSQL,SQLite
    关系型数据库主要人物与发展历史

    关系型数据库的发展,大致可分为理论奠基、SQL标准、商用成型、多家发展等几个阶段,在每个阶段都有对应的重要人物与贡献。

    首先是数学家E.F.Codd发表了数学论文《用于大型共享数据库的关系数据模型》,提出关系和关系运算的概念,奠定了关系型数据库的理论模型;

    然后是Codd的同事DonChamberlin将Codd的论文和关系运算,转换成为比较容易理解和使用的SQL语言,并且在后面成为所有关系型数据库的标准;

    有了上面的数据理论和SQL基础,LarryElision和他的同事看到商机,开发出第一个商用大型关系型数据库Oracle,Scott作为一个开发的员工,将其测试账户放在里面了;

    除了Oracle数据库,IBM也开发出了DB2数据库,但其他主流的关系型数据库都与Michael Stonebraker有关,开发了Postgres并放在BSD版权下,后来演变成了Postgres SQL;87年微软和Sybase合作,开发除了MS SQL和Sybase;后又加入Ingres和Informax,其他的主流关系型数据库几乎都和Michael Stonebraker有关。
    关系型数据库之父:E.F.Codd

    1970年,Codd划时代的论文《用于大型共享数据库的关系数据模型》


     Codd全关系系统十二准则

    准则0

    一个关系形的关系数据库系统必须能完全通过它的关系能力来管理数据库。

    准则1 信息准则

    关系数据库系统的所有信息都应该在逻辑一级上用表中的值这一种方法显式的表示。

    准则2 保证访问准则

    依靠表名、主码和列名的组合,保证能以逻辑方式访问关系数据库中的每个数据项。

    准则3 空值的系统化处理

    全关系的关系数据库系统支持空值的概念,并用系统化的方法处理空值。

    准则4 基于关系模型的动态的联机数据字典

    数据库的描述在逻辑级上和普通数据采用同样的表述方式。

    准则5 统一的数据子语言

    一个关系数据库系统可以具有几种语言和多种终端访问方式,但必须有一种语言,它的语句可以表示为严格语法规定的字符串,并能全面的支持各种规则。

    准则6 视图更新准则

    所有理论上可更新的视图也应该允许由系统更新。

    准则7 高级的插入、修改和删除操作

    系统应该对各种操作进行查询优化。

    准则8 数据的物理独立性

    无论数据库的数据在存储表示或存取方法上作任何变化,应用程序和终端活动都保持逻辑上的不变性。

    准则9 数据逻辑独立性

    当对基本关系进行理论上信息不受损害的任何改变时,应用程序和终端活动都保持逻辑上的不变性。

    准则10 数据完整的独立性

    关系数据库的完整性约束条件必须是用数据库语言定义并存储在数据字典中的。

    准则11 分布独立性

    关系数据库系统在引入分布数据或数据重新分布时保持逻辑不变。

    准则12 无破坏准则

    如果一个关系数据库系统具有一个低级语言,那么这个低级语言不能违背或绕过完整性准则。

     
    SQL之父:唐-钱伯林(Don Chamberlin)

     

    唐·钱伯林(DonChamberlin),是IBM Fellow,ACM及IEEE 特别会员。他是SQL关系数据库语言的发明人之一,也是XQuery语言的设计基础Quilt语言的发明人之一。Don拥有加利福尼亚大学博士学位。他目前在IBM Almaden 研究中心工作,在过去几年中,他代表IBM参与W3C XML Query工作组的工作。


    Scott和他的猫的故事

    第一个商用关系型数据库——Oracle

     

    左起 Ed Oates、Bruce Scott、Bob Miner、Larry Ellison

     

    Oracle与Larry Ellison

     
    主流数据库的奠基人——Michael Stonebraker

    Michael Stonebraker,SQL Server/Sysbase奠基人。

    著名的数据库科学家,他在1992 年提出对象关系数据库模型在加州伯克利分校计算机教授达25年。在此期间他创作了Ingres,Illustra, Cohera, StreamBase Systems和Vertica等系统。Stonebraker教授也曾担任过Informix的CEO,目前他是MIT麻省理工学院客席教授。

    Stonebraker 教授领导了称为Postgres的后Ingres项目。这个项目的成果非常巨大,在现代数据库的许多方面都做出的大量的贡献。Stonebraker 教授还做出了一件造福全人类的事情,那就是把Postgres 放在了BSD 版权的保护下。如今Postgres名字已经变成了PostgreSQL,功能也是日渐强大。

    87年左右,Sybase联合了微软,共同开发SQL Server。原始代码的来源与Ingres有些渊源。后来1994年,两家公司合作终止。此时,两家公司都拥有一套完全相同的SQLServer代码。可以认为,Stonebraker教授是目前主流数据库的奠基人。

     

    1973 年 IBM 启动了 System R 项目,项目组发表了一系列关于关系数据库的的文章。两个伯克莱大学的科学家,Michael Stonebraker 和 Eugene Wong 读了这些文章后非常感兴趣,于是决定自己启动一个关系数据的研究项目。他们已经为一个地理数据库系统申请到了资金,他们称为 ingres,意思是交互式图形获取系统

    Ingres的代码是可以免费获得的,到 1980 年止,共分发了 1000 份拷贝,不少公司使用这些代码形成了自己的产品线。Informix 是最早的用户之一,并且其员工完全是 Ingres 项目的人员。他们在 1984 发布了基于 Ingres 的第一版产品,到 1997 年已经成了第二大数据库供应商。然而,一系列管理和财会方面的失误在短短两年内毁了公司的信誉,并于 2000 年被 IBM 收购。

     

    Robert Epstein 在伯克立大学项目中的重要的程序员,创建了 Britton-Lee,后来的 Sybase,Sybase 在 80 到 90 年期间是第二号数据库产品,Sybase 于1992年将产品卖给微软,微软称之为 MSSQLServer。

    Stonebraker 自己离开了伯克立大学在1982年创建了Ingres 公司,Stonebraker 在这个公司工作到 1991 年,然后公司卖给了 ASK,1994年 ASK/ingres 被 CA Computer Associates 收购。2004 年 CA 在开源许可下发布了 Ingres release 3,并继续开发销售 Ingres。

    在返回 Berkeley 之后,Stonebraker 开始了一项后-Ingres 计划来致力于解决关系模型的数据库管理现有实现的局限性。其中主要的是它们不能让用户定义组合更简单域的新域(或者叫类型)(参见关系模型获得对术语域的解释。)结果的计划叫做 Postgres,以介入对增加完整的类型支持所需要的最小数目的特征为目标。其中包括定义类型的功能,还有完全描述联系的能力 - 联系至今已经广泛使用但仍由用户完全维护。在 Postgres 中数据库理解联系,并能以使用规则的自然方式在有关联的表中检索信息。详情请参见 PostgreSQL 的文章。在 1990 年 Stonebraker 再次离开 Berkeley 去商业化 Postgres,使用了名字 Illustra。Illustra 后来被 Informix 并购,而 Stonebraker 再次回去搞高等教育了。

     
    附录:主要关系型数据库厂商的发展历史
    数据库厂商的发展历史之Oracle

    所有这一切要从IBM的一篇论文谈起,1970年的6月,IBM公司的研究员埃德加·考特(Edgar Frank Codd) 在 Communications ofACM 上发表了那篇著名的《大型共享数据库数据的关系模型》(A Relational Model ofData for Large Shared Data Banks)的论文。这是数据库发展史上的一个转折。要知道,当时还是层次模型和网状模型的数据库产品在市场上占主要位置。从这篇论文开始,拉开了关系型数据库软件革命的序幕。IBM虽然1973年就启动了SystemR的项目来研究关系型数据库的实际可行性,也没有及时推出这样的产品,因为当时IBM的的IMS(著名的层次型数据库)市场不错,如果推出关系型数据库,牵涉到IBM很多人的自身利益。再者,IBM庞大复杂的官僚机构处在决策上远不那么灵活

    1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司(ORACLE公司的前身)。那个时候,32岁的Larry Ellison,这个读了三家大学都没能毕业的辍学生,还只是一个普通的软件工程师。公司创立之初,Miner是总裁,Oates为副总裁,而Ellison,因为一个合同的事情,还在另一家公司上班。没多久,第一位员工Bruce Scott(用过ORACLE数据库软件的人都知道有个Scott用户的吧?没错,就是这个Scott,至于Scott用户的密码Tiger,那是Scott养的猫的名字, Oracle也一直没有忘记她的第一位程序员)加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加·考特的那篇著名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和Miner预见到数据库软件的巨大潜力(跟着IBM走,没错),于是,SDL开始策划构建可商用的关系型数据库管理系统(RDBMS)。

    根据Ellison和Miner他们在前一家公司从事的一个由中央情报局投资的项目代码,他们把这个产品命名为ORACLE。因为他们相信,ORACLE(字典里的解释有“神谕, 预言”之意)是一切智慧的源泉。1979年,SDL更名为关系软件有限公司(Relational Software,Inc.,RSI),毕竟“软件开发实验室”不太像一个大公司的名字。1983年,为了突出公司的核心产品,RSI再次更名为ORACLE。Oracle从此正式走入人们的视野。

    RSI在1979年的夏季发布了可用于DEC公司的PDP-11计算机上的商用ORACLE产品,这个数据库产品整合了比较完整的SQL实现,其中包括子查询、连接及其他特性。出于市场策略,公司宣称这是该产品的第二版,但却是实际上的第一版。这就是Oracle这种“要命”的市场策略,事实上,这种策略有时候也是非常成功的。

    1983年3月,RSI发布了ORACLE第三版。Miner和Scott历尽艰辛用C语言重新写就这一版本。(说老实话,太佩服这两个大牛了,为什么一直没多少媒体宣传这两个人呢,怀疑Miner简直就是“少林老僧”般的人物。)要知道,C语言当时推出不久,用它来写ORACLE软件也是具有一定的风险的,但除此之外,别无他法。很快就证明了这样做是多么的正确:C编译器便宜而又有效,还有很好的移植性。从现在起,ORACLE产品有了一个关键的特性:[可移植性]。同样是1983年,IBM发布了姗姗来迟的Database 2(DB2),但只可在MVS上使用。不管怎么说,ORACLE已经占取了先机。

    在开发第三版还没有结束的时候,Scott离开了ORACLE。当时用C语言改写ORACLE的压力很大,无休止的软件调试终于让Scott不堪重负,选择了一走了之。把剩下的重担交给了Miner一个人。在出售了自己的4%的股票之后,Scott 后来创建了Gupta公司(现更名为Centura Software)和PointBase公司(提供百分之百纯Java嵌入式数据库),都是开发和数据库相关的产品。多年后有人问到他的4%的ORACLE股票的时候,Scott,这个曾经给ORACLE写出第一行代码的技术高手,也只能报以一笑了。如果能坚持下来,那是一笔几亿美金的财富。不过当时的Scott没有那么多的想法,他只是太累了。

    很长一段时间里,公司研发由Miner独力承担。Miner视金钱如无物,为人低调,和Ellison的锋芒必露形成鲜明的对比。在公司里,大家一致认为他是老好人,他也深受员工爱戴。Ellison是公司的大脑,Miner则当之无愧的成为公司的心脏。他是个沉默的英雄,正如Steve Jobs背后的Steve Wozniak一样。

    1984年10月,ORACLE发布了第4版产品。产品的稳定性总算得到了得到了一定的增强,用Miner的话说,达到了“工业强度”。

    在1985年,ORACLE发布了5.0版。有用户说,这个版本算得上是ORACLE数据库的稳定版本。这也是首批可以在Client/Server模式下运行的的RDBMS产品,在技术趋势上,ORACLE数据库始终没有落后。

    那是在1985年,当时曾经的最大的独立软件公司Cullinet(主要销售网状数据库)已经如流星般陨落。ORACLE的主要竞争对手是Ingres数据库。Ingres在加州大学伯克利分校诞生,主要的设计者是当时鼎鼎大名的MichaelStonebraker教授。可以说Ingres数据库软件是上个世纪80年代技术上最好的数据库,Ingres市场分额的快速增长已经给ORACLE早成了很大的压力。巧的是,这个时候,IBM公司再一次伸出“上帝之手”。

    Ingres使用的是Stonebraker 发明的QUEL(Query Language))的查询技术,这和IBM的SQL大不相同。在某些地方QUEL甚至要优于SQL。IBM当时担心Ingres把QUEL变成标准会对自己不利。经过一番衡量,决定把自己的SQL提交给数据库标准委员会。而Stonebraker教授可不打算把QUEL提交给数据库标准委员会,学院派的他认为这麽做实际上是扼杀了创新精神。可以看出,学院派,大都会把事情搞杂。

    1986年3月12日,ORACLE公司以每股15美元公开上市,当日以20.75美元收盘,公司市值2.7亿美元。3月13日,微软以每股21美元的发行价上市,以28美元收市,公司市值达到7亿美元。远远超过了ORACLE。成功的光环的微软和盖茨遮盖住了ORACLE和Ellison的光芒,可能这也是Ellison敌视微软的开始。

    ORACLE第6版于1988年发布。由于过去的版本在性能上屡受诟病,Miner带领着工程师对数据库核心进行了重新的改写。引入了行级锁(row-level locking)这个重要的特性,也就是说,执行写入的事务处理只锁定受影响的行,而不是整个表。这个版本引入了还算不上完善的PL/SQL(Procedural Language extension to SQL)语言。第6版还引入了联机热备份功能,使数据库能够在使用过程中创建联机的备份,这极大地增强了可用性。

    在第六版刚发布之后,很多迫不及待开始使用的用户就怨声载道。这是个根本就没有测试好就进行发布的产品(也怪Ellison,大话总要说在前头,只好自尝苦果)。用户开始对ORACLE大肆抨击,ORACLE的一些对手也开始落井下石,针对ORACLE产品的一些弱点进行攻击。

    噩梦延续到ORACLE第七版的推出而结束。这个公司已经空谈了好几年的新版本(一度被讥讽为不过是Ellison的故计重施而已),直到1992年6月才终于闪亮登场,这一次公司吸取了第六版匆忙上市的教训,听取了用户的多方面的建议,并集中力量对新版本进行了大量而细致的测试。该版本增加了许多新的性能特性:分布式事务处理功能、增强的管理功能、用于应用程序开发的新工具以及安全性方法。

    ORACLE 第七版是ORACLE真正出色的产品,取得了巨大的成功。这个版本的出现真是好时机,当时Sybase公司的数据库已经占据了不少份额,ORACLE借助这一版本的成功,一具击退了咄咄逼人的Sybase。公司的销售人员这次算到了给用户兑现空头许诺的时候。公司经过两三年的治理,终于摆脱了种种麻烦,重新开始健康发展,销售额也从92年的15亿美元变为四年后的42亿美元。  

    1997年6月,ORACLE第八版发布。ORACLE8支持面向对象的开发及新的多媒体应用,这个版本也为支持Internet、网络计算等奠定了基础。同时这一版本开始具有同时处理大量用户和海量数据的特性。

    1998年9月,ORACLE公司正式发布ORACLE 8i。“i”代表Internet,这一版本中添加了大量为支持Internet而设计的特性。这一版本为数据库用户提供了全方位的Java支持。ORACLE 8i成为第一个完全整合了本地Java运行时环境的数据库,用Java就可以编写ORACLE的存储过程。对,Java,只要是能够打击微软的武器,ORACLE都要派上用场。  

    在2001年6月的ORACLEOpenWorld大会中,ORACLE发布了ORACLE 9i。在ORACLE 9i的诸多新特性中,最重要的就是Real Application Clusters(RAC)了。说起ORACLE集群服务器,早在第五版的时候,ORACLE就开始开发ORACLE并行服务器(ORACLE Parallel Server ,OPS),并在以后的版本中逐渐的完善了其功能,不过,严格来说,尽管OPS算得上是个集群环境,但是并没有体现出集群技术应有的优点。

    2003年9月8日,旧金山举办的ORACLE World大会上,Ellison宣布下一代数据库产品为“ORACLE 10g”。ORACLE应用服务器10g(ORACLEApplication Server 10g)也将作为甲骨文公司下一代应用基础架构软件集成套件。“g”代表“grid ,网格”。这一版的最大的特性就是加入了网格计算的功能。(Oracle绝对是造概念的能手,只要是能引领出新的卖点,出些新概念,也是值得的)。

    最近两年,Oracle先后又收购了People soft(103亿$), BEA(80多亿$),还有Sibel之类的就不说了。通过收购,实力大增。

    2007年11月,Oracle 11g正式发布,功能上大大加强。11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(InformationLifecycle Management)等多项创新。大幅提高了系统性能安全性,全新的Data Guard最大化了可用性,利用全新的高级数据压缩技术降低了数据存储的支出,明显缩短了应用程序测试环境部署及分析测试结果所花费的时间,增加了RFID Tag、DICOM医学图像、3D空间等重要数据类型的支持,加强了对Binary XML的支持和性能优化。
    从Oracle的发展来看,它的市场策略直接引导着公司的发展。与别的公司有很大的不同。

     

     

     
    数据库厂商的发展历史之DB2

    1973年,IBM研究中心启动System R项目,为DB2的诞生打下良好基础。System R 是 IBM 研究部门开发的一种产品,这种原型语言促进了技术的发展并最终在1983年将 DB2 带到了商业市场。

    在这期间,IBM发表了很多数据库领域的精典论文,前边E.F.Codd就不说了,1976年, 身在IBM的Gim Gray发有了他的代表作:共享数据库的一致性和锁的粒度。他同样也是数据库领域的图灵奖获得之一。后来被微软挖走(应该是在他退休之后),去年他独自一人出海,失踪,不知下落如何。此君因为不喜欢Seattle的雨天,使得Bill Gates为拉他入Microsoft在San Francisco为其新建了一座研究院让他做院长。据说此君在一次学术会议上demo他的新程序,听众中有人提出界面可以如何改进,此君竟然在讲坛上就打开VC++开始改起代码来,然后给人看新效果。这样的大师,太让人尊敬了。

    1981年, E.F.Codd因为发明关系数据库模型,获得ACM图灵奖,当然他前边还有一位大师,Charles W.Bachman。

    1982年,IBM发布SQL/DS for VSE and VM,以System R为原型。

    1983年,发布Database2 (DB2) forMVS, 内部代号为"Eagle",于是DB2正式诞生。

    1986年,System/38 V7发布,首次配置查询优化器,能对应用的存取计划进行优化。

    1987年,DB2完成了到OS/2的扩展,进入微机领域。

    1988年,发布SQL/400,为AS/400服务器提供SQL支持。到此时为止,感觉IBM的数据库产品的发展十分凌乱,似乎同时在做多个产品,平台又不统一。

    1992年,IDUG大会在瑞士如开,DB2应用开始全球化。DB2 for OS2 V1和DB2 for RS/6000 V1推出,这是第一次在Intel和Unix平台上推出DB2产品。

    1993年,郭士纳进入IBM,大刀改革。

    1994年,DB2实现了HP unix和Solaris版本。实际上,还真不知道这两个平台上有多少用户。

    也是在1994年,AIX平台上DB2开始支持对象型数据。

    1995年,DB2开始支持Windows NT, Unix等多个平台。(标志性的一年?)

    1995年,收购Lotus,晕,现在我们还在用Lotus的邮件系统。不好用,但是不容易中毒。

    1996年,DB2正式更名为DB2 通用数据库。

    1997年, DB2 UDB forUnix/windows/OS2同时发布

    1998年,DB2 开始支持SCO Unixware

    1998年, DB2 UDB5.2出现。(不知道以前的版本是怎么定义的,有些乱。。。)

    1999年,DB2支持Linux on intel cpu

    2000年,DB2 支持XML扩展

    2000年,进一步支持Linux集群

    2002年,收购Rational Soft,从此, rose这个大炮工具被IBM弄走了

    2002/2003,DB2 V8.1出现

    2007年, DB2 V9出现,好像是第一个混合模式(关系型、层次型)数据库出现,既有关系模型,又有直接支持XML的层次模型。不知道是否属于叫好不叫座。

    在这期间,忘了是哪一年,印象中,好像是2001/2002年的光景,IBM还收购了Informix,花了1个Billion$,那也是一家曾经响当当的数据库厂商。

     

     
    数据库厂商的发展历史之MySQL

    MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个密,包括开发者在内也不知道。

    MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

    MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。

    MySQL的历史最早可以追溯到1979年,那时Oracle也才小打小闹,微软的SQL Server影子都没有。有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内在的计算机上运行。过了不久,又将此工具,使用C语言重写,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。

    可是,这个小公司资源有限,Monty天赋极高,面对资源有限的不利条件,他反而更能发挥潜能,总是力图写出最高效的代码。并因此养成了习惯。与Monty同在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后,而Monty却做到了。

    1990年,TcX的customer 中开始有人要求要为它的API提供SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用数据库的速度难令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。但不巧的是,效果并不太好。于是, Monty雄心大起,决心自己重写一个SQL支持。

    1996年,MySQL 1.0发布,只面向一小拨人,相当于内部发布。到了96年10月,MySQL 3.11.1发布了,呵呵,没有2.x版本。最开始,只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。

    紧接下来的两年里,MySQL依次移植到各个平台下。它发布时,采用的许可策略,有些与众不同:允许免费商用,但是不能将MySQL与自己的产品绑定在一起发布。如果想一起发布,就必须使用特殊许可,意味着要花银子。当然,商业支持也是需要花银子的。其它的,随用户怎么用都可以。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础。(细想想,PostgreSQL曾经有几年限入低谷,可能与它的完全免费,不受任何限制有关系)。

    MySQL3.22应该是一个标志性的版本,提供了基本的SQL支持。

    1999-2000年,有一家公司在瑞典成立了,叫MySQL AB(不知道AB是什么意思,待查)。   雇了几个人,与Sleepycat合作,开发出了 Berkeley DB引擎, 因为BDB支持事务处理,所以,MySQL从此开始支持事务处理了。

    2000年4月,MySQL对旧的存储引擎进行了整理,命名为MyISAM。同时,2001年,Heikiki Tuuri向MySQL提出建议,希望能集成他们的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁。

    如今,遗憾的是,BDB和InnoDB好像都被Oracle收购了,为了消灭竞争对手,哪怕是开源的,都是不择手段。

    MySQL与InnoDB的正式结合版本是4.0。

    到了MySQL5.0,2003年12月,开始有View, 存储过程之类的东东,当然,其间, bug也挺多。

    在2008年1月16号 MySQL被Sun公司收购。

    最近,MySQL的创始人Monty Widenius已经向Sun提交了辞呈。head都要走了。

    据说,被Sun收购的公司多薄命,不知道MySQL今后前途如何,希望一路走好。相信MySQL的生命力还是很长久的。
    派生版本

    派生版本有Drizzle,MariaDB,Percona Server及OurDelta等。

     

     
    数据库厂商的发展历史之Sybase

    Sybase公司成立于1984年,公司名称“Sybase”取自“system”和“database”相结合的含义。Sybase公司的创始人之一Bob Epstein 是Ingres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。

    Sybase公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer1.0。Sybase首先提出Client/Server 数据库体系结构的思想,并率先在SybaseSQLServer 中实现。

    提到Ingres数据库,不得不提一下Michael Stonebraker,他是Ingres的创始人。他是加州大学伯克利分校的教授,著名的数据库学者,他在1992 年提出对象关系数据库模型。Stonebraker 教授领导了称为Postgres 的后Ingres 项目。这个项目的成果是非常巨大的,在现代数据库的许多方面都做出的大量的贡献。Stonebraker 教授还做出了一件造福全人类的事情,那就是把Postgres 放在了BSD 版权的保护下。如今Postgres名字已经变成了PostgreSQL,功能也是日渐强大,我也非常喜爱这个数据库。你可自由的浏览它的代码库,可以实时了解一线工程的思路。

    话说,87年的时候,Sybase觉得单靠一家力量,难以把SQLServer(那时不叫ASE)做到老大,于是联合微软,共同开发。至于原始的代码从何而来,这个应该与Ingres有些渊源。后来1994年,两家公司合作终止。截止此时,应该是都拥有一套完全相同的SQLServer代码。

    然后可想而知了,Sybase继续开发,将Sybase SQLServer往各个平台移植,版本也是跳跃式的变化,从4.2,好像一下子就到了11.0。

    Sybase SQLServer后来为了与微软的MS SQL Server相区分,改名叫:Sybase ASE(Adaptive Server Enterprise),其实,应该改名字的是微软。代码的最初拥有者是Sybase,结果得到正式名字的居然是微软。这笔交易,实在是有些亏。不过,ASE也还好记,把Sybase的前边三个字母去就是ase了。

    ASE如今已经发展到了15.0.2版了。13和14两个数,对于老美来说,都不是好数,所以直接从12.5.4跳到15.0了。估计Oracle以后也会这样命名。

    现在的Sybase,产品策略已经有了调整,在移动数据库市场上,它的ASA (SQL Anywhere)占据了绝对的老大地位,70%以上的市场。同时,Sybase ASE仍然保持着大型数据库厂商的地位。在电信、交通、市政、银行等领域,拥有强大的市场。它的产品全是多平台支持。

    Sybase ASE又分出了Replication Server(复制服务器), Sybase IQ等重量级产品,相当于对大型数据库市场又进行了细分。

    算起来,MS SQL Server应该算是Sybase ASE的同胞兄弟了,不过,ASE血统更纯正。无论谁更成功,都证明当初的那个SQL Server生命力还在持续,它仍拥有强大的生命力。
     

    展开全文
  • 流行大型数据库简介

    千次阅读 2019-10-10 23:54:43
    1.1数据库和数据库管理系统 2 1.2关系数据库 3 1.3大型数据库 4 2 流行数据库 5 3研究对象的确定 5 第二章:Oracle数据库介绍 7 1 简介 7 2市场分析 7 4 Oracle的优缺点 11 第三章:SQL Server数据库介绍 ...

    目录

     

     

    摘要 1

    第一章:确定研究对象 2

    1 数据库的基本知识 2

    1.1数据库和数据库管理系统 2

    1.2关系数据库 3

    1.3大型数据库 4

    2 流行数据库 5

    3研究对象的确定 5

    第二章:Oracle数据库介绍 7

    1 简介 7

    2市场分析 7

    4 Oracle的优缺点 11

    第三章:SQL Server数据库介绍 15

    1简介 15

    2市场分析 16

    4 SQL Server的优缺点 18

    第四章:DB2数据库介绍 21

    1简介 21

    2市场分析 21

    4 DB2的优点 24

    第五章:比较与总结 26

    1 三大流行数据库总体比较 26

    2总结 26

     

    因为课程作业的要求写了这篇文章,本人并不懂技术,所以本文相当于对网上资料的整理,没有什么新东西。

    摘要

    本文以流行大型关系型数据库为研究对象进行研究,首先介绍了数据库的基本知识,包括:数据库和数据库管理系统的概念,关系数据库的概念,大型数据库的概念;然后,根据市场占有率排名选定三个数据库产品作为研究对象,分别是Oracle、SQL Server、DB2,并分别对这三个数据库产品从简介、市场分析、主要技术手段、优点、缺点五个方面作了介绍;最后,针对三个数据库产品进行各方面的比较,并探讨了国内的“去IOE化”。

    关键词:Oracle  SQL Server  DB2  大型数据库

     

    第一章:确定研究对象

     

    1 数据库的基本知识

    为了更好的说明研究对象,需要解释关于研究对象的基本知识。

    1.1数据库和数据库管理系统

    数据库,顾名思义就是存放数据的仓库,它是存储在计算机存储设备上的相互关联的数据集合,数据库的基本特征如下:

    1. 数据库是相互关联的数据的集合;
    2. 数据库用综合的方法组织数据,保证尽可能高的访问效率;
    3. 数据库具有较小的数据冗余,可供多个用户共享;
    4. 数据库具有较高的数据独立性;
    5. 数据库具有安全控制机制,能够保证数据的安全、可靠;
    6. 数据库允许并发的使用,能有效、及时地处理数据,并能保证数据的    一致性和完整性;

    以上的这些特性是靠管理或支持数据库的系统软件——数据库管理系统(DataBase Management System,DBMS)提供的,数据库管理系统的功能有:

    1. 数据库定义功能
    2. 数据库操纵功能
    3. 数据库查询功能
    4. 数据库控制功能
    5. 数据库通信功能

    而本文要讨论的数据库产品,则是数据库和数据库管理系统的集合。

    1.2关系数据库

    关系式数据库系统是支持关系数据模型的数据库系统。

    关系模型的理论基础是数学的集合论。支持一对一、一对多和多对多关系性。

    关系数据库模型的组成元素是:

    1数据结构:数据的组成方式,以关系数据库模型来说,就是行和列组成表格的关系表

    2数据操作或运算:数据的相关操作是关系型算术和 关系型计算。

    3完整性约束:维护数据完整性的条件,其目的是确保储存的数据是合法和正确的数据。

    在20世纪60-70年代广泛使用的数据库管理系统主要是层次数据库(如IMS)和网状数据库(如CODASYL),而现在普遍使用的数据库管理系统都是关系数据库管理系统。

    目前,关系数据库系统早已从实验室走向了社会,出现了很多性能良好、功能卓越的数据库管理系统,在国内使用比较普遍的数据库管理系统有IBM DB2,Sybase,Oracle和MS SQL Server等,还有在个人计算机上广泛使用的FoxPro、Access等。

    本文要讨论的数据库产品,主要是基于关系模型的关系型数据库产品。

     

    1.3大型数据库

    1.3.1超大型数据库的定义

    超大型数据库(very-large database)没有标准的定义,单纯的大小不再是唯一的评判标准,而只是一个因素。

    1.3.2大型数据库的应用与优势

    大型数据库的优势是:

    1达到PB级的海量数据,处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB。

    2高吞吐量,在单位时间内通过某个网络(或信道、接口)的数据量比较高。

    大型数据库应用在各行各业,包括但不限于金融、通信、生产制造、快速消费品零售、物流运输、医疗、互联网、政府,覆盖了中型、大型、巨型企业,可谓与我们的生活息息相关。

     

    2 流行数据库

    根据DB-Engines 发布了2018年9月份的全球数据库排名,排名前六的一如既往还是 Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB 和 DB2。

     

    3研究对象的确定

    本文的研究对象是流行大型数据库,所以选取2018年市场占有率前六中的三个大型数据库产品:Oracle、Microsoft SQL Server、DB2作为大型数据库产品的代表进行研究。

      

    第二章:Oracle数据库介绍

    1 简介

     

    Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

    2市场分析

     

    Oracle数据库的市场占有率排名第一,面向全球中高端市场。在中国,Oracle为中国的业务发展提供了强有力的支持。由他们开发的数百个基于Oracle平台的商品化应用软件包,已经广泛应用于国内的政府部门、电信、邮政、公安、金融、保险、能源电力、交通、科教、石化、航空航天、民航等各行各业。

    主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮 性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析 要求很高的业务。此外,高新制造业如芯片厂也基本都离不开Oracle;电商也 有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化)。

    根据DB-Engines 发布了2018年9月份的全球数据库排名,Oracle位居第一位。

     

     

    4 Oracle的优缺点

    Oracle 的优点:

    1开放性高

    Oralce采用完全开放策略,能在所有主流平台上运行,包括windows、unix等。

    2兼容性出色

    Oracle完全支持所有的工业标准。(工业标准通俗的说就是生产产品的某些群体,通过科学的实践计算后,并且得到大部分行内人群的认同,确定的一种可以作为参照物来对比的量值,以方便生产流程中的统一性,普遍性)

    另外,Oracle拥有长时间的开发经验,完全向下兼容,得到广泛的应用,完全没有风险。可以安全的进行数据库的升级,在企业、政府中得到广泛的应用。并且如果在WINNT上无法满足数据的要求,可以安全的把数据转移到UNIX上来。

    3安全性高

    获得了最高认证级别的ISO标准认证,Oracle在KuppingerCole《领导者指南:数据库安全性》报告中 被评为领导者。Oracle的安全措施主要有三个方面,一是用户标识和鉴定,最外层的安全性措施是让用户标识自己的名字,然后由系统进行核实。Oracle允许用户重复标识三次,如果三次未通过,系统自动退出。;二是授权和检查机制;三是审计技术(是否使用审计技术可由用户灵活选择);除此之外,Oracle还允许用户通过触发器灵活定义自己的安全性措施。

    4性能最高、效率高

    Oralce曾经保持开放平台下的TPC-D和TPC-C的世界记录。(TPC-C是交易处理性能委员会(TPC)开发的联机交易处理(OLTP)基准测试。TPC-C基准测试为计算性能和性价比定义了严格的标准,它分别用每分钟交易数(tpmC)和美元/tpmC来衡量性能和性价比。)

    从下图可见,Oracle数据库的性能可谓一骑绝尘。2018年,Oracle数据库11g标准版1实现了每分钟10.2454万次交易,性价比为0.73美元/tpmC,在性价比类基准测试中,Oracle数据库11g比最接近的竞争性产品的性能高47%,同时成本低20%。

     

     

    5采用多层次网络计算

    支持终端-主机、C\S、B\S等多种网络计算模式,可以用ODBC,JDBC,OCI等网络客户连接。

    6可伸缩性、并行性好

    并行服务器通过使一组结点共享同一簇中的工作来扩展Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要, 用户可以把数据库移到UNIX中,具有很好的伸缩性。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。
             Oracle缺点:

    1操作复杂,Oracle数据库同时提供GUI和命令行,在Windows NT和Unix, Linux 下操作相同。对数据库管理人员要求较高。

    2 使用成本高,oracle产品及服务都是付费的,而且价格不菲,且不易用。

    3 oracle在OLTP领域非常强,在OLAP邻域较弱。

    4 oracle在中国销售的数据库只能达到中国国家二级安全标准。

     

     

     

     

     

     

     

    第三章:SQL Server数据库介绍

     

    1简介

     

    SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和 Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断 更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,目前最新版本是SQL SERVER 2017。

    SQL Server的版本主要包括以下几种。

    Enterprise Edition,即企业版,能够对SQL Server 2000 的所有功能予以支持。使用的主要对象为大中型的产品类数据库服务器,对于大型网站要求的性能,对于企业的联机处理事务要求具备的相关性能,对于大型的OLAP要求的联机处理分析性能,本版本都能够实现并满足需求。

    Standard Edition,即标准版,主要适用于规模较小的部门或者工作组。对于SQL Server2000的多数主要功能都能够支持到,但多大型的数据库则支持不到,同时,对所有关系数据库的引擎不具备不支持的性能。

    Personal Edition,即个人版,使用的主要对象为移动用户,因为这类用户常常断开网络,但应用程序的持续运行却需要SQL Server 2000给予大力支持。基本上对SQL Senrer 2000具备的标准性能都可以予以支持,但是处理事物的复制功能则不能实现。

    2市场分析

     

    SQL Server的主机操作系统为windows,主要用于web网站的建设,承载中小型web后台数据,在租赁的虚拟主机中一般会预安装SQL Server作为数据库软件。SQL SERVER面向全球中低端市场,服务于政务、电力、企业、网站等中低端用户。很多人把SQL Server看作是比较低端的数据库,不适合支撑关键业务,但由于Windows Server的大面积使用,也使得SQL Server的普及率大大提升。

    SQL Server应该是从2005版本开始真正进入人们视野的,虽然一直在中低端的应用中徘徊,但目前越来越多的企业级应用已经部署在SQL Server平台上了。

    根据DB-Engines 发布了2018年9月份的全球数据库排名,SQL Server位居第三位。

     

     

    4 SQL Server的优缺点

     

             SQL Server的优点:

    1与Windows紧密结合,增加了易用性

    SQL Server可以与Windows操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都能得到较大的提升;与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。 SQL Server也可以很好地与Microsoft BackOffice产品集成。

    2操作简便

    图形化用户界面,使系统管理和数据库管理更加直观、简单。

    3良好的性价比

    SQL Server的价格与Oracle、DB2相比最低,SQL Server提供数据仓库( 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控 制)功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。

    4良好的伸缩性

    可跨越从运行Windows 95/98的小型电脑到运行Windows 2000的大型多处理器等多种平台使用。

    5对Web的支持

    SQL Server对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。

    SQL Server的缺点:

    1  开放性差

    SQL Server只能在windows上运行。

    2 可伸缩性有限

    SQL Server并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。

    3 使用风险

    SQL Server完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。

    4性能不稳定

    SQLServer当用户连接多时性能会变的很差,并且不够稳定。

    5客户端支持及应用模式

    SQL Server只支持C/S模式。

     

    第四章:DB2数据库介绍

     

    1简介

     

    DB2是IBM著名的关系型数据库产品,DB2系统在企业级的应用中十分广泛。曾经,截止2003年,全球财富500强(Fortune 500)中有415家使用DB2,全球财富100强(Fortune100)中有96家使用DB2,用户遍布各个行业。2004年IBM的DB2就获得相关专利239项,而Oracle仅为99项。

    IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。最适合于海量数据。

    2市场分析

     

    在功能和性能上,IBM 的DB2一直是高端产品,它在高端市场的地位很牢固,微软和Oracle无法与之抗衡。国内使用DB2的主要是金融业和巨型企业,因为银行、大型企业多用IBM大型机,其软件是一般是IBM成套提供,数据库多采用DB2,IBM对其有硬件上的优化。

    根据DB-Engines 发布了2018年9月份的全球数据库排名,DB2位居第六位。

     

    4 DB2的优点

     

    DB2的优点:

    1开放性

    能在所有主流平台上运行(包括windows)。最适于海量数据。

    2 可伸缩性,并行性

    具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分 区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点。

    3 安全性

     获得最高认证级别的ISO标准认证。

    4 客户端支持及应用模式

    跨平台,多层结构,支持ODBC,JDBC等客户。

    5 操作简单

    DB2操作简单同时提供GUI和命令行,在windowsNT和unix下操作相同。

    6使用风险低

    在巨型企业得到广泛的应用,向下兼容性好,风险小。

    7性能卓越

    DB2性能较高适用于数据仓库和在线事物处理。DB2 超大型数据库,数据仓库和数据挖掘相当的不错,特别是集群技术可以使DB2的可扩性能达到极致。

    DB2的缺点:

    1价格昂贵

    2与IBM主机捆绑

     

    第五章:比较与总结

     

    1 三大流行数据库总体比较

     

     

    开放性

    可伸缩性、并行性

    安全性

    截止2018年9月市场占有排名

    Oracle

    1

    Miscroft SQL Server

    一般

    一般

    3

    DB2

    6

     

     

    性能

    操作难度

    客户端支持及应用模式

    使用风险

    价格

    Oracle

    最高

    都支持

    Miscroft SQL Server

    一般

    只支持C\S

    DB2

    同Oracle,适合处理海量数据

    都支持

     

    2总结

     

    本文选取三种流行的大型数据库进行介绍,涉及了Oracle、SQL Server、DB2这三种数据库产品的市场、技术、性能、功能等等方面。

    在性能方面,根据TPC-C的实时排名,得出的结论是Oracle 约等于DB2 远大于sSQL Server ,且这三个数据库的性能侧重也不同。Oracle在联机交易处理领域更擅长;DB2的容量很大,最适合处理海量数据,数据仓库和数据挖掘是DB2擅长的领域;SQL Server对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上,与Windows的紧密集成使不论是应用程开发速度还是系统事务处理运行速度,都得到较大的提升。

    在市场方面,Orcale>DB2>SQL Server,大型企业的数据库很多都是混用的,但是核心业务大多跑在Oracle和DB2上。Oracle涉及的行业最多,包括但不限于金融、通信、生产制造、快速消费品零售、物流运输、医疗、互联网、政府;DB2则多用于金融业和巨型企业;SQL Server则运用于政府、生产制造、快速消费品零售、医疗、互联网行业,主要客户是中小企业。

    值得注意是,国内正在经历“去IOE化”的变革,“去IOE”是阿里巴巴造出的概念,其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备,代之以自己在开源软件基础上开发的系统。阿里曾经是甲骨文在亚太地区最大的客户,10年前选择“去IOE”发展自己的云计算业务,成立了阿里云。根据美通社报道,根据Gartner发布的最新报告《数据库的未来就是云》,2018年阿里云在云数据库管理系统(DBMS)收入中排名全球第三。在这份报告中,阿里云的市场份额在DBMS供应商中排名第三,同比增长116%,另一方面,2019年5月7日,媒体大规模曝光甲骨文裁员消息,多位甲骨文员工爆料,“甲骨文中国区首批裁员900余人,其中超500人来自CDC(甲骨文中国区研发中心),而整个CDC共约1600人”。目前,云计算正在冲击传统数据库市场,并且很可能终将替代传统数据库,这是值得注意的趋势。而就在10月2日,数据库领域最权威的国际机构国际事务处理性能委员会(TPC,Transaction Processing Performance Council)在官网发表了最新的TPC-C 基准测试结果。蚂蚁金服自主研发的金融级分布式关系数据库OceanBase以两倍于Oracle(甲骨文)的成绩,打破数据库基准性能测试的世界记录,成为全球数据库演进史的重要里程碑。

    在“去IOE”风潮和Oracle性能记录被国产数据库打破的影响下,数据库技术和市场必然面临更大的变迁,我们应该在学习传统数据库技术的同时不断关注这一领域的变化,接触新的技术,多多探讨新旧数据库的优缺,以图在做每个项目的时候总能找到最适合的工具。

    展开全文
  • 数据仓库概念:操作系统和分析性系统的区别 操作性系统: 专用于管理面向事务的应用的信息系统;如互联网线上系统、MIS、OA等系统; 其核心目标是尽可能快地处理事务,同时维护数据的一致性完整性; 事务的特点...

    数据仓库概念:操作型系统和分析性系统的区别

    操作性系统:
    专用于管理面向事务的应用的信息系统;如互联网线上系统、MIS、OA等系统;
    其核心目标是尽可能快地处理事务,同时维护数据的一致性和完整性;
    事务的特点:原子性、一致性、隔离性、持久性。

    分析性系统:
    一种快速回答多维分析查询的实现方式;
    通过数据分析评估组织的业务经营状态,并进一步辅助决策;
    它也是更广泛范畴的所谓商业智能的一部分,
    商业智能包含:数据库、报表系统、数据挖掘、数据可视化等。


    操作型和分析型系统对比

    对比项操作型系统分析型系统
    数据源应用的操作信息,一般是最原始的数据历史的、归档的数据、一般来源于数据仓库
    侧重点数据更新信息的检索或报表
    应用管理系统、交易系统、在线应用等报表系统、多维分析、决策支持系统等
    用户终端用户、普通雇员管理人员、市场人员、数据分析师
    任务业务操作数据分析
    数据更新插入、更新、删除数据,要求快速执行,立即返回结果大量数据装载,花费时间很长
    数据模型实体关系模型多维数据模型
    设计方法规范化设计,大量的表和表之间的关系星型模式或雪花模式,少量的表
    备份定期执行全量和增量备份,不允许数据丢失简单备份,数据可以重新装载
    数据的时间范围从天到年几年或几十年
    查询简单查询,快速返回查询结果查询复杂,执行聚合或汇总操作
    速度快,大表上需要建索引相对较慢,需要更多的索引
    所需空间小,只存储操作数据大,需要存储大量历史数据
    展开全文
  • 做为目前主流的模型数据库类型,关系型数据库的架构随着业务规模的增长做出相应的变化,本章我们来学习关系型数据库架构的变化以及主流的应用场景。 关系型数据库架构 随着业务规模增大,数据库存储的数据量承载的...
  • 基于SSM的校园二手交易平台的设计与实现

    万次阅读 多人点赞 2018-05-06 14:24:44
    数据库:MySQL 框架:Spring + Spring MVC + MyBatis 服务器:Tomcat 前端解析框架:Thymeleaf 开发工具:Idea 2017 版本管理工具:Maven 版本控制工具:GitHub 下载地址:...
  • 关系型数据库横向扩展的三种方法

    万次阅读 2016-07-10 19:03:49
    本文是 Oracle Coherence 3.5一书,第一章: Achieving Performance, ...传统的关系型数据库很难扩展,通常是纵向扩展,但到达一定程度时只能横向扩展。数据库的横向扩展支持三种方法,即主从复制,集群分片
  • 时序数据库介绍使用

    万次阅读 多人点赞 2018-06-10 18:17:08
    1.基础 1.1 时序数据的定义 什么是时间序列数据(Time Series Data,TSD,以下简称时序...它普遍存在于IT基础设施、运维监控系统物联网中。    对时序数据进行建模的话,会包含三个重要部分,分别是:主体...
  • 今天我将对常见关系型数据库以及NoSQL的使用场景做一个详细的分析和比较。希望对大家以后的数据库选型有所帮助。目录数据库场景比较MySQL还是PostgreSQL?MongoDB键值(Key-Value)数据库Cassandra图数据库(Neo4j)...
  • NoSQL数据库与关系型数据库对比

    千次阅读 2018-08-03 10:24:35
    BASE是NoSQL数据库通常对可用性及一致性的弱要求原则: BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。 CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,...
  • 非关系型数据库

    千次阅读 2018-08-31 15:01:41
    目前对于非关系型数据库主要有四种数据存储类型:键值对存储(key-value),文档存储(document store),基于列的数据库(column-oriented),还有就是图形数据库(graph database)。每一种都会解决相应的问题,...
  • 集中式系统分布式系统都可以实现扩展。在集中式系统中,垂直扩展(也称按比例增加)通过增加现有或较少资源的数量或能力实现。在分布式系统中,例如云计算所采用的系统,水平扩展通过增加更多的计算单元(如服务器...
  • 阿里云分布式关系型数据库(DRDS)

    千次阅读 2019-03-14 15:21:46
    阿里云分布式关系型数据库(DRDS) Distribute Relational Database Service(DRDS)是分布式关系型数据库,它主要是一种水平拆分、可平滑扩容、读写分离的在线分布式数据库服务。 DRDS在使用的过程中存在于我们的...
  • 第三点,随着业务的发展变化,未来交易型数据库和分析型数据库会逐渐融合, AP和TP在融合,所以HTAP必定是数据库的一个未来的发展方向。 第三个发展趋势是从SQL到NoSQL。Oracle、MySQL、SQL Server大部分是二位表...
  • 我做的项目因为涉及到大量的历史数据增加而采用的非关系型数据(mongodb),但是在实际开过程中遇到了很多问题,有开发方面的,也有管理方面的,于是我思考了用关系型数据库mysql代替非关系型数据库mongodb的思路。...
  • 数据库的应用类型OLTPOLAP

    千次阅读 2020-02-26 08:10:55
    文章目录数据库的应用类型一、OLTP二...一般来说,可将数据库的应用类型分为OLTP(OnLine Transaction Processing,联机事务处理)OLAP(OnLine Analysis Processing,联机分析处理)两种。 OLTP是传统关系数据...
  • NoSQL 非关系型数据库

    2020-05-22 22:24:34
    本文介绍了 NoSQL(非关系型数据库)的相关内容。。。
  • 关系型数据库,是指采用了关系模型来组织数据的数据库,其以行列的形式存储数据。目前市场上被广泛使用的关系型数据库主要有Oracle、DB2、MySQL、Microsoft...
  • 四大非关系型数据库类型

    千次阅读 2017-04-02 13:18:34
    四大非关系型数据库类型,你知道多少 http://www.onmpw.com/tm/xwzj/sjk_88.html 这篇文章的内容是摘自《Introducing Data Science》,我们在这里将要想大家介绍四种NoSQL数据库的类型,坚持读下去你会获得更多...
  • 人工智能时代,所需要了解人工智能的基本常识

    万次阅读 多人点赞 2018-12-10 22:49:44
    国内对于人工智能的讨论大多是不成体系的碎片式,很难从中深入了解人工智能的发展脉络技术体系,也很难有实际借鉴意义。人工智能的历史、核心技术应用情况进行了详细说明,尤其是其中重要的认知技术。这份报告将...
  • 目前对于非关系型数据库主要有四种数据存储类型:键值对存储(key-value),文档存储(document store),基于列的数据库(column-oriented),还有就是图形数据库(graph database)。每一种都会解
  • 软件测试面试题汇总

    万次阅读 多人点赞 2018-09-27 12:31:09
    28、软件配置管理工作开展的情况认识? ................................................................................................. 9 29、你觉得软件测试通过的标准应该是什么样的? ................
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言...
  • 数据库性能需求分析及评估模型

    万次阅读 2017-11-22 17:05:50
    数据库作为应用系统当中最重要的一块,也是性能测试非常关注的一块,根据我自己的项目经验,以往对应用系统的性能需求分析和测试策略制定过程,总结一下如何开展数据库系统的性能需求分析,以及制定数据库能力评估...
  • 而在如今的互联网中,最常见的数据库种类主要有2种,即关系型数据库和非关系型数据库。 二、层次数据库介绍 层次数据库是最开始研制的数据库系统软件,它把数据根据层次构造(树结构)的方法呈现。层次数据库以前...
  • 关系型数据库遵循ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),而Nosql数据库遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state)、最终...
  • 游戏测试_怎么样测试游戏(入门)

    万次阅读 多人点赞 2018-11-15 17:04:19
    游戏测试分两种:大型网络游戏手游。 大型网络游戏网游 一般大型的网络游戏中测试都分很多个阶段: 前期测试 内部测试 内部封测 综合版本不对外测试 限量玩家内测   中期测试 公开测试 ...
  • 数据库操作其实要学的东西还很多,本文旨在抛砖引玉,简单介绍使用Python 对 PostgreSQL 数据库与 dataframe 数据进行交互,一步步搭建自己的量化分析数据库。由于文中用到的数据仅为百万条左右,实际上使用excel...
  • 云计算时代,云原生分布式数据库和数据仓库开始崛起,提供弹性扩展、高可用、分布式等特性。数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁、阿里云...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,056
精华内容 19,222
关键字:

交易型和分析型数据库