3

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

 2 years ago
source link: https://allenwind.github.io/blog/2434/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

今天来对比下关系型数据库和非关系型数据库。包括各自的优势和劣势。

关系型数据库优势

  1. 关系型数据库的性能不低,它具有非常高的通用性和非常高的性能。
  2. 关系型数据库支持事务,保持数据的一致性。
  3. 由于以标准化为前提,数据更新的开销很小。
  4. 支持JOIN查询

关系型数据库不擅长处理

  • 大量数据的写入处理
    数据库扩展中,使用主从模式可以到达规模化,但在写入上遇到困难。主数据库负责写,多个从数据库负责读。当写移到瓶颈时,通过扩展主数据库就不简单了。为了简单起见,考虑二元主数据库。那么主数据库在分表有两种方法。同一张表关联复制到两台服务器上,或者,不同表分切到不同服务器上。前者遇到的问题就是,写入时两台服务器可能遇到数据不一致的情况(需要对每个表的处理分配到不同的主服务器上,这个不简单)。后者数据分配上直接在内存中完成,减少磁盘I/O操作,但,很难进行JOIN操作。分别存储在不同服务器上的表之间无法进行JOIN操作

  • 表在有数据更新的情况下做索引和表结构、模式(schema)变更
    为了加快查询速作索引,为了增加必要的字段作表的结果变更,这些处理都需要多表进行共享锁定。这两个操作期间,其他的数据变更操作都无法进行。

名称 锁的影响范围 别名

共享锁 其他连接可以读取数据但不能修改数据 读锁

排他锁 其他连接无法读取数据,也不能修改数据 写锁

  • 对简单查询需要返回快速结果的处理
    关系型数据库专门使用SQL语言进行数据的读取,它需要对SQL语句进行解析,同时要多表进行锁定和解锁,这些都需要额外的开销。如果不使用SQL解析过程,也可以使用HandlerSocket

    HandlerSocket is a NoSQL plugin for MySQL, working as a daemon inside the mysqld process, to accept tcp connections, and execute requests from clients. HandlerSocket does not support SQL queries; instead it supports simple CRUD operations on tables. 来自Github

  • 当应用业务本身字段并不固定的情况
    上述讲了表结构变更期间数据更新无法进行,因此业务本身如果是字段不固定的情况,那么使用关系型数据库很难支持。尽管可以,但键表在有数据更新的情况下做索引和表结构、模式(schema)变更

非关系型数据库的优势

  • 利于数据的分散
    NoSQL在设计上不支持JOIN操作,各个数据都可以独立设计,不需要考虑它们的关联作用而把数据放到同一台服务器中,这样很利于数据分散到多台服务器中。由于分散到多台服务器中,大量数据的写入支持会更好。同时,数据的读入也是相当容易。

  • 流畅地对数据进行缓存

  • 对数组类型数据进行高速处理

非关系型数据库不擅长处理

  • JOIN操作

  • 严格的关系型数据库的事务支持

关系型数据库和非关系型数据库如何选择

NoSQL的出现不是为了取代关系型数据库,而是作为关系型数据库的补充。

在具体的业务情景下,关系型数据库擅长处理的就使用关系型数据库,关系型数据库不擅长处理的就使用非关系型数据库。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK