首先,NoSql不是 no sql,而是Not Only Sql,意思为"不仅仅是sql",是非关系型数据库的统称。
NoSql主要用于超大规模数据的存储,这些类型的数据不需要固定的模式,无需多余操作就可以横向扩展。它主要有以下一些特点:
1.没有预定义的模式,不需要预定义表结构
2.没有声明性查询语言
3.非事务的,不具备ACID属性,区别于关系型数据库。
4.非结构化和不可预知的数据
5.高性能、高可用性、以及弹性扩展
NoSq通常分为4种类型,分别是
1.列存储数据库 特点是按列存储数据的方便存储结构化和半结构化数据,方便数据压缩,对一列或多列的数据查询有非常大的IO优势。代表产品有HBase,Cassandra
2.文档存储数据库 一般用json格式存储,存储内容是文档型的,这样有机会对某些字段建立索引,实现关系型数据库一些功能。代表产品有MongoDB,CouchDB
3.键值存储数据库 特点是能通过key快速找到value,通常用hash table实现。代表产品有大名鼎鼎的redis,tokyotyrant等。
4.图形存储数据库 图形关系的最佳存储,利用图结构相关算法实现,专注于关系图谱的构建,典型应用场景是社交网络。代表产品有Neo4J,InfoGrid等
那么,了解了这么多之后,NoSql的应用场景有哪些呢?
首先明确一点,NoSql不是要取代关系型数据库的。要知道,NoSql比关系型数据库诞生的还要早,要是NoSql没有问题,关系型数据库怎么可能会诞生?
NoSql不支持事务以及ACID属性,所以具有事务编程模型的场景,是不适用的。比如银行转账、电商的订单等。
假如你的应用需要处理快速读写,可以试试文档数据库和key-value数据库
假如你的应用需要实现社会化网络,可以试试图形数据库
假如你的应用数据类型不固定,经常发生变化,可考虑文档数据库和key-value数据库
假如你的应用需要存储Blob类型的数据,可以尝试key-value数据库
所以,用不用NoSql,用那个产品,取决你的业务场景,不要迷信。