什么是Nosql?
特点
- NoSQL(Not Only SQL),意为“不仅仅是SQL”,泛指非关系型数据库;
- Nosql不依赖业务逻辑方式存储,而以简单的
key-value(键-值)
模式存储,因此大大的增加了数据库的扩展能力; - 不遵循SQL标准;
- 不支持ACID;
- 远超于SQL的性能。
适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
不适用场景
- 需要事务支持(如银行存钱)
- 基于sql的结构化查询存储,处理复杂的关系,需要即席查询
Nosql的种类
Nosql数据库的种类按类别分为四大类:键值(key-value
)型存储数据库、列存储数据库、文档型数据库、图形(Graph)数据库。在此基础上又可细分。
我们可以在这个网站查看不同种类的数据库使用情况排名:数据库使用排名
Memcached(键值型存储数据库
)
- 所用语言:
C
- 很早出现的Nosql数据库
- 数据都在内存中,一般不能持久化
- 支持简单的
key-value
模式 - 一般是作为缓存数据库辅助持久化的数据库
Redis(键值型存储数据库
)
- 所用语言:
C
- 几乎覆盖了
Memcached
的绝大部分功能 - 数据都在内存中,支持持久化,主要用作备份恢复
- 主从(
Master/slave
)复制,哨兵监控,集群 - 除了支持简单的
key-value
模式,还支持多种数据结构的存储,如list、set、hash、zset
等等 - 一般是作为缓存数据库辅助持久化的数据库
应用场景:手机验证码、排行榜、网站访客访问频率限制、各种计数器、缓存
mongoDB(文档型数据库
)
-
所用语言:
C++
-
特点:保留了SQL一些友好的特性(查询,索引)。
-
主从(
Master/slave
)复制(支持自动错误恢复,使用 sets 复制) -
内建分片机制
-
支持 javascript表达式查询
-
在数据存储时采用内存到文件映射
-
对性能的关注超过对功能的要求
-
采用 GridFS存储大数据或元数据(不是真正的文件系统)
-
高性能、开源、模式自由
最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用 CouchDB但因为数据改变太频繁而占满内存的应用程序。
例如:你本打算采用 MySQL或 PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。
Neo4j(图形数据库
)
- 所用语言:
Java
- 特点:基于关系的图形数据库
- 可独立使用或嵌入到 Java应用程序
- 图形的节点和边都可以带有元数据
- 很好的自带web管理功能
- 使用多种算法支持路径搜索
- 使用键值和关系进行索引
- 为读操作进行优化
- 支持事务(用 Java api)
- 使用 Gremlin图形遍历语言
最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别
例如:社会关系,公共交通网络,地图及网络拓谱
Hbase(列存储数据库
)
- 所用语言:
Java
- 特点:支持数十亿行X上百万列
- 在 BigTable之后建模
- 采用分布式架构 Map/reduce
- 对实时查询进行优化
- 高性能 Thrift网关
- 通过在server端扫描及过滤实现对查询操作预判
- 支持 XML, Protobuf, 和binary的HTTP
- Cascading, hive, and pig source and sink modules
- 基于 Jruby( JIRB)的shell
- 对配置改变和较小的升级都会重新回滚
- 不会出现单点故障
- 堪比MySQL的随机访问性能
最佳应用场景:适用于偏好BigTable并且需要对大数据进行随机、实时访问的场合。
例如: Facebook消息数据库
网友评论