关系和非关系型数据库对比
关系型数据库(RDBMS)
:MySQL、Oracl、DB2、SQLServer
非关系型数据库(NoSql)
:Redis、Mongo DB、MemCached
插入数据结构的区别
传统关系型数据库是结构化数据
,向表中插入数据时都需要严格的约束信息(如字段名,字段数据类型,字段约束等信息)
非关系型数据库对插入的数据格式没有严格约束
,可以是键值型,文档型(如MongoDB),图格式(如Neo4j),列类型(如HBase)
多表关联的区别
传统数据库的表与表之间往往存在关联(如外键
)
- 传统数据库在维护
用户
与商品
的关系会新建一个订单
表,存储用户和商品的对应关系 - 在业务逻辑代码中存储数据时需要将商品的信息存储到用户的订单属性中,但是这样做会导致数据冗余
json
{
id: 1,
name: "张三",
orders: [
{
id: 1,
item: {
id: 10, title: "荣耀6", price: 4999
}
},
{
id: 2,
item: {
id: 20, title: "小米11", price: 3999
}
}
]
}
非关系型数据库的表与表之间不存在关联关系
,维护关系只能靠代码中的业务逻辑或数据之间的耦合
查询方式的区别
传统关系型数据库会基于Sql语句做查询(语法有统一标准),非关系数据库查询语法各种各样差异极大
事务的区别
传统关系型数据库能满足事务ACID的原则(原子性、一致性、独立性及持久性)
非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性
存储方式磁盘和内存的区别
- 关系型数据库基于磁盘进行存储, 会有大量的磁盘IO所以对性能有一定影响
- 非关系型数据库的基于内存来存储, 内存的读写速度会非常快所以性能较高
扩展性水平扩展和垂直扩展的区别
垂直扩展
: 关系型数据库集群模式一般是主从, 主从数据一致可以起到数据备份的作用水平扩展
: 非关系型数据库可以将数据拆分存储在不同机器上,可以保存海量数据解决内存大小有限的问题- 关系型数据库因为表之间存在关联关系, 如果做水平扩展会给数据查询带来很多麻烦