我们常常会听见这样的说法,传统的RDBMS已经过时了,NoSQL才是未来的主流,事实是这样的吗?这篇文章我们将要探索一下这二者。
SQL | NoSQL | |
---|---|---|
数据存储 | 存储在一个关系模型中,用行存储一个实体的数据,用列存储各个类型的数据 | 包含了许多数据库,每一个都有不同的数据存储模型,例如文件,图表,键值对等 |
结构和灵活性 | 每一条记录都是一样的形式,也就说我们需要提前决定需要哪些列,如果需要修改数据时则需要下线后修改 | 动态结构,可以在线上修改信息,每行不需要包括每一列的数据 |
可扩展性 | 竖向扩展,数据越大则需要越大的服务器,花费也因此越高。当然我们也可以用分布式的方法,将数据分布在不同的服务器上,这是一个困难的操作且消耗时间 | 可以水平扩展,也就是在多个服务器间扩展 across servers。服务器可以是便宜的家用电脑或者云服务器,更加节省开销。有的 NoSQL 技术甚至可以自动分布数据 |
ACID 原子性、一致性、隔离性、持久性 | 绝大多数关系型数据库都是符合ACID的 | 每个数据库都不相同,很多 NoSQL 都牺牲了 ACID 以换取高性能和可扩展性 |
- Atomicity(原子性):一个事务(transaction)中的所有操作全部完成,或者全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态
- Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
- Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
NoSQL的种类
- 文档数据库 Document Databases
不用行列存储,而是存在文档中,没一个文档的结构的可能不一样。著名的有 CouchDB and MongoDB。 - 键值对存储 Key-Value Stores
键为属性名字,链接到一个值,著名的有 Redis, Voldemort (developed by LinkedIn) and Dynamo (developed by Amazon). - 图表数据库 Graph Databases
适用于更加适合用图表存储的数据,节点表示实体,属性表示实体的信息,用连线表示实体的关系。著名的有 Neo4J and InfiniteGraph. - 纵列数据库 Columnar (or Wide-Column) Databases
纵列无需提前决定需要哪些列,每一行可以拥有不同数量的列数据,适用于分析巨型数据集,著名的有 Cassandra and HBase.
选择哪种数据库
首先,这两者不是对立的,很多公司都在同时使用这两种数据库。如果数据会快速变化,则需要高吞吐量;如果数据增长很快则需要NoSQL来快速增长 scale out;如果数据的增长速度可以预计,则SQL数据库是最佳选择。
网友评论