三、列存储(WideColumnStore/Column-Family)数据库
列存储数据库将数据储存在列族(columnfamily)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
列存储查找速度快,可扩展性强,更容易进行分布式扩展,适用于分布式的文件系统。
适用的场景
1.日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
2.博客平台。我们储存每个信息到不同的列族中。举个例子,标签可以储存在一个,类别可以在一个,而文章则在另一个。
不适用场景
1.如果我们需要ACID事务。Vassandra就不支持事务。
2.原型设计。如果我们分析Cassandra的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。
产品:Cassandra、HBase
Cassandra
Cassandra是一套开源分布式NoSQL数据库系统,是一个混合型的非关系的数据库,以Amazon专有的完全分布式的Dynamo为基础,结合了GoogleBigTable基于列族(ColumnFamily)的数据模型。Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。和其他数据库比较,有三个突出特点:模式灵活、可扩展性、多数据中心。
使用官方java驱动操作cassandra非常简单。
有谁在使用
Ebay,(EBAY,中文电子湾、亿贝、易贝)是一个管理可让全球民众上网买卖物品的线上拍卖及购物网站。
Instagram,是一款支持iOS、WindowsPhone、Android平台的移动应用,允许用户在任何环境下抓拍下自己的生活记忆,选择图片的滤镜样式,一键分享至Instagram、Facebook、Twitter、Flickr、Tumblr、foursquare或者新浪微博平台上。
NASA,如雷贯耳,美国国家航空航天局。
Twitter,(CassandraandHBase)全世界都非常流行的社交网络及微博客服务的网站。
HBase
HBase,HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。Apache三剑客:HBase,Cassandra,CouchDB,HBase的前景最为看好,因为它的开发者众多并且都是顶尖高手。
图3描述HadoopEcoSystem中的各层系统。其中,HBase位于结构化存储层,HadoopHDFS为HBase提供了高可靠性的底层存储支持,HadoopMapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。
图3
HBase提供的访问接口有:
1.NativeJavaAPI,最常规和高效的访问方式,适合HadoopMapReduceJob并行批处理HBase表数据
2.HBaseShell,HBase的命令行工具,最简单的接口,适合HBase管理使用
3.ThriftGateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
4.RESTGateway,支持REST风格的HttpAPI访问HBase,解除了语言限制
5.Pig,可以使用PigLatin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduceJob来处理HBase表数据,适合做数据统计
6.Hive,支持HBase,可以使用类似SQL语言来访问HBase
有谁在使用
Twitter,全世界都非常流行的社交网络及微博客服务的网站。
Facebook,美国的一个社交网络服务网站。
Yahoo!,美国著名的互联网门户网站,也是20世纪末互联网奇迹的创造者之一。其服务包括搜索引擎、电邮、新闻等,业务遍及24个国家和地区,为全球超过5亿的独立用户提供多元化的网络服务。同时也是一家全球性的因特网通讯、商贸及媒体公司。
四、图(Graph-Oriented)数据库
图数据库允许我们将数据以图的方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,SteveJobs、Apple和Next,则会有两个“Foundedby”的边将Apple和Next连接到SteveJobs。
主要用于社交网络,推荐系统等。专注于构建关系图谱。
适用的场景
1.在一些关系性强的数据中
2.推荐引擎。如果我们将数据以图的形式表现,那么将会非常有益于推荐的制定
不适用场景
不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。
产品:Neo4J、InfiniteGraph、OrientDB
Neo4J
Neo4J是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。它的架构图如图4所示。
图4
neo4j连接java目前主要有嵌入式、jdbc和restapi。
有谁在使用
Adobe,是世界领先数字媒体和在线营销方案的供应商,Adobe的客户包括世界各地的企业、知识工作者、创意人士和设计者、OEM合作伙伴,以及开发人员。
Cisco,全球领先的网络解决方案供应商。
T-Mobile,是一家跨国移动电话运营商,是世界上最大的移动电话公司之一。
InfiniteGraph
InfiniteGraph企业分布式图形数据库具有可伸缩性,它还能够在大量多地存储的复杂数据中,为大型企业执行实时搜索。通过使用图算法,它为分析应用程序添加了新的价值,以发现和存储新的连接和关系。
InfiniteGraph需要作为服务项目加以安装,这与以MySQL为代表的传统数据库颇为相似。InfiniteGraph借鉴了Objectivity/DB中的面向对象概念,因此其中的每一个节点及边线都算作一个对象。InfiniteGraph还提供了一套可视化工具用以查看数据。
InfiniteGraph基于Java实现,它的目标是构建“分布式的图形数据库”,已被美国国防部和美国中央情报局所采用。
Redis介绍
目前主流的NoSQL数据库,基于键值的Redis占一席之地,它功能丰富,交互简单,适用场景多。
Redis,全称RemoteDictionaryServer,远程字典服务器,Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。
Redis数据库中的数据是保存在内存中的,因此它的性能比基于硬盘存储的数据库有明显的优势,同时redis提供了对持久化的支持,可以将内存中的数据异步写入到硬盘中。
即使不采取redis作为应用数据库,选择redis作为缓存、队列系统,也是一个不错的选择。
Redis目前支持的键值数据类型如下:
字符串类型(string)
散列类型(hash)
列表类型(list)
集合类型(set)
有序集合类型(zset/sorted_set)
一个Redis实例相当于一格书架,书架里有16本字典(独立数据库),默认从0开始编号,查找最后一本字典的命令是select15,通过selectnumber可以自由切换数据库,这16个库并非完全隔离,某些命令可以通用,同时redis不支持自定义数据库名和访问密码,所有16个库的访问权限是一致的。区别于oracle的实例,所以不同的应用应该使用不同的redis实例。