精华内容
下载资源
问答
  • 数据库锁的几种类型

    千次阅读 2018-03-21 12:13:57
    1 前言数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2...

    1 前言

    数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。

    2 锁的种类

    1. 共享锁(Shared lock)。
      例1:
      ----------------------------------------
      T1:    select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象)
      T2:    update table set column1='hello'
      
      过程:
      
      T1运行 (加共享锁)
      T2运行
      If T1 还没执行完
          T2等......
      else
          锁被释放
          T2执行
      endif
      
      T2之所以要等,是因为T2在执行update前,试图对table表加一个排他锁,
      而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1
      执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。
      
      例2:
      ----------------------------------------
      T1:    select * from table
      T2:    select * from table
      
      这里T2不用等待T1执行完,而是可以马上执行。
      
      分析:
      T1运行,则table被加锁,比如叫lockA
      T2运行,再对table加一个共享锁,比如叫lockB。
      
      两个锁是可以同时存在于同一资源上的(比如同一个表上)。这被称为共
      享锁与共享锁兼容。这意味着共享锁不阻止其它session同时读资源,但阻
      止其它session update
      
      例3:
      ----------------------------------------
      T1:    select * from table
      T2:    select * from table
      T3:    update table set column1='hello'
      
      这次,T2不用等T1运行完就能运行,T3却要等T1和T2都运行完才能运行。
      因为T3必须等T1和T2的共享锁全部释放才能进行加排他锁然后执行update
      操作。
      
      例4:(死锁的发生)
      ----------------------------------------
      T1:
      begin tran
      select * from table (holdlock) (holdlock意思是加共享锁,直到事物结束才释放)
      update table set column1='hello'
      
      T2:
      begin tran
      select * from table(holdlock)
      update table set column1='world'
      
      假设T1和T2同时达到select,T1对table加共享锁,T2也对加共享锁,当
      T1的select执行完,准备执行update时,根据锁机制,T1的共享锁需要升
      级到排他锁才能执行接下来的update.在升级排他锁前,必须等table上的
      其它共享锁释放,但因为holdlock这样的共享锁只有等事务结束后才释放,
      所以因为T2的共享锁不释放而导致T1等(等T2释放共享锁,自己好升级成排
      他锁),同理,也因为T1的共享锁不释放而导致T2等。死锁产生了。
      
      例5:
      ----------------------------------------
      T1:
      begin tran
      update table set column1='hello' where id=10
      
      T2:
      begin tran
      update table set column1='world' where id=20
      
      这种语句虽然最为常见,很多人觉得它有机会产生死锁,但实际上要看情
      况,如果id是主键上面有索引,那么T1会一下子找到该条记录(id=10的记
      录),然后对该条记录加排他锁,T2,同样,一下子通过索引定位到记录,
      然后对id=20的记录加排他锁,这样T1和T2各更新各的,互不影响。T2也不
      需要等。
      
      但如果id是普通的一列,没有索引。那么当T1对id=10这一行加排他锁后,
      T2为了找到id=20,需要对全表扫描,那么就会预先对表加上共享锁或更新
      锁或排他锁(依赖于数据库执行策略和方式,比如第一次执行和第二次执行
      数据库执行策略就会不同)。但因为T1已经为一条记录加了排他锁,导致
      T2的全表扫描进行不下去,就导致T2等待。
      
      死锁怎么解决呢?一种办法是,如下:
      例6:
      ----------------------------------------
      T1:
      begin tran
      select * from table(xlock) (xlock意思是直接对表加排他锁)
      update table set column1='hello'
      
      T2:
      begin tran
      select * from table(xlock)
      update table set column1='world'
      
      这样,当T1的select 执行时,直接对表加上了排他锁,T2在执行select时,就需要等T1事物完全执行完才能执行。排除了死锁发生。
      但当第三个user过来想执行一个查询语句时,也因为排他锁的存在而不得不等待,第四个、第五个user也会因此而等待。在大并发
      情况下,让大家等待显得性能就太友好了,所以,这里引入了更新锁。
      
    2. 更新锁(Update lock)
      为解决死锁,引入更新锁。
      
      例7:
      ----------------------------------------
      T1:
      begin tran
      select * from table(updlock) (加更新锁)
      update table set column1='hello'
      T2:
      begin tran
      select * from table(updlock)
      update table set column1='world'
      
      更新锁的意思是:“我现在只想读,你们别人也可以读,但我将来可能会做更新操作,我已经获取了从共享锁(用来读)到排他锁
      (用来更新)的资格”。一个事物只能有一个更新锁获此资格。
      
      T1执行select,加更新锁。
      T2运行,准备加更新锁,但发现已经有一个更新锁在那儿了,只好等。
      
      当后来有user3、user4...需要查询table表中的数据时,并不会因为T1的select在执行就被阻塞,照样能查询,相比起例6,这提高
      了效率。
      
      例8:
      ----------------------------------------
      T1:    select * from table(updlock)    (加更新锁)
      T2:    select * from table(updlock)    (等待,直到T1释放更新锁,因为同一时间不能在同一资源上有两个更新锁)
      T3:    select * from table (加共享锁,但不用等updlock释放,就可以读)
      
      这个例子是说明:共享锁和更新锁可以同时在同一个资源上。这被称为共享锁和更新锁是兼容的。
      
      例9:
      ----------------------------------------
      T1:
      begin
      select * from table(updlock)      (加更新锁)
      update table set column1='hello'  (重点:这里T1做update时,不需要等T2释放什么,而是直接把更新锁升级为排他锁,然后执行update)
      T2:
      begin
      select * from table               (T1加的更新锁不影响T2读取)
      update table set column1='world'  (T2的update需要等T1的update做完才能执行)
      
      我们以这个例子来加深更新锁的理解,
      
      第一种情况:T1先达,T2紧接到达;在这种情况中,T1先对表加更新锁,T2对表加共享锁,假设T2的select先执行完,准备执行update,
      发现已有更新锁存在,T2等。T1执行这时才执行完select,准备执行update,更新锁升级为排他锁,然后执行update,执行完成,事务
      结束,释放锁,T2才轮到执行update。
      
      第二种情况:T2先达,T1紧接达;在这种情况,T2先对表加共享锁,T1达后,T1对表加更新锁,假设T2 select先结束,准备
      update,发现已有更新锁,则等待,后面步骤就跟第一种情况一样了。
      
      这个例子是说明:排他锁与更新锁是不兼容的,它们不能同时加在同一子资源上。
      
      
    3. 排他锁(独占锁,Exclusive Locks)
      这个简单,即其它事务既不能读,又不能改排他锁锁定的资源。
      例10
      T1:    update table set column1='hello' where id<1000
      T2:    update table set column1='world' where id>1000
      
      假设T1先达,T2随后至,这个过程中T1会对id<1000的记录施加排他锁.但不会阻塞T2的update。
      
      例11 (假设id都是自增长且连续的)
      T1:    update table set column1='hello' where id<1000
      T2:    update table set column1='world' where id>900
      
      如同例10,T1先达,T2立刻也到,T1加的排他锁会阻塞T2的update.
      
    4. 意向锁(Intent Locks)
      意向锁就是说在屋(比如代表一个表)门口设置一个标识,说明屋子里有人(比如代表某些记录)被锁住了。另一个人想知道屋子
      里是否有人被锁,不用进屋子里一个一个的去查,直接看门口标识就行了。
      
      当一个表中的某一行被加上排他锁后,该表就不能再被加表锁。数据库程序如何知道该表不能被加表锁?一种方式是逐条的判断该
      表的每一条记录是否已经有排他锁,另一种方式是直接在表这一层级检查表本身是否有意向锁,不需要逐条判断。显然后者效率高。
      
      例12:
      ----------------------------------------
      T1:    begin tran
             select * from table (xlock) where id=10  --意思是对id=10这一行强加排他锁
      T2:    begin tran
             select * from table (tablock)     --意思是要加表级锁
             
      假设T1先执行,T2后执行,T2执行时,欲加表锁,为判断是否可以加表锁,数据库系统要逐条判断table表每行记录是否已有排他锁,
      如果发现其中一行已经有排他锁了,就不允许再加表锁了。只是这样逐条判断效率太低了。
      
      实际上,数据库系统不是这样工作的。当T1的select执行时,系统对表table的id=10的这一行加了排他锁,还同时悄悄的对整个表
      加了意向排他锁(IX),当T2执行表锁时,只需要看到这个表已经有意向排他锁存在,就直接等待,而不需要逐条检查资源了。
      
      例13:
      ----------------------------------------
      T1:    begin tran
             update table set column1='hello' where id=1
      T2:    begin tran
             update table set column1='world' where id=1
      
      这个例子和上面的例子实际效果相同,T1执行,系统对table同时对行家排他锁、对页加意向排他锁、对表加意向排他锁。
      
    5. 计划锁(Schema Locks)
      例14:
      ----------------------------------------
      alter table .... (加schema locks,称之为Schema modification (Sch-M) locks
      
      DDL语句都会加Sch-M锁
      该锁不允许任何其它session连接该表。连都连不了这个表了,当然更不用说想对该表执行什么sql语句了。
      
      例15:
      ----------------------------------------
      用jdbc向数据库发送了一条新的sql语句,数据库要先对之进行编译,在编译期间,也会加锁,称之为:Schema stability (Sch-S) locks
      
      select * from tableA
      
      编译这条语句过程中,其它session可以对表tableA做任何操作(update,delete,加排他锁等等),但不能做DDL(比如alter table)操作。
      
    6. Bulk Update Locks 主要在批量导数据时用(比如用类似于oracle中的imp/exp的bcp命令)。不难理解,程序员往往也不需要关心,不赘述了。

    3 何时加锁?

    如何加锁,何时加锁,加什么锁,你可以通过hint手工强行指定,但大多是数据库系统自动决定的。这就是为什么我们可以不懂锁也可
    以高高兴兴的写SQL。
    
    例15:
    ----------------------------------------
    T1:    begin tran
           update table set column1='hello' where id=1
    T2:    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  -- 事物隔离级别为允许脏读
           go
           select * from table where id=1
    这里,T2的select可以查出结果。如果事物隔离级别不设为脏读,则T2会等T1事物执行完才能读出结果。
    
    数据库如何自动加锁的?
    
    1) T1执行,数据库自动加排他锁
    2) T2执行,数据库发现事物隔离级别允许脏读,便不加共享锁。不加共享锁,则不会与已有的排他锁冲突,所以可以脏读。
    
    例16:
    ----------------------------------------
    T1:    begin tran
           update table set column1='hello' where id=1
    T2:    select * from table where id=1 --为指定隔离级别,则使用系统默认隔离级别,它不允许脏读
    
    如果事物级别不设为脏读,则:
    1) T1执行,数据库自动加排他锁
    2) T2执行,数据库发现事物隔离级别不允许脏读,便准备为此次select过程加共享锁,但发现加不上,因为已经有排他锁了,所以就
       等啊等。直到T1执行完,释放了排他锁,T2才加上了共享锁,然后开始读....
    

    4 锁的粒度

    锁的粒度就是指锁的生效范围,就是说是行锁,还是页锁,还是整表锁. 锁的粒度同样既可以由数据库自动管理,也可以通过手工指定hint来管理。

    例17:
    ----------------------------------------
    T1:    select * from table (paglock)
    T2:    update table set column1='hello' where id>10
    
    T1执行时,会先对第一页加锁,读完第一页后,释放锁,再对第二页加锁,依此类推。假设前10行记录恰好是一页(当然,一般不可能
    一页只有10行记录),那么T1执行到第一页查询时,并不会阻塞T2的更新。
    
    例18:
    ----------------------------------------
    T1:    select * from table (rowlock)
    T2:    update table set column1='hello' where id=10
    
    T1执行时,对每行加共享锁,读取,然后释放,再对下一行加锁;T2执行时,会对id=10的那一行试图加锁,只要该行没有被T1加上行锁,
    T2就可以顺利执行update操作。
    
    例19:
    ----------------------------------------
    T1:    select * from table (tablock)
    T2:    update table set column1='hello' where id = 10
    
    T1执行,对整个表加共享锁. T1必须完全查询完,T2才可以允许加锁,并开始更新。
    
    以上3例是手工指定锁的粒度,也可以通过设定事物隔离级别,让数据库自动设置锁的粒度。不同的事物隔离级别,数据库会有不同的
    加锁策略(比如加什么类型的锁,加什么粒度的锁)。具体请查联机手册。
    

    5 锁与事物隔离级别的优先级

    手工指定的锁优先,
    例20:
    ----------------------------------------
    T1:    GO
           SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
           GO
           BEGIN TRANSACTION
           SELECT * FROM table (NOLOCK)
           GO
    T2:    update table set column1='hello' where id=10
    
    T1是事物隔离级别为最高级,串行锁,数据库系统本应对后面的select语句自动加表级锁,但因为手工指定了NOLOCK,所以该select
    语句不会加任何锁,所以T2也就不会有任何阻塞。
    

    6 数据库的其它重要Hint以及它们的区别

    1) holdlock 对表加共享锁,且事物不完成,共享锁不释放。
    2) tablock  对表加共享锁,只要statement不完成,共享锁不释放。
       与holdlock区别,见下例:
       例21
       ----------------------------------------
       T1:
       begin tran
       select * from table (tablock)
       T2:
       begin tran
       update table set column1='hello' where id = 10
    
       T1执行完select,就会释放共享锁,然后T2就可以执行update. 此之谓tablock. 下面我们看holdlock
       例22
       ----------------------------------------
       T1:
       begin tran
       select * from table (holdlock)
       T2:
       begin tran
       update table set column1='hello' where id = 10
       
       T1执行完select,共享锁仍然不会释放,仍然会被hold(持有),T2也因此必须等待而不能update. 当T1最后执行了commit或
       rollback说明这一个事物结束了,T2才取得执行权。
      
    3) TABLOCKX 对表加排他锁
      
       例23:
       ----------------------------------------
       T1:    select * from table(tablockx) (强行加排他锁)
       其它session就无法对这个表进行读和更新了,除非T1执行完了,就会自动释放排他锁。
       例24:
       ----------------------------------------
       T1:    begin tran
              select * from table(tablockx)
       这次,单单select执行完还不行,必须整个事物完成(执行了commit或rollback后)才会释放排他锁。
      
    4) xlock 加排他锁
       那它跟tablockx有何区别呢?
    
       它可以这样用,
       例25:
       ----------------------------------------
       select * from table(xlock paglock) 对page加排他锁
       而TABLELOCX不能这么用。
    
       xlock还可这么用:select * from table(xlock tablock) 效果等同于select * from table(tablockx)
    

    7 锁的超时等待

    例26

    SET LOCK_TIMEOUT 4000 用来设置锁等待时间,单位是毫秒,4000意味着等待
    4秒可以用select @@LOCK_TIMEOUT查看当前session的锁超时设置。-1 意味着
    永远等待。
    
    T1: begin tran
        udpate table set column1='hello' where id = 10
    T2: set lock_timeout 4000
        select * from table wehre id = 10
    

    T2执行时,会等待T1释放排他锁,等了4秒钟,如果T1还没有释放排他锁,T2就会抛出异常: Lock request time out period exceeded.

    8 附:各种锁的兼容关系表

    | Requested mode                     | IS  | S   | U   | IX  | SIX | X  |
    | Intent shared (IS)                 | Yes | Yes | Yes | Yes | Yes | No |
    | Shared (S)                         | Yes | Yes | Yes | No  | No  | No |
    | Update (U)                         | Yes | Yes | No  | No  | No  | No |
    | Intent exclusive (IX)              | Yes | No  | No  | Yes | No  | No |
    | Shared with intent exclusive (SIX) | Yes | No  | No  | No  | No  | No |
    | Exclusive (X)                      | No  | No  | No  | No  | No  | No |
    

    9 如何提高并发效率

    1. 悲观锁:利用数据库本身的锁机制实现。通过上面对数据库锁的了解,可以根据具体业务情况综合使用事务隔离级别与合理的手工指定锁的方式比如降低锁的粒度等减少并发等待。
    2. 乐观锁:利用程序处理并发。原理都比较好理解,基本一看即懂。方式大概有以下3种
      1. 对记录加版本号.
      2. 对记录加时间戳.
      3. 对将要更新的数据进行提前读取、事后对比。

    不论是数据库系统本身的锁机制,还是乐观锁这种业务数据级别上的锁机制,本质上都是对状态位的读、写、判断。

    展开全文
  • 数据库备份的几种类型

    千次阅读 2017-07-19 10:29:29
    这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。 2、事务日志备份 ...
    1、完全备份
    这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
    2、事务日志备份
    事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。
    3、差异备份
    也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。
    4、文件备份
    数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。
    展开全文
  • 数据库中有哪几种数据类型

    千次阅读 2019-12-28 13:15:37
    数据库中有哪几种数据类型? 整型: tiny int,small int,medium int,int,big int,大小分别为 8,16,24,32,64位。 浮点型: float、double 字符串类型: 定长的 char,变长的 varchar。在进行存储时,char ...

    数据库中有哪几种数据类型?

    1. 整型: tiny int,small int,medium int,int,big int,大小分别为 8,16,24,32,64位。(1字节 = 8 位)
    2. 浮点型: float、double
    3. 字符串类型: 定长的 char,变长的 varchar。在进行存储时,char 会删除末尾的空格,varchar 会保留末尾的空格。
    4. 日期时间类型: 与时区无关的 data time,与时区有关的 time stamp。
    展开全文
  • DDM逻辑表支持片表、全局表、单表和普通表四种类型片表 DDM实例在RDS实例上创建多个物理库,每一个物理库称为片,在片上建立的表,叫片表(不包括单表和全局表)。数据按照片规则被分配到不同的...

    目录

    福利发放

    逻辑表类型


    福利发放

    目前华为云分布式数据库中间件DDM有试用体验活动,申请华为云账号后可以单击如下图片一键体验:

    DDM1.PNG

    逻辑表类型

    DDM逻辑表支持分片表、全局表、单表和普通表四种类型。

    • 分片表

      DDM实例在RDS实例上创建多个物理库,每一个物理库称为分片,在分片上建立的表,叫分片表(不包括单表和全局表)。数据按照分片规则被分配到不同的分片上,分片上的数据支持分布式并行计算。

    • 全局表

      将一些数据量小且更新操作不频繁的数据表,如字典表、配置表等,在所有分片上都存储全量数据,提升JOIN效率,这类表叫全局表。

    • 单表

      当表数据量不大,且不需要与分片表进行连接查询时,可以只在DDM的默认分片上建表与存储数据,这类表称为单表。

      单表只能通过MySQL客户端或者应用程序连接逻辑库创建。

    • 普通表

      DDM将未配置sharding的表,以单表的形式存储在其中一个默认分片上。

    每种表的创建方法请参见下表。

    表1 各类型逻辑表创建方法

    逻辑库类型

    逻辑表类型

    建表方法

    拆分

    分片表

    通过管理控制台创建。

    拆分

    全局表

    拆分

    单表

    通过sql客户端或者应用程序直接发起创建请求,建表语句兼容MySQL的CREATE TABLE语法。

    非拆分

    普通表

     

    展开全文
  • 常见的数据库哪几种

    千次阅读 2020-06-01 10:58:29
    SQL(StructuredQueryLanguage,结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。 SQL是IBM公司于1975—1979年之间开发出来的,在20世纪随着...
  • 分布式数据库可以分为哪几种? 是按照什么来分类的? 求助!!!
  • Oracle数据库涉及的几种类型的用户

    千次阅读 2013-01-03 21:57:17
    Oracle数据库用户可以分为种类型,即数据库管理员、安全员、网络管理员、应用程序开发员、应用程序管理员以及数据库用户。 1、数据库管理员 每个数据库都至少有一个数据库管理员。Oracle数据库系统可能非常的...
  • 数据库的五索引类型

    万次阅读 多人点赞 2019-03-15 21:24:13
    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的...
  • 数据库索引常见四种类型

    万次阅读 2019-03-19 12:53:34
    索引四类: index ----普通的索引,数据可以重复 fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 unique ----唯一索引,唯一索引,要求所有记录都唯一 primary ...
  • 数据库索引有哪几种

    千次阅读 2017-08-29 09:31:44
    https://zhidao.baidu.com/question/306752012277622484.html
  • 几种主流数据库类型简介

    万次阅读 2014-04-14 21:58:43
    1.IBM的DB2  DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台... IBM公司研制的一关系型数据库系统。DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于
  • 种类型有哪些代表性的产品? 这还是关于数据库如何选型的问题, 针对不同的业务场景,如何选择适配的数据库? 业务场景如下类: 物联网 交易关系 关系分析 – KV分析 KV文档 物联网对应的...
  • 导入数据库的方法 一、excel数据导入到数据库 select* into ccc from  OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="G:\tenptable123";User ID=recipe_db_user;Password=recipe_db_user;Extended...
  • 数据库锁有几种

    千次阅读 2016-07-15 16:08:48
    锁的类型有三:  共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。  排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页...
  • MySQL数据库优化的几种方式

    万次阅读 2018-08-07 20:28:13
    分享一下常见的几种MySQL数据优化方式。。。。。。。 选取最适合的字段属性 1、MySQL可以很好的支持数据量的很大的存取,但是一般说来,数据库中的表越小其查询的速度就也快。所以,可以在建表的时候,为了获取更好...
  • 数据库的锁有哪几种?语句怎么实现

    千次阅读 2019-09-17 09:01:34
      数据库是一个多用户共享的资源,当多个用户并发的存储数据时,数据库就会产生多个事物同时存储同一数据的情况。若对并发操作不加控制就可能读取或存取不正确的数据,破坏数据的不正确性(脏读,不可重复读,幻读...
  • 几种开源数据库

    万次阅读 2019-05-01 17:11:23
    NoSQL数据库一天天变得越来越流行。以下是最好的,免费,开源NoSQL数据库的一个列表。其中MongoDB是这些开源NoSQL数据库中最好的。这个列表包括:MongoDB, Cassandra, CouchDB, Hypertable, Redis, Riak, Neo4j, ...
  • Mysql索引有哪几种类型

    万次阅读 2019-02-27 10:35:15
    索引是一数据库中单列或者多列的值进行排序的结构。应用索引可以大幅度提高查询的速度。 用户通过索引查询数据,不但可以提高查询速度,也可以降低服务器的负载。用户查询数据时,系统可以不必遍历表中的所有...
  • 数据库有很多,根据存储模型划分,数据库类型主要可分为:网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database)等。...
  • 存储类型 代表 特点 列存储 Hbase Cassandra Hypertable 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 文档存储...
  • oracle数据库分区的几种方式

    千次阅读 2017-03-14 19:27:34
    散列分区为通过指定分区编号来均匀分布数据的一分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。 例一: CREATE TABLE HASH_TABLE  (  COL NUMBER(8),  INF VARCHAR2(100)  )...
  • MYSQL数据库索引类型介绍

    千次阅读 多人点赞 2020-04-20 18:24:46
    MYSQL数据库索引类型 主键索引: 主键是一唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。 唯一索引: 索引列的所有值都只能出现一次,即必须唯一,值可以为空。 普通索引 : 基本的...
  • 通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。限制数据类型,缺省值、规则、约束、是否可以为空,域完整性可以确保不会输入无效的值。...
  • 数据库Mybatis优化的几种方式 1.选取最适用的字段属性 ,节省不必要的空间浪费 ​ 比如定义快递的字段,像韵达快递,如果将字段长度设置为255,那是不是造成很大的空间浪费呢? ​ 还有某些如省份、性别的字段,可以...
  • 几种分布式数据库优缺点一览 1.为什么选择分布式数据库? 优点如下: (1)具有灵活的体系结构 (2)适应分布式的管理和控制机构 (3)经济性能优越 (4)系统的可靠性高、可用性好 (5)局部应用的响应速度快 (6)...
  • 数据库几种连接查询

    千次阅读 2017-08-22 12:21:10
    连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 一个表中。当检索数据时,通过...
  • Mysql数据库几种搜索引擎

    万次阅读 2017-07-10 15:46:00
    MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三...下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数据表格...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 408,407
精华内容 163,362
关键字:

数据库分为哪几种类型