初学者如何选择NoSQL数据库呢?
Posted 新浪云计算
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学者如何选择NoSQL数据库呢?相关的知识,希望对你有一定的参考价值。
key-value 数据库的设计中使用最多的是哈希表。将 key通过一个 hash 函数映射为一个无符号整型值,通过这个整型值找到在哈希表中的位置,再把 value 存在该处,可以通过key 对数据进行查询、增加、删除等操作。用哈希表实现的key-value 数据库具有较高的性能和可扩展性,但是要进行诸如范围查询等操作时,基于哈希表的实现方法就显得不太合适了。除了基于哈希表的实现方式之外,其他索引数据结构也能实现 key-value 数据库的设计,比如 T 树、LSM 树等。
key-value 数据库的典型代表 Redis 是最近兴起的 key-value 数据库产品,它支持常用的一些数据结构,比如 hash、string、list、set 等。Redis 中的数据全部都保存在内存中,具有极快的读写速度。同时,Redis 支持数据的持久化操作,通过定期刷新或写日志的方法把数据保存到磁盘中。此外,Redis 还支持主从同步的分布式功能,满足了 web 应用高可用性的需求。
Redis应用场景:排行榜应用、计数器应用、数据去重应用、消息发布 / 订阅系统等。
传统的关系型数据库采用按行存储的方式组织数据,与其不同的是,列式存储数据库采用按列存储的方式来组织数据。关系型数据库中,每条记录的所有属性都存储在一起,在查询某个记录的一个属性值时,往往需要读取整个记录行,很多无关紧要的字段也被读取了,效率明显不高。而列式存储数据库是以记录的某个字段值来存储,因为没有读取无用的数据,因此在读取单一属性值时效率最高。另外,列式存储数据库与 key-value 数据库不同,它能支持较复杂的查询操作。由于是按列存储,同一列数据有很多共同的结构特性,列上如果有很多相同的值,就只需保存一份,这就为数据的压缩提供了便利。
列式存储数据库的主要应用场景是在数据仓库和大数据方面。目前比较成熟的列式存储数据库有BigTable、Hbase等,BigTable 是谷歌公司主要的数据库基础设施之一。
使用场景:搜索、地图、社交、视频等。
文档型数据库是一个存储和管理大量结构化文档的数据库系统。结构化文档主要有 XML 文档、html 文档、JSON文档等。关系型数据库在创建数据库时通常是强制类型的,即数据表中的每一个字段都必须预先规定一个存储类型,表中会有较多的重复字段,导致每一个数据记录都是相同的格式,要想改变格式十分困难。文档型数据库通过存储的数据来得知数据的类型。通常,文档型数据库把所有相关联的数据库组织在一起,并允许每个数据记录和其他数据记录格式不同,这对现代的 web 应用来说有极大吸引力,因为设计者不必事先规定数据库的存储格式,其可以随数据的变化而变化。
在常见的文档型数据库中 MongoDB 是比较流行的一个。其较多地应用在系统日志的采集和存储、小文件的分布式存储与微博数据的存储上。另外,由于 MongoDB 支持丰富的SQL 查询语句,因此它也适用于一些需要关系型数据库的应用场景。
第一,应用的数据量
每个 NoSQL 数据库都有它的存储模型,每条数据记录都有存储布局、占用空间大小的限制。web 应用的数据量往往是随着时间的推移逐渐增多的,越往后数据量增加得越快,热点数据愈加明显,比如微博热门话题。对数据量的预估有助于做出更好的选择。
第二,数据访问特点
有的 web 应用是读多写少,而有的是读少写多,高并发也是现代 web 的特点之一。另外,针对数据的访问频次,可以区分出冷热数据,数据的冷热比对web 后端存储的优化是十分重要的参数之一。
第三,数据查询模式
NoSQL 数据库一般不支持复杂的查询操作,更多是以主键来查询想要获取的数据。如果应用中过多涉及复杂的关系查询,使用 NoSQL 数据库显然是不太合适的。
第四,综合成本
选取 NoSQL 产品时还需要考虑的是开发和运维成本。选取一个成熟稳定的 NoSQL 产品能给后期维护减少很多压力,节省很多开销。相反,如果选取了一个不太成熟的或不太稳定的 NoSQL 产品,后期维护将花费巨大的精力,运维成本也会提高。因此,选取一个成熟稳定,社区支持良好的 NoSQL 产品是降低综合成本的有效手段。
相关阅读:
NoSQL数据库的应用及选型研究_蒋付彬
基于nginx和Redis高并发web服务负载均衡的研究_蒲晓阳
以上是关于初学者如何选择NoSQL数据库呢?的主要内容,如果未能解决你的问题,请参考以下文章