了解SQL和NoSQL之前,我们先了解下数据有几种分类:结构化数据、非结构化数据、半结构化数据。结构化数据就是由行和列组成的,可以用二维表来存储,非结构化数据比如文本、图片、视频音频等;半结构化数据类似XML和JSON,有语义标记对记录进行分割。
关系数据库存储的就是结构化数据,,使用SQL进行操作,支持ACID特性。经过几十年发展已非常成熟,但是关系数据库也有缺点。
1、数据按行存储,无法存储数据结构,比如说列表。
2、数据按行存储,即使只操作一列也需要将整行读入内存,IO较高
3、表结构扩展不方便,表结构schema是固定的,修改需要执行DDL语句,修改期间可能导致锁表
4、全文搜索功能弱
非关系数据库也称NoSQL数据库,NoSQL = Not Only SQL,是对关系数据库的一种补充。针对以上4个缺点,分别有4种不同非NoSQL数据库
1、K-V存储
K-V存储以redis为代表,value可以是数据结构,比如string、hash、list、set、sorted set、bitmap。Redis数据基于内存,读写效率高,KV型数据,查询速度快,时间复杂度O(1),但是Redis是不支持完整的ACID。所以Redis应用场景是读大于写,并且可以容忍数据丢失的。
2、列式存储
列式存储以HBase为代表,按照列来存储,所以查询的时候只有指定的列会被读取,不会读取所有的列,因为一列中数据大多都类似,所以有更高的压缩率,节省存储空间。列式存储不适合频繁更新多个列的场景,随机写的效率比较低。列式存储适用于离线大数据分析和统计场景。
3、文档存储
文档型代表就是MongoDB了,以JSON存储数据解决表结构扩展不方便的情况。但是文档存储无法进行join,join需要多次操作,不支持事务操作,4.0版本支持了,但是没有大量使用过。
4、全文搜索引擎
全文搜索引擎以ElasticSearch为代表,主要技术原理就是倒排索引来解决全文搜索的问题
希望对大家有所帮助,有帮助记得点赞哦!可以关注下,后面持续分享技术文章,谢谢!