精华内容
下载资源
问答
  • 关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成...

    关系型数据库与非关系型数据库

    数据库按照其结构可以分为关系型数据库与其他数据库,而这些其他数据库我们统称为非关系型数据库。

    1.关系型数据库

      关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织,现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL(结构化查询语言)语句就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。

    主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。

    2.非关系数据库

       NoSQL,意思是“不仅仅是SQL”,是非关系型数据库的总称。主流的NoSQL数据库有Redis、MongDB、Hbase、CouhDB等。这些数据库,他们的存储方式,存储结构以及使用场景都是完全不同的。所以我们认为它是一个非关系型数据库的集合,而不是像关系型数据库一样,是一个统称。换言之,主流的关系型数据库之外的数据库,都可以成为非关系型数据库。NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。

    主流的NoSQL数据库有Redis、MongDB、Hbase、CouhDB等

    3.非关系型数据库产生背景

       随着Web 2.0网站的兴起,关系型数据库在应对Web 2.0网站,特别是海量数据和高并发的SNS(社交网络服务)类型的Web 2.0网站时,暴露出很多难以解决的问题。主要有一下三大问题。

    1)对数据库高并发读写需求

       Web 2.0网站会根据用户的个性化信息来实时生成动态页面和提供动态信息。因此,无法使用动态页面静态化技术,所以数据库的并发负载非常高,一般会达到10000次/s以上的读写请求。关系型数据库对于上万次的查询请求还是可以勉强支撑的。当出现上万次的写数据请求时,硬盘I/O就已经无法承受了。对于普通的BBS网站,往往也会存在高并发的写数据请求,如明星在微博上公布恋情,结果因为流量过大而引发微博瘫痪。

    2)对海量数据高效存储于访问需求

       类似Facebook、Friendfeed这样的sns网站。每天都会产生大型的用户动态信息。例如:Facebook一个月就会产生2.5亿条用户动态信息。对于关系型数据库来说,在一个包含2.5亿条记录的表中执行SQL查询。效率是非常低的。

    3)对数据库高可扩展性与高可用需求

       在Web架构中,数据库是最难进行横向扩展的。当应用系统的用户量与访问量与日俱增时,数据库是没办法像Web服务器一样,简单得通过添加硬件和服务器节点来扩展其性能和负载能力的。尤其对于一些需要24小时对外提供服务器的网站来说,数据库的升级与扩展往往会伴随着停机维护与数据迁移,其工作量是非常庞大的。


        关系型数据库和非关系型数据库都有各自的特点与应用场景。两者的紧密结合将会给Web 2.0的数据库发展带来新的思路。让关系型数据库关注在关系上,非关系型数据库关注在存储上。

    Redis数据库

    1.Redis简介

    Redis是一个开源的、使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value(键值对)数据库,是目前分布式架构中不可或缺的一环。

       Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,而Redis的实际处理速度则完全依靠于主进程的的执行效率。若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力会有一定程度的下降,若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。也就是说,在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。

    2.redis具有以下显著的优点:

    • 具有极高的读写速度,数据读取的速度最高可达到110000次/s;数据写入速度最高可达到81000次/s;
    • 支持丰富的数据类型,不仅仅支持简单的key-value数据类型,还支持Strings、Lists、Hashes、Sets及Ordered Sets等数据类型操作;
    • 支持数据的持久化,可以将内存中的数据保存在硬盘中,重启时可以再次加载使用;
    • 原子性,Redis所有的操作都是原子性的;
    • 支持数据备份,及master-salve模式的数据备份;

     

    安装部署Redis

    网盘下载:https://pan.baidu.com/s/1cYe4qW8TZge7jDeUHehWtw

    官方下载:https://redis.io/

    1.编译安装 

    [root@localhost ~]# tar zxf redis-3.2.9.tar.gz -C /usr/src/
    [root@localhost ~]# cd /usr/src/
    [root@localhost src]# cd redis-3.2.9/
    [root@localhost redis-3.2.9]# make && make install
    

    再安装过程中,想要更改默认路径,可以使用下列格式实现

    make && make PREFIX=安装路径install

       make install 只是安装了二进制文件到系统中,并没有启动脚本和配置文件。软件包中默认提供了一个install_server.sh脚本文件。通过该脚本文件可以设置Redis服务所需要的相关配置文件。当脚本执行完毕,Redis服务就已经启动,默认侦听端口为6379

    [root@localhost redis-3.2.9]# cd utils/
    [root@localhost utils]# ./install_server.sh 
    Welcome to the redis service installer
    This script will help you easily set up a running redis server
    
    Please select the redis port for this instance: [6379] 
    Selecting default: 6379
    Please select the redis config file name [/etc/redis/6379.conf] 
    Selected default - /etc/redis/6379.conf
    Please select the redis log file name [/var/log/redis_6379.log] 
    Selected default - /var/log/redis_6379.log
    Please select the data directory for this instance [/var/lib/redis/6379] 
    Selected default - /var/lib/redis/6379
    Please select the redis executable path [/usr/local/bin/redis-server] 
    Selected config:
    Port           : 6379
    Config file    : /etc/redis/6379.conf  //设置默认配置文件
    Log file       : /var/log/redis_6379.log  //日志文件
    Data dir       : /var/lib/redis/6379   //数据目录
    Executable     : /usr/local/bin/redis-server   //执行命令
    Cli Executable : /usr/local/bin/redis-cli     //客户端命令
    Is this ok? Then press ENTER to go on or Ctrl-C to abort.
    Copied /tmp/6379.conf => /etc/init.d/redis_6379
    Installing service...
    Successfully added to chkconfig!
    Successfully added to runlevels 345!
    Starting Redis server...
    Installation successful!
    [root@localhost utils]# 
    [root@localhost utils]# netstat -anput | grep redis
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7012/redis-server 1 
    

    2.Redis控制

    [root@localhost ~]# /etc/init.d/redis_6379 stop   //关闭
    [root@localhost ~]# /etc/init.d/redis_6379 restart  //重启
    [root@localhost ~]# /etc/init.d/redis_6379 status   //查看状态
    Redis is running (6396) 
    

    3.配置参数

    Redis主配置文件为/etc/redis/6379.conf

    [root@localhost ~]# vim /etc/redis/6379.conf 
    bind 127.0.0.1       //监听的主机地址
    port 6379           //监听端口
    daemonize yes       //启动守护进程
    pidfile /var/run/redis_6379.pid         //指定PID文件
    loglevel notice                        //日志级别
    logfile /var/log/redis_6379.log        //指定日志文件
     
    [root@localhost ~]# /etc/init.d/redis_6379 restart   //重启
    

    除了以上配置参数还有下列

    Redis命令工具

    Redis软件提供了多个命令工具,当Redis安装时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。

    Redis服务命令工具的作用

    • redis-server:用于启动Redis服务的工具
    • redis-benchmark:用于检测Redis在本机的运行效率
    • redis-check-aof:修复AOF持久化文件
    • redis-check-rdb:修复RDB持久化文件
    • redis-cli:Redis命令工具
    • redis-setinel:redis-server的软连接

    1.redis-cli命令行工具

      Redis数据库系统也是一个典型的C/S(客户端/服务器端)架构的应用,要访问Redis数据库需要使用专门的客户端软件。Redis服务的客户端软件就是自带的redis-cli命令行非法操作。使用redis-cli连接到指定数据库,连接成功后会进入提示符为“远程主机IP地址:端口号>”的数据库操作环境。用户就可以输入各种操作语句对数据库进行管理

    [root@localhost ~]# redis-cli 
    127.0.0.1:6379> ping
    PONG
    

    远程连接其它主机 

    -h”指定远程主机“-p”指定Redis服务的端口号、“-a”指定redis数据库的密码

    [root@localhost ~]# redis-cli -h 192.168.1.1 -p 6379
    192.168.1.1:6379> info        // info可以查看Redis服务器的详细信息
    
    

    2.查看命令 

    在数据库操作环境中,使用help命令可以获取命令的相应帮助。有三种获取命令帮助的方式:

    • help @<group>:获取<group>中的命令列表
    • help <command>:获取某个命令的帮助
    • help <tab>:获取可能帮助的主题列表
      [root@localhost ~]# redis-cli 
      127.0.0.1:6379> help @list  //查看所有与list数据类型相关的命令
      
        BLPOP key [key ...] timeout
        summary: Remove and get the first element in a list, or block until one is available
        since: 2.0.0
      
        BRPOP key [key ...] timeout
        summary: Remove and get the last element in a list, or block until one is available
        since: 2.0.0
      
        BRPOPLPUSH source destination timeout
        summary: Pop a value from a list, push it to another list and return it; or block until one is available
        since: 2.2.0
      
        LINDEX key index
        summary: Get an element from a list by its index
        since: 1.0.0
      
        LINSERT key BEFORE|AFTER pivot value
        summary: Insert an element before or after another element in a list
        since: 2.2.0
      
        LLEN key
        summary: Get the length of a list
        since: 1.0.0
      
        LPOP key
        summary: Remove and get the first element in a list
        since: 1.0.0
      
        LPUSH key value [value ...]
        summary: Prepend one or multiple values to a list
        since: 1.0.0
      
        LPUSHX key value
        summary: Prepend a value to a list, only if the list exists
        since: 2.2.0
      
        LRANGE key start stop
        summary: Get a range of elements from a list
        since: 1.0.0
      
        LREM key count value
        summary: Remove elements from a list
        since: 1.0.0
      
        LSET key index value
        summary: Set the value of an element in a list by its index
        since: 1.0.0
      
        LTRIM key start stop
        summary: Trim a list to the specified range
        since: 1.0.0
      
        RPOP key
        summary: Remove and get the last element in a list
        since: 1.0.0
      
        RPOPLPUSH source destination
        summary: Remove the last element in a list, prepend it to another list and return it
        since: 1.2.0
      
        RPUSH key value [value ...]
        summary: Append one or multiple values to a list
        since: 1.0.0
      
        RPUSHX key value
        summary: Append a value to a list, only if the list exists
        since: 2.2.0
      
      127.0.0.1:6379> help set   //查看set命令的命令格式及帮助
      
        SET key value [EX seconds] [PX milliseconds] [NX|XX]
        summary: Set the string value of a key
        since: 1.0.0
        group: string
      

      3.redis-benchmark 测试工具

     [root@localhost ~]# redis-benchmark -h 192.168.1.1 -p 6379 -c 100 -n 10000
     //针对IP地址为192.168.1.1、端口号为6379的Redis服务器发送100个并发连接与10000个请求测试性能
    ====== MSET (10 keys) ======
      10000 requests completed in 0.26 seconds
      100 parallel clients
      3 bytes payload
      keep alive: 1
     
    16.44% <= 1 milliseconds
    95.07% <= 2 milliseconds
    96.67% <= 3 milliseconds
    97.93% <= 4 milliseconds
    99.24% <= 5 milliseconds
    99.44% <= 6 milliseconds
    99.67% <= 7 milliseconds
    99.92% <= 8 milliseconds
    100.00% <= 9 milliseconds
    38759.69 requests per second
    [root@localhost ~]# redis-benchmark -h 192.168.1.1 -p 6379 -q -d 100
    //针对IP地址为192.168.1.1、端口号为6379的Redis服务器测试存取大小为100B的数据包的性能
    [root@localhost ~]# redis-benchmark -h 192.168.1.1 -p 6379 -t set,lpush -n 10000 -q
    SET: 37313.43 requests per second
    LPUSH: 45248.87 requests per second
    //针对IP地址为192.168.1.1、端口号为6379的Redis服务器在进行set与lpush操作时的性能
    

     

    Redis数据库常用命令

    • set:存放数据,基本格式:set key value
    • get:获取数据,基本格式:get key

    1)keys

    使用keys命令可以获取符合规则的键值列表,通常可以结合“*”、“?”等选项使用。

    127.0.0.1:6379> keys *               //查看当前数据库的所有键
    1) "mylist"
    2) "k2"
    3) "k11"
    4) "counter:__rand_int__"
    5) "key:__rand_int__"
    6) "k1"
    7) "k3"
    //不光是自己设置的键,还有系统默认的键
    127.0.0.1:6379> keys k*            //查看当前数据库中以“k”开头的键
    1) "k2"
    2) "k11"
    3) "key:__rand_int__"
    4) "k1"
    5) "k3"
    127.0.0.1:6379> keys k?            //查看当前数据库中以“k”开头后面包含任意一位的键
    1) "k2"
    2) "k1"
    3) "k3"
    127.0.0.1:6379> keys k??         //查看当前数据库中以“k”开头后面包含任意两位的键
    1) "k11"
    

    2)exists

    使用exists命令可以判断键值是否存在。

    127.0.0.1:6379> exists k1
    (integer) 1
    127.0.0.1:6379> exists k0
    (integer) 0
    //返回值1表示存在;0表示不存在
    

    3)del

    使用del命令可以删除当前数据库的指定key。

    127.0.0.1:6379> del k1
    (integer) 1
    127.0.0.1:6379> get k1
    (nil)
    

    4)type

    使用type命令可以获取key对应的value值类型。

    127.0.0.1:6379> type k2
    string
    //字符串类型
    

     

    5)rename

    rename命令是对已有key进行重命名,格式为:“rename 源key 目标key”。使用rename命令进行重命名操作时,无论目标key是否存在都进行重命名,而且源key的值会覆盖目标key的值。在实际使用过程中,建议使用exists命令查看目标key是否存在,再决定是否执行rename命令,避免覆盖重要数据。

    127.0.0.1:6379> get k2
    "1qq"
    127.0.0.1:6379> get k3
    "1q"
    127.0.0.1:6379> rename k2 k3
    OK
    127.0.0.1:6379> get k3
    "1qq"
    

    6)renamenx

    renamenx命令语法格式、作用与rename命令相同,不同点在于使用renamex命令进行重命名是,如果目标key存在则不进行重命名

    127.0.0.1:6379> keys k??
    1) "k11"
    127.0.0.1:6379> renamenx k3 k11
    (integer) 0
    //返回值是0,表示失败


    7)dbsize

    dbsize命令的作用是查看当前数据库中key的数目

    127.0.0.1:6379> dbsize 
    (integer) 5


    多数据库常用命令

    1)多数据库间切换

    Redis支持多数据库,默认有16个数据库,数据库名称是用数字0-15来表示的。

    27.0.0.1:6379> SELECT 10  //切换至序号为10的数据库
    OK
    127.0.0.1:6379[10]> SELECT 15
    OK
    127.0.0.1:6379[15]> SELECT 0
    OK
    

    2)多数据库之间移动数据

    Redis的多数据库在一定程度上是相对独立的,在1创建的数据,在10上是没有的

    127.0.0.1:6379> set q1 1
    OK
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> get q1
    (nil)
    

    Redis数据库提供了一个“move”命令,可以进行多数据库的数据移动

    127.0.0.1:6379> move qzt1 1
    (integer) 1
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> get qzt1
    "1"
    

    3)清除数据库内数据

    清空当前数据库数据:flushdb

    清空所有数据库数据:flushall(谨慎使用)

    展开全文
  • 关系型数据库是一-个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的...
    数据库按照其结构可以分为关系型数据库与其他数据库,而这些其他数据库我们将其统称为非关系型数据库。
    

    1.关系型数据库
    关系型数据库是一-个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一-个数据组织。现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。SQL (Structured Query Language,结构化查询语言)语句就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。主流的关系型数据库包括Oracle、MySQL、 SQL Server. Microsoft Access. DB2等。
    在这里插入图片描述
    2. 非关系型数据库
    NoSQL(NoSQL = Not Only SQL ),意思是‘不仅仅是 SQL",是非关系型数据库的总称。主流的NoSQL数据库有Redis、 MongBD、 Hbase. CouhDB 等。以上这些数据库,它们的存储方式、存储结构以及使用的场景都是完全不同的。所以我们认为它是- -个非关系型数据库的集合,而不是像关系型数据库一样,是一个统称。换言之,主流的关系型数据库以外的数据库.都是非关系型的。NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。

    3.非关系型数据库产生背景
    关系型数据库已经诞生很久了,而且我们一直在使用,没有什么问题。面对这样的情况,为什么还会产生非关系型数据库?下面我们就来介绍一下非关 系型数据库产生的背景。
    随着Web 2.0网站的兴起,关系型数据库在应对Web 2.0网站,特别是海量数据和高并发SNS(Social Networking Services,即社交网络服务)类型的Web 2.0纯动态网站时,暴露出很多难以解决的问题。例如以下三高问题。

    1).High performance- 对数据库高并发读写需求
    Web 2.0 网站会根据用户的个性化信息来实时生成动态页面和提供动态信息,因此,无法使用动态页面静态化技术。所以数据库的并发负载非常高,一般会达到10000次/s以上的读写请求。关系型数据库对于上万次的查询请求还是可以勉强支撑的。当出现上万次的写数据请求时,硬盘I/O就已经无法承受了。对于普通的BBS网站,往往也会存在高并发的写数据请求,如明星鹿晗在微博上公布恋情,结果因为流量过大而引发微博瘫痪
    2). HugeStorage–对海量数据高效存储与访问需求
    类似于Facebook . Friendfeed 这样的SNS网站,每天会产生大量的用户动态信息。例如Friendfeed,一个月就会产生2.5亿条用户动态信息,对于关系型数据库来说,在一个包含2.5亿条记录的表中执行SQL查询,效率是非常低的。
    3). High Scalability && High Availability-- 对 数据库高可扩展性与高可用性需求
    在Web架构中,数据库是最难进行横向扩展的。当应用系统的用户量与访问量与日俱增时,数据库是没办法像Web服务-样,简单地通过添加硬件和服务器节点来扩展其性能和负载能力的。尤其对于一些需要24h对外提供服务的网站来说,数据库的升级与扩展往往伴随着停机维护数据迁移,其工作量是非常庞大的。
    在这里插入图片描述
    关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web 2.0的数据库发展带来新的思路。让关系型数据库关注在关系上,非关系型数据库关注在存储上。

    展开全文
  • 关系型数据库指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为,一组组成了数据库。用户通过查询来检索数据库中的数据,而查询一个...

    1.数据库

    按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网状数据库和关系型数据库。而在当今的互联网中,最常见的数据库模型主要是两种,即SQL关系型数据库和NoSQL非关系型数据库。

    2.什么是关系型数据库

    关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组。

    3.常用名词介绍

    3.1. 数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库;

    3.2. 数据库管理系统(Database Managerment System,简称DBMS):管理数据库的软件;

    3.3. SQL可分为:

    • 3.3.1 数据定义语言(DDL):Data Defintion Language;
        数据定义语言(DDL):Data Defintion Language
        · 用于建立、修改、删除数据对象;
    
        · 包括:
        - CREATE:创建表或其他对象结构;
        - ALTER:修改表或其他对象的结构;
        - DROP:删除表或其他对象结构;
        - TRUNCATE:删除表数据,保留表结构;
    
    • 3.3.3 事务控制语言(TCL): Transaction Control Language;
        数据操作语言(DML):Data Manipulation Language
        · 用于改变数据表中的数据;
        · 和事务相关,执行完成后需要经过事务控制语句提交后才真正的将改变应  用到数据库中;
    
        · 包括:    
         - INSERT:将数据插入到数据库中;
         - UPDATE:更新数据表中已存在的数据;
         - DELETE:删除数据表中的数据;
    
    • 3.3.4 数据查询语句(DQL): Data Query Language;
        数据查询语句(DQL): Data Query Language
        · 用来查询所需要的数据;
        · SELECT语句;
    
    • 3.3.5 数据控制语言(DCL):Data Control Language;
        数据控制语言(DCL):Data Control Language
        · 用于执行权限的授予和回收操作;
    
        · 包括:
          - GRANT:授予,用于给用户或角色授予权限;
          - REVOKE:用于回收用户或角色已有的权限;
          - CREATE USER:创建用户;
    
    • 3.3.6 数据操作语言(DML):Data Manipulation Language;

    • 3.3.7 事务控制语言(TCL): Transaction Control Language;

        事务控制语言(TCL): Transaction Control Language
        · 用来维护数据一致性的语句
    
        · 包括:
          - COMMIT:提交,确认已经进行的数据改变;
          - ROLLBACK:回滚,取消已经进行的数据改变;
          - SAVEPOINT:保存点,使当前事务可以回退到指定的保存点,便于取消   部分改变;
    

    3.4 ACID事务

    • 3.4.1 原子性(Atomicity)
      事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。
    • 3.4.2 一致性(Consistent)
      事务结束的时候,所有的内部数据都是正确的。
    • 3.4.3 隔离性(Isolation)
      并发多个事务时,各个事务不干涉内部数据,处理的都是另外一个事务处理之前或之后的数据。
    • 3.4.4 持久性(Durability)
      事务提交之后,数据是永久性的,不可再回滚。

    4.主流关系型数据库

    先来一下排名,此排名截至到2020年10月
    在这里插入图片描述

    如果需要关注实时排名可以关注:https://db-engines.com/en/ranking

    4.1 Oracle 数据库

    4.1.1 介绍

    1. Oracle是著名的Oracle(甲骨文)公司的数据库产品;
    2. Oracle是世界上第一个商品化的关系型数据库管理系统;
    3. Oracle采用标准SQL(结构化查询语句),支持多种数据类型,提供面向对象的数据支持,具有第四代语言开发工具;支持UNIX、WINDOWS、OS/2等多种平台;

    4.Oracle19c和20c的新特性:https://www.modb.pro/doc/1291?leiZH

    4.1.2 优点

    1. Oracle 能在所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持。
    2. Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能力提供高用性和高伸缩性簇解决方案windowsNT能满足需要用户把数据库移UNIXOracle并行服务器对各种UNIX平台集群机制都有着相当高集成度。
    3. 获得最高认证级别的ISO标准认证。
    4. Oracle 性能高 保持开放平台下TPC-D和TPC-C世界记录。
    5. Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI等网络客户连接。
    6. Oracle 长时间开发经验完全向下兼容得广泛应用地风险低。

    4.1.3 缺点

    1. 对硬件的要求很高。
    2. 价格比较昂贵。
    3. 管理维护麻烦一些。
    4. 操作比较复杂,需要技术含量较高。


    4.2 MySQL数据库概述

    4.2.1 介绍

    1. MySQL是开放源码的小型关系型数据库管理系统,广泛应用在中小型网站中;
    2. 总体拥有成本低,规模较Oracle和DB2小
    3. 2008年1月16日,Sun收购了MySQL;2009年4月20日,SUN被Oracle公司收购了,所以现在MySQL是属于Oracle的;

    4.2.2 优点

    1. 体积小、速度快、总体拥有成本低,开源,提供的接口支持多种语言连接操作。
    2. 支持多种操作系统。
    3. MySQL 的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySQL 能很容易充分利用CPU。
    4. MySQL 有一个非常灵活而且安全的权限和口令系统。当客户与MySQL 服务器连接时,他们之间所有的口令传送被加密,而且MySQL 支持主机认证。
    5. MySQL 能够提供很多不同的使用者界面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言界面,例如 C++,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于 Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上。

    4.2.3 缺点

    1. 不支持热备份。
    2. MySQL不支持自定义数据类型
    3. MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
    4. MySQL对存储过程和触发器支持不够良好。
    5. 尽管 MySQL 理论上仍是开源产品,也有人抱怨它诞生之后更新缓慢。然而,应该注意到有一些基于 MySQL 并完整集成的数据库(如 MariaDB),在标准的 MySQL 基础上带来了额外价值。
    6. MySQL对XML支持不够良好

    4.2.3 何时使用 ?

    1. 分布式操作:
      当你需要的比SQLite可以提供的更多时,把MySQL包括进你的部署栈,就像任何一个独立的数据库服务器,会带来大量的操作自由和一些先进的功能。
    2. 高安全性:
      MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护。
    3. Web网站 和 Web应用:
      绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行。
    4. 定制解决方案:

    如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式。



    4.3 SQL Server数据库概述

    4.3.1 介绍

    1. MicrosoftSQL Server是微软的产品,运行在Windows NT服务器上;
      优点

    4.3.2 优点

    1. 易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;
    2. 为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。 作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力;

    4.3.3 缺点

    1. SQL Server 只能windows上运行,没有丝毫开放性操作系统,系统稳定对数据库十分重要,WindowsX系列产品偏重于桌面应用,NT server只适合小型企业,而且windows平台可靠性、安全性和伸缩性非常有限。
    2. SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限;
    3. 没有获得任何安全证书。
    4. SQL Server 多用户时性能佳。


    4.4 PostgreSql数据库

    4.3.1 介绍

    PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL。

    4.4.2 优点

    1. PostgreSQL 是一个开源的,免费的,同时非常强大的关系型数据管理系统。
    2. PostgreSQL 背后有热忱而经验丰富的社区,可以通过知识库和问答网站获取支持,全天候免费。
    3. 即使其本身功能十分强大,PostgreSQL 仍附带有许多强大的开源第三方工具来辅助系统的设计、管理和使用。
    4. 可以用预先存储的流程来程序性扩展 PostgreSQL ,一个高级的关系型数据库理应如此。
    5. PostgreSQL 不只是一个关系型数据库,还是一个面向对象数据库——支持嵌套,及一些其他功能。

    4.4.3 缺点

    1. 对于简单而繁重的读取操作, 超过了 PostgreSQL 的杀伤力,可能会出现比同行(如MySQL)更低的性能。
    2. 按给出的该工具的性质,从普及度来说它还缺乏足够后台支撑,尽管有大量的部署——这可能会影响能够获得支持的容易程度。


    4.5 Access DB

    4.5.1 介绍

    1. Microsoft Access只是Microsoft整体数据管理产品战略的一部分。它基于Access Jet数据库引擎以自己的格式存储数据。像关系数据库一样,Microsoft Access也允许链接相关信息。

    4.4.2 优点

    1. Access数据库是Windows平台上最为兼容的文件型数据库

    4.4.3 缺点

    1. Access数据库存在文件上限2G大小的问题,单文件无法超过2G大小,如果一个表的内容超过2G便是灾难
    2. 独占数据库,无法多连接操作
    3. 没有事务的概念


    4.6 Sqlite数据库

    4.6.1 介绍

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

    4.6.2 优点

    1. 轻量级:SQLite是轻量级的,没有客户端和服务器端之分,并且是跨平台的关系型数据库。SQLite是一个单文件的,可以copy出来在其他地方用。
    2. 绿色版:SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以在部署的时候能够省去不少麻烦。
    3. 单一文件:所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
    4. 跨平台/可移植性:如果光支持主流操作系统,那就没啥好吹嘘的了。除了主流操作系统,SQLite还支持了很多冷门的操作系统。我个人比较感兴趣的是它对很多嵌入式系统(比如Android、WindowsMobile、Symbin、Palm、VxWorks等)的支持。
    5. 内存数据库(in-memory database):这年头,内存越来越便宜,很多普通PC都开始以GB为单位来衡量内存(服务器就更甭提了)。这时候,SQLite的内存数据库特性就越发显得好用。

    4.6.2 缺点

    1. 并发访问的锁机制:SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。
    2. SQL标准支持不全:在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。
    3. 网络文件系统(以下简称NFS):有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
    4. 授权协议(License):SQLite使用的是PublicDomain协议,这是最爽一种,可以放心大胆地用。
    5. 用户的普及程度:最近这几年,使用SQLite的人越来越多(从Google Trends可以反应出来)。包括一些大公司也开始把它整合到产品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。这说明它的健壮性、稳定性等方面不会有太大问题。
      6.开发的活跃程度:如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新。说明开发的活跃度还是非常高的。

    5.关系型数据库能干什么

    从数据结构上来看关系型数据库就是列表、集合。
    如:所有人的基本信息[UserInfo]

    id name age sex
    1 张三 16
    2 李四 17
    3 王五 18
    4 赵六 19

    通过以上的简单的结构固化的存储在关系型数据库中,当需要使用时使用,如需要查询年龄在17岁以上人的信息时.

    select * from UserInfo where age>17

    查询结果为:

    id name age sex
    3 王五 18
    4 赵六 19

    基于以上的基本功能逐步演变有:

    • 联表查询
    • 视图
    • 事务
    • 日志
    • 备份与恢复
    • 迁移
      等等

    6 关系数据库在某些方向上存在的乏力与瓶颈

    1. 传统的关系数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,同时也积累了大量的成功案例。在互联网领域,MySQL成为了绝对靠前的王者,毫不夸张的说,MySQL为互联网的发展做出了卓越的贡献。
    2. 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。
    3. 到了最近10年,网站开始快速发展。火爆的论坛、博客、sns、微博逐渐引领web领域的潮流。在初期,论坛的流量其实也不大,如果你接触网络比较早,你可能还记得那个时候还有文本型存储的论坛程序,可以想象一般的论坛的流量有多大。

    这个时候就出现如下几个方面的数据库开始在各自的业务场景下搔首弄姿

    6.1 HBase

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
    Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。Hbase是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多RDBMS系统的特性,比如列类型,辅助索引,触发器,和高级查询语言等待。那Hbase有什么特性呢?如下:

    6.1.1 特性

    1. 强读写一致,但是不是“最终一致性”的数据存储,这使得它非常适合高速的计算聚合
    2. 自动分片,通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
      自动的故障转移
      Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
      丰富的“简洁,高效”API,Thrift/REST API,Java API
      块缓存,布隆过滤器,可以高效的列查询优化
      操作管理,Hbase提供了内置的web界面来操作,还可以监控JMX指标
      什么时候用Hbase?

    6.1.2 Hbase不适合解决所有的问题:

    首先数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态
    其次,如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。
    最后,保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。
    Hbase在单机环境也能运行,但是请在开发环境的时候使用。

    6.1.3 优势

    1. 存储容量大,一个表可以容纳上亿行,上百万列;
    2. 可通过版本进行检索,能搜到所需的历史版本数据;
    3. 负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);
    4. 在第3点的基础上可有效避免单点故障的发生。

    6.1.4 缺点

    1. 基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
    2. node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
    3. 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
    4. API相比其它 NoSql 的相对笨拙。

    6.1.5 适用场景

    1. bigtable类型的数据存储;
    2. 对数据有版本查询需求;
    3. 应对超大数据量要求扩展简单的需求。

    6.2 Redis

    Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。

    6.2.1. 特点

    1. 数据格式

    Redis 通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash/Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)五种类型,操作非常方便。比如,如果你在做好友系统,查看自己的好友关系,如果采用其他的key-value系统,则必须把对应的好友拼接成字符串,然后在提取好友时,再把value进行解析,而redis则相对简单,直接支持list的存储(采用双向链表或者压缩链表的存储方式)。

    ⑴ String
    string 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个key对应一个value。
    string 类型是二进制安全的。意思是 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象 。
    string 类型是 Redis 最基本的数据类型,一个键最大能存储512MB。
    ⑵ Hash
    Redis hash 是一个键值对集合。
    Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
    ⑶ List
    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
    ⑷ Sets
    Redis的Set是string类型的无序集合。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    ⑸ sorted sets/zset
    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    1. 性能
      Redis数据库完全在内存中,因此处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录(测试数据的可参考这篇《Redis千万级的数据量的性能测试》)。
      Redis的数据能确保一致性——所有Redis操作是原子性(Atomicity,意味着操作的不可再分,要么执行要么不执行)的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。

    2. 持久化
      通过定时快照(snapshot)和基于语句的追加(AppendOnlyFile,aof)两种方式,redis可以支持数据持久化——将内存中的数据存储到磁盘上,方便在宕机等突发情况下快速恢复。

    3. CAP类别
      属于CP类型(了解更多)。

    4. Node下的使用
      node 下可使用 node_redis 来实现 redis 客户端操作:

    6.2.3. 优势

    1. 非常丰富的数据结构;
    2. Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;
    3. 数据存在内存中,读写非常的高速,可以达到10w/s的频率。

    6.2.3. 缺点

    1. Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题(出处);
    2. 持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;
    3. 由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

    6.2.4. 适用场景

    适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。更具体的可参照这篇《Redis 的 5 个常见使用场景》译文。

    在这篇文章中,我们将阐述 Redis 最常用的使用场景,以及那些影响我们选择的不同特性。
    
    1、会话缓存(Session Cache)
    最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?
    幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。
    
    2、全页缓存(FPC)
    除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
    再次以Magento为例,Magento提供一个插件来使用Redis作为 全页缓存后端。
    此外,对WordPress的用户来说,Pantheon有一个非常好的插件   wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
    
    3、队列
    Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。
    如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从 这里去查看。
    
    4、排行榜/计数器
    Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:
    当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:
    ZRANGE user_scores 0 10 WITHSCORES
    Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在 这里看到。
    
    5、发布/订阅
    最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。
    
    Redis提供的所有特性中,我感觉这个是喜欢的人最少的一个,虽然它为用户提供如果此多功能。
    

    6.3 MongoDB

    MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。

    6.3.1. 特点

    1. 数据格式
      在 MongoDB 中,文档是对数据的抽象,它的表现形式就是我们常说的 BSON(Binary JSON )。
      BSON 是一个轻量级的二进制数据格式。MongoDB 能够使用 BSON,并将 BSON 作为数据的存储存放在磁盘中。
      BSON 是为效率而设计的,它只需要使用很少的空间,同时其编码和解码都是非常快速的。即使在最坏的情况下,BSON格式也比JSON格式再最好的情况下存储效率高。

    6.3.2. 优势

    1. 强大的自动化 shading 功能(更多戳这里);
    2. 全索引支持,查询非常高效;
    3. 面向文档(BSON)存储,数据模式简单而强大。
    4. 支持动态查询,查询指令也使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
    5. 支持 javascript 表达式查询,可在服务器端执行任意的 javascript函数。

    6.3.3. 缺点

    1. 单个文档大小限制为16M,32位系统上,不支持大于2.5G的数据;
    2. 对内存要求比较大,至少要保证热数据(索引,数据及系统其它开销)都能装进内存;
    3. 非事务机制,无法保证事件的原子性。

    6.3.4. 适用场景

    1. 适用于实时的插入、更新与查询的需求,并具备应用程序实时数据存储所需的复制及高度伸缩性;
    2. 非常适合文档化格式的存储及查询;
    3. 高伸缩性的场景:MongoDB 非常适合由数十或者数百台服务器组成的数据库。
    4. 对性能的关注超过对功能的要求。

    6.4 Neo4j

    1. 在高速发展的互联网应用中,业务需求的频繁变更和数据的快速增长都要求数据库必须具有很强的适应能力。Neo4j图数据库正是一个能够适应这种业务需求不断变化和大规模数据增长而产生的数据库,它不但具有很强的适应能力,而且能够自始至终保持高效的查询性能。
    2. 现实世界中的一切事物都处在联系之中,如人际关系、电脑网络、地理数据、分子结构模型等,无一不处在纷繁复杂的联系之中。这种联系形成了一种互相关联的数据,联系才是数据的本质所在。传统的关系型数据库并不能很好地表现数据的联系,而一些NoSQL(Not Only SQL,非关系型数据库)数据库又不能表现数据之间的联系。同样是NoSQL的Neo4j图数据库是以图的结构形式来存储数据的,它所存储的就是联系的数据,是关联数据本身。
    3. 关联数据中的联系本来就很复杂,若要在关系型数据库中使用结构化形式来表现这种联系,则一般不能直接表示,处理起来既烦琐又费事,并且随着数据的不断增长,其访问性能将日趋下降。无数的开发人员和数据库管理人员都或多或少地使用过关系型数据库,在其应用的规模化进展过程中,对于数据库的性能优化往往捉襟见肘、陷入窘境。Neo4j没有模式结构的定义,也不需要这些定义,它使用非结构化的方式来存储关联数据,所以能够直接表现数据的关联特性。
    4. Neo4j不管是与关系型数据库相比,还是与其他NoSQL数据库相比,都具有很多前所未有的优势,这可以从以下几个方面来分析,主要表现为查询的高性能、设计的灵活性和开发的敏捷性等。

    6.3.2. 优点:

    数据的插入,查询操作很直观,不用再像之前要考虑各个表之间的关系。
    提供的图搜索和图遍历方法很方便,速度也是比较快的。

    6.3.2. 缺点:

    最不能让人忍受的就是极慢的插入速度。可能是因为创建节点和边的时候需要保存一些额外信息(为了查询服务)。不知道是不是我代码的问题,插入10000个节点,10000条边花了将近10分钟…
    超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。这个问题很早就有了,官方也说过会处理,然而现在仍然不能让人满意。
    提高数据库速度的常用方法就是多分配内存,然而看了官方操作手册,貌似无法直接设置数据库内存占用量,而是需要计算后为其”预留“内存…

    1. 适用场景
      鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。

    另外,针对Neo4j的缺点,有一款使用混合索引的数据库Arangodb也许是一个不错的考虑对象。根据其官网的说明,Arangodb不仅具有一般图形数据库的优点,而且在各种操作的速度上领先于Neo4j。

    https://www.arangodb.com/2016/04/index-free-adjacency-hybrid-indexes-graph-databases/

    ,10000条边花了将近10分钟…
    超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。这个问题很早就有了,官方也说过会处理,然而现在仍然不能让人满意。
    提高数据库速度的常用方法就是多分配内存,然而看了官方操作手册,貌似无法直接设置数据库内存占用量,而是需要计算后为其”预留“内存…

    1. 适用场景
      鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。

    另外,针对Neo4j的缺点,有一款使用混合索引的数据库Arangodb也许是一个不错的考虑对象。根据其官网的说明,Arangodb不仅具有一般图形数据库的优点,而且在各种操作的速度上领先于Neo4j。

    https://www.arangodb.com/2016/04/index-free-adjacency-hybrid-indexes-graph-databases/

    https://www.arangodb.com/2015/10/benchmark-postgresql-mongodb-arangodb/

    展开全文
  • 数据库是按照数据结构来组织、存储和管理数据的,共有三种模型 层次模型 以上下级关系组织数据,类似一颗“树” 网状模型 将每个数据节点和其他节点都连接起来,类似一张“网路” 关系模型(广泛应用) ...

    在这里插入图片描述

    关系型数据库

    【1】数据模型

    数据库是按照数据结构来组织、存储和管理数据的,共有三种模型

    • 层次模型

    以上下级关系组织数据,类似一颗“树”
    在这里插入图片描述

    • 网状模型

    将每个数据节点和其他节点都连接起来,类似一张“网路”
    在这里插入图片描述

    • 关系模型(广泛应用

    将数据看作一个二维表格
    在这里插入图片描述

    关系型数据模型使用起来最容易理解,也最简单,所以应用最广泛

    例如:
    在这里插入图片描述


    【2】数据类型

    对于一个关系数据表,除了定义每一列的名称外,还要定义每一列的数据类型

    关系型数据库支持的标准数据类型包括数值、字符串、时间……

    关键字 类型
    INT 整性 4字节
    BIGINT 长整型 8字节
    FLOAT 浮点数 4字节
    DOUBLE 浮点型 8字节
    DECIMAL(M,N) 高精度小数(M:总位数;N:小数位数)
    CHAR(N) 定长字符串
    VARCHAR(N) 边长字符串
    BOOLEAN 布尔类型
    DATE 日期类型
    TIME 时间类型
    DATETIME 日期和时间类型

    BIGINT和VARHCAR使用最广泛


    【3】主流关系型数据库

    • 商用数据库Oracle,SQL Server,DB2……
    • 开源数据库MySQL,PostgreSQL……
    • 桌面数据库:以微软Access为代表,适合桌面应用程序
    • 嵌入式数据库SQLite适合手机应用和桌面程序

    【4】SQL

    SQL(Structure Query Language 结构化查询语言)

    SQL对数据库的数据进行CURD(增删改查),大部分的数据库都是支持SQL的,但同时也都做了扩展(“方言”)

    SQL定义了如下几种操作数据库的能力:

    1. DDL(Data Definition Language)
    • 允许用户定义数据,创建表,删除表,修改表结构
    • DDL通常由数据库管理人员执行
    1. DML(Data Manipulation Language)

    DML给用户提供了添加、删除、更新数据的能力

    1. DQL(Data query Language)

    DQL允许用户查询数据

    SQL语言特点
    SQL语言关键字不区分大小写

    为了更好的规范,关键字大写,表名和列名都小写

    展开全文
  • 关系型数据库基础及应用(一)

    千次阅读 2018-05-07 11:34:22
    数据库原理数据库简介1、DB和DBMS· 数据库(Database,...2、关系型数据库的简介· 关系:描述两个元素间的关联或对应关系· 使用关系模型把数据组织到二维数据(Table)中· 产品化:Oracle、DB2、Sybase、SQ...
  • 数据库

    2020-07-29 17:13:35
    需要表格来存储数据的数据库,关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系...
  •  DB和DBMSDB:database的简称,即数据库,是按照数据结构来组织、存储和管理数据的仓库, 其中关系型数据库的就是按照二维表来阻止,存储和管理数据的仓库DBMS:databasemanagement system ,即数据库管...
  • 数据库学习

    2020-12-22 09:03:14
    \quad关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。 \quad关系型数据库中有许多张表,每张表表示现实世界的各种实体。各种实体之间的联系均用关系模型来...
  • MySQL是关系型数据库管理系统,按照数据结构在组织、存储和管理数据的仓库,每个数据库都有一个或多个来存储数据信息。假如使用文本文件来存储数据,不便于管理、操作且存取数据速度慢而且不保证多线程访问时数据...
  • 关系型数据库是由多张能互相联接的二维行列表格组成的数据库 主关键字(primary key)是中的一个或多个字段,它的值用于唯一地标识中的某一条记录 外键表示了两个关系之间的相关联系。以另一个关系的外键...
  • 关系模型的数据结构二维表结构,它是关系型数据库的基础。 关系数据模型由关系数据结构、关系操作和关系完整性约束三部分组成。 关系必须规范化的,满足一定的规范条件。 关系数据库必须满足1NF范式,即...
  • 数据库-mysql概述

    2018-10-17 23:23:19
    1、数据库概念 ... 关系型数据库就是由二维表(表)及其之间的联系所组成的一个数据组织 3、关系型数据库特点 容易理解、切合逻辑世界的概念 使用方便,采用sql语言进行操作 易于维护,丰富的完整性 4、...
  • mysql数据库总结

    2021-01-23 16:45:23
    关系型数据库是建立在关系基础上的数据库系统,借助于集合代数等数学的概念和方法来处理数据库中的数据。 关系型数据库核心元素,核心是二维表存储数据  数据行、row 记录数据表由数据行和数据列组成  数据列...
  • 数据库MySQL之概念

    2020-09-20 09:15:59
    关系模型数据库就是由二维表以其之间的联系所组成的一个数据组织 关系型数据库的特点: 容易理解、切合逻辑世界的概念 使用方便,采用SQL语言进行操作 易于维护,丰富完整性 非关系型数据库–NoSQL Key-value...
  • 数据库 MySQL (1)

    2020-10-03 22:11:46
    简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。举例:MySQL、Oracle、SQL Server 非关系型数据库: 指非关系型的,分布式的,且一般不保证遵循...
  • Phase2 Day16 数据库SQL

    2020-04-24 02:12:26
    关系型数据库模型把复杂的数据结构归结为简单的二维表(关系表) 非关系型数据库关系型数据库也被称为NoSQL数据库。NoSQL的产生并不是要否定关系型数据库,而是作为关系型数据库的一个有效补充 术语 数据库系统...
  • 数据库入门

    2020-01-18 19:40:46
    3.关系型数据库:使用关系模型把数据组织到数据中 4.数据:关系数据库基本存储结构,二维数据由行(记录)列(字段) 二.安装数据库 1.下载mysql 2.配置mysql Detailed Configuration(详细配置)-Developer Machine...
  • 数据库分类略讲

    2020-10-24 12:28:33
    指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,好比Excel文件中的表格,强调使用表格的方式存储数据。 关系型数据库中核心元素 数据行 数据列 数据 数据库(数据的集合) ...
  • mariadb数据库简介

    2019-05-31 19:06:00
    mariadb(默认端口3306) 什么是数据库?...由很多二维表(x横y竖)组成,一行代表一条信息,一列代表类型 表与表之间可以有联系 基于硬盘形式存储数据 什么是非关系数据库(nosql意思not onl...
  • 指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,好比Excel文件中的表格,强调使用表格的方式存储数据。 关系型数据库效果图: 关系型数据库中核心元素 数据行 数据列 数据...
  • QT 数据库及其使用

    2018-10-12 09:06:48
    按照二维表结构方式组织的数据集合,二维表由行和列组成,表的行称为元组,列称为属性,对表的操作称为关系运算,主要的关系运算有投影、选择和连接等。 3、数据库管理系统(DataBase Management System,DBM...
  • 数据库简介

    2020-11-22 18:39:57
    关系型数据库:使用关系模型(记录组或二维数据)把数据组织到数据中 – 数据:关系数据库基本存储结构,二维数据由行,列组成。 一行称为一个记录(元组), 一列称为一个字段, 每列的标题称为字段名...
  • MYSQL | 1.数据库介绍

    2020-07-23 22:07:26
    指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,好比Excel文件中的表格,强调使用表格的方式存储数据(如下图) 关系型数据库中核心元素 数据行 数据列 数据 数据库(数据的...
  • 数据库概念  数据库(Database)是按照数据结构来组织、存储和管理数据,建立在计算机存储设备上的仓库。  简单说,数据库就是存放数据的仓库。和图书馆存放书籍、粮仓... 关系模型:利用关系二维表),去描...
  • 数据库基础面试题

    2019-04-25 14:02:46
    关系型数据库是由多张能互相联接的二维行列表格组成的数据库 主关键字(primary key)是中的一个或多个字段,它的值用于唯一地标识中的某一条记录 外键表示了两个关系之间的相关联系。以另一个关系的外键作主...
  • mysql数据库

    2018-05-14 11:16:49
    数据库的概念数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。数据库有很多种类型,从最简单的...传 统的关系数据模型搜索、行数据,存储于数据库,可用二维表结构表示。 ...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

关系型数据库是按照二维表