03-关系和非关系型数据库对比

关系和非关系型数据库对比

关系型数据库(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所以对性能有一定影响
  • 非关系型数据库的基于内存来存储, 内存的读写速度会非常快所以性能较高

扩展性水平扩展和垂直扩展的区别

  • 垂直扩展: 关系型数据库集群模式一般是主从, 主从数据一致可以起到数据备份的作用
  • 水平扩展: 非关系型数据库可以将数据拆分存储在不同机器上,可以保存海量数据解决内存大小有限的问题
  • 关系型数据库因为表之间存在关联关系, 如果做水平扩展会给数据查询带来很多麻烦
相关推荐
Paraverse_徐志斌3 小时前
MySQL 线上大表 DDL 如何避免锁表(pt-online-schema-change)
数据库·mysql·ddl·mysql锁·锁表·pt-osc
哈哈幸运4 小时前
MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境
linux·运维·数据库·mysql·性能优化
愚公搬代码4 小时前
【愚公系列】《Python网络爬虫从入门到精通》055-Scrapy_Redis分布式爬虫(安装Redis数据库)
数据库·爬虫·python
pwzs4 小时前
深入浅出 MVCC:MySQL 并发背后的多版本世界
数据库·后端·mysql
大熊猫今天吃什么5 小时前
【一天一坑】空数组,使用 allMatch 默认返回true
前端·数据库
双叶8365 小时前
(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)
c语言·数据库·单片机·嵌入式硬件·mongodb·51单片机·nosql
XY.散人5 小时前
初识Redis · C++客户端list和hash
数据库·redis·缓存
码上飞扬5 小时前
深入 MySQL 高级查询:JOIN、子查询与窗口函数的实用指南
数据库·mysql
海洋与大气科学6 小时前
【matlab】地图上的小图
开发语言·数据库·matlab
Geek__19927 小时前
Sqlite3交叉编译全过程
jvm·数据库·sqlite