SQL(关系型数据库) VS NoSQL(非关系型数据库)
数据结构:
SQL:
我们会对字段类型(主键,唯一约束等),数据类型,数据长度做约束,定义好这些约束后,表的结构就固定了,之后插入的数据会校验是否满足这些规则(并且一般不对表的结构进行修改,可能会对业务造成影响)
NoSQL:
对结构约束一般较弱,取决于数据库的类型(如图中三种类型)
数据关联:
SQL:
数据库自带关系维护,使用外键关联表
NoSQL:
可以如下图这样做关联( 嵌入文档),也可以将商品单独存文档,但是需要我们自己的业务逻辑维护关系(冗余数据)
查询方式:
SQL:
规定了查询语法,所以语法是固定的,只要是关系型数据库(MySQL,Oracle等)都可以用相同的语法进行查询
NoSQL:
没有固定的查询语法,
事务特性:
SQL:
我们做增删改,往往有事务的需求.事务满足ACID特性,关系型数据库底层会帮助我们实现ACID
NoSQL:
要么没有事务,要么只能做一些基本的一致性(BASE)
扩展性:
SQL:
设计之初没有考虑分布式需求,存储数据都是存储在本机,MySQL的主从仅仅是通过提升机器的数量来提升了读写的性能,而主从的存储数据量没有变,相当于做了一份拷贝.虽然可以引入第三方主键来实现分库,但是对性能有一定影响
NoSQL:
考虑到了数据拆分的需求,插入数据的时候,会通过数据的id或者是唯一的标识做一个哈希运算,根据哈希运算的结果判断这个数据要存储在哪一个节点上,从而实现数据的拆分,天然支持这种水平扩展