NoSQL四种NoSQL数据库在整个数据库领域的地位不言而喻。在大数据时代,RDBMS虽然优秀,但面对快速增长的数据规模和日益复杂的数据模型,RDBMS逐渐无法应对众多的数据库处理任务。此时,NoSQL凭借易扩展、大数据量、高性能和灵活的数据模型成功地在数据库领域站稳了脚跟。目前大家基本认同NoSQL数据库可以分为四类:键值存储数据库、文档数据库、列存储数据库和图数据库。每种类型的数据库都可以解决关系数据无法解决的问题。在实际应用中,NoSQL数据库的分类界限其实并不那么明显,往往是多种类型的组合。主流nosql详解:MongoDB、Hbase、RedisMongoDBMongoDB是一个高性能、开源、无模式的文档数据库,开发语言为C++。它可以在许多场景中用作传统关系数据库或键/值存储的替代方案。一、MongoDB的特点使用语言:C++特点:保留了SQL的一些友好特性(查询、索引)。License:AGPL(Sponsor:Apache)Agreement:Custom,binary(BSON)Master/slavereplication(支持自动错误恢复,usesetsreplication)内置分片机制,支持javascript表达式查询可以在服务端执行任意javascript函数更新就地支持优于CouchDB。内存到文件的映射用于数据存储。对性能的关注超过了对功能的要求。建议开启日志功能(参数--journal)。在32位操作系统上,数据库大小限制在2.5Gb左右空数据库占192Mb左右使用GridFS存储大数据或元数据(不是真正的文件系统)2.MongoDB优点:1)更高的写入负载,MongoDB具有更高的插入速度。2)处理大型单表,当数据表过大时,可以方便的拆分表。3)高可用,不仅M-S架设方便快捷,MongoDB还可以快速、安全、自动地实现节点(数据中心)故障转移。4)快速查询,MongoDB支持管道等二维空间索引,因此可以快速准确地从指定位置获取数据。MongoDB启动后,数据库中的数据会以文件映射的形式加载到内存中。如果内存资源相当充裕,这将大大提高数据库的查询速度。5)非结构化数据的爆炸式增长,增加列在某些情况下可能会锁住整个数据库,或者增加负载导致性能下降。由于MongoDB弱数据结构模式,增加新字段不会对旧表产生任何影响,整个过程会非常快。3、MongoDB的缺点:1)不支持事务。2)MongoDB占用空间太大。3)MongoDB没有成熟的维护工具。4.MongoDB应用场景1.)适用于实时插入、更新和查询需求,具有应用实时数据存储所需的复制和高扩展性;2)非常适合文档格式的存储和查询;3.)高扩展性场景:MongoDB非常适合由几十台或者上百台服务器组成的数据库。4.)关注性能而不是功能需求。HBaseHBase是ApacheHadoop的一个子项目,属于bigtable的开源版本,实现的语言是Java(所以依赖JavaSDK)。HBase依赖于Hadoop的HDFS(分布式文件系统)作为最基本的存储单元。1.HBase特性:语言:Java特性:支持十亿行X百万列许可证:Apache协议:HTTP/REST(支持Thrift,见编者注4)BigTable采用分布式架构后建模Map/Reduce优化实时查询High-performanceThriftgateway通过服务端扫描过滤实现查询操作预测支持XML、Protobuf、binaryHTTPCascading、hive和pigsourceandsinkmodules基于Jruby(JIRB)的shellpair配置Changesandminorupgradeswillberoll回来,不会有单点故障。堪比MySQL的随机访问性能。3、HBase的优势1)存储容量大,一张表可以放上亿行,上百万列;通过版本检索,可以找到需要的历史版本数据;3.)负载高时,可以简单的增加机器实现水平切分扩展,与Hadoop的无缝集成保证其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);4.)在第3点的基础上,可以有效避免单点故障的发生。四、HBase的缺点1、基于Java语言实现,Hadoop架构意味着其API更适合Java项目;2、node开发环境需要的依赖较多,配置麻烦(或者不知道怎么配置,比如持久化配置),缺乏文档;3.占用内存大,而且因为是建立在HDFS上针对批量分析优化的,所以读取性能不高;4.与其他NoSql相比,API相对笨拙。5、HBase适用于1)bigtable数据存储;2)数据有版本查询需求;3)满足大数据量需求和扩展简单需求。RedisRedis是一个用ANSIC语言编写的开源日志型和Key-Value数据库,支持网络,可以基于内存或持久化,并提供多种语言的API。开发工作目前由VMware托管。1、Redis特点:使用语言:C/C++特点:运行速度极快许可证:BSD协议:硬盘存储支持的类Telnet内存数据库,但是从2.0版本开始可以交换数据到硬盘(注意2.4以后的版本不支持此功能!)主从复制(见注3)使用简单的数据或键值索引的哈希表,但也支持复杂的操作,如ZREVRANGEBYSCORE。INCR&co(适用于计算极限值或统计)支持集合(也支持union/diff/inter)支持列表(也支持队列;阻塞pop操作)支持哈希表(具有多个字段的对象)支持排序集合(highscore表,适合范围查询)Redis支持事务,支持设置数据为过期数据(类似fastbuffer设计)Pub/Sub允许用户实现消息机制2.Redis优势1)非常丰富的数据结构;2.)Redis提供事务功能,可以保证一系列命令的原子性,中间不会有任何中断;3.)数据存储在内存中,读写速度非常快,频率可达10w/s。三、Redis的缺点1)Redis3.0之后官方的集群方案出来了,但是还存在一些架构问题;2.)持久化功能体验不好——如果通过快照的方式实现,将整个数据库的数据写入磁盘,开销很大;aof方式只跟踪变化的数据,类似于mysql的binlog方式,但是附加的日志可能过大,必须同时重新执行所有操作,恢复速度慢;3)由于是内存数据库,所以单台机器存储的数据量和机器本身的内存大小是一样的。虽然redis本身有key过期策略,但还是需要提前预估,节省内存。如果内存增长过快,则需要定期删除数据。4、Redis应用场景:最佳应用场景:适用于数据变化较快且能满足数据库大小(适合内存容量)的应用。比如:微博,数据分析,实时数据采集,实时通讯等。参考技术精华的总结,说说我作为非研究生上半年做了什么程序员:如何获得职业资源,进入好的公司?【Android】面试总结实践Java24章经文——你所不知道的工厂方法
