我的废话1:
任何一项新技术并非救命稻草,一抹一擦立马药到病除的百宝箱,并非使用Spring或者NOSQL的产品就神乎其神+五光十色,如果那样基本是扯淡。同类 型产品中不管那种技术最终要达到的目的是一样的,通过新的技术手段你往往可能避讳了当前你所需要面对的问题,但过后新的问题又来了。也许回过头来看看还不 如在原来的基础上多动动脑筋 想想办法 做些改良可以得到更高的回报。
传统数据库是以数据块来存储数据,简单来说,你的表字段越多,占用的数据空间就越多,那么查询有可能就要跨数据块,将会导致查询的速度变慢。在大型系统中一张表上百个字段,并且表中的数据上亿条这是完全是有可能的。因此会带来数据库查询的瓶颈。我们都知道一个常识数据库中表记录的多少对查询的性能有非常大的影响,此时你很有可能想到分表、分库的做法来分载数据库运算的压力,那么又会带来新的问题,例如:分布式事务、全局唯一ID的生成、跨数据库查询 等,依旧会让你面对棘手的问题。如果打破这种按照行存储的模式,采用一种基于列存储的模式,对于大规模数据场景这样情况有可能发生一些好转。由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,
可以动态增加,并且列为空就不存储数据,节省存储空间。 每个字段的数据按照聚集存储,能大大减少读取的数据量,查询时指哪打哪,来的更直接。无需考虑分库、分表 Hbase将对存储的数据自动切分数据,并支持高并发读写操作,使得海量数据存储自动具有更强的扩展性。
Java中的HashMap是Key/Value的结构,你也可以把HBase的数据结构看做是一个Key/Value的体系,话说HBase的区域由表名和行界定的。在HBase区域每一个"列族"都由一个名为HStore的对象管理。每个HStore由一个或多个MapFiles(Hadoop中的一个文件类型)组成。MapFiles的概念类似于Google的SSTable。 在Hbase里面有以下两个主要的概念,Row key 和 Column Family,其次是Cell qualifier和Timestamp
tuple,Column family我们通常称之为“列族”,访问控制、磁盘和内存的使用统计都是在列族层面进行的。列族Column family是之前预先定义好的数据模型,每一个Column Family都可以根据“限定符”有多个column。在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,最新的数据版本排在最前面 。
口水:Hbase将table水平划分成N个Region,region按column family划分成Store,每个store包括内存中的memstore和持久化到disk上的HFile。
上述可能我表达的还不够到位,下面来看一个实践中的场景,将原来是存放在MySQL中Blog中的数据迁移到HBase中的过程:
MySQL中现有的表结构:

迁移HBase中的表结构:

原来系统中有2张表blogtable和comment表,采用HBase后只有一张blogtable表,如果按照传统的RDBMS的话,blogtable表中的列是固定的,比如schema 定义了Author,Title,URL,text等属性,上线后表字段是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义blogtable表,然后定义info 列族,User的数据可以分为:info:title ,info:author ,info:url 等,如果后来你又想增加另外的属性,这样很方便只需要
info:xxx 就可以了。
对于Row key你可以理解row key为传统RDBMS中的某一个行的主键,Hbase是不支持条件查询以及Order by等查询,因此Row key的设计就要根据你系统的查询需求来设计了额。 Hbase中的记录是按照rowkey来排序的,这样就使得查询变得非常快。
具体操作过程如下:
============================创建blogtable表=========================
create 'blogtable', 'info','text','comment_title','comment_author','comment_text'
============================插入概要信息=========================
put 'blogtable', '1', 'info:title', 'this is doc title'
put 'blogtable', '1', 'info:author', 'javabloger'
put 'blogtable', '1', 'info:url', 'http://www.javabloger.com/index.php'
put 'blogtable', '2', 'info:title', 'this is doc title2'
put 'blogtable', '2', 'info:author', 'H.E.'
put 'blogtable', '2', 'info:url', 'http://www.javabloger.com/index.html'
============================插入正文信息=========================
put 'blogtable', '1', 'text:', 'what is this doc context ?'
put 'blogtable', '2', 'text:', 'what is this doc context2?'
==========================插入评论信息===============================
put 'blogtable', '1', 'comment_title:', 'this is doc comment_title '
put 'blogtable', '1', 'comment_author:', 'javabloger'
put 'blogtable', '1', 'comment_text:', 'this is nice doc'
put 'blogtable', '2', 'comment_title:', 'this is blog comment_title '
put 'blogtable', '2', 'comment_author:', 'H.E.'
put 'blogtable', '2', 'comment_text:', 'this is nice blog'
HBase的数据查询\读取,可以通过单个row key访问,row key的range和全表扫描,大致如下:
注意:HBase不能支持where条件、Order by 查询,只支持按照Row key来查询,但是可以通过HBase提供的API进行条件过滤。
例如:http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
scan 'blogtable' ,{COLUMNS => ['text:','info:title'] } —> 列出 文章的内容和标题
scan 'blogtable' , {COLUMNS => 'info:url' , STARTROW => '2'} —>
根据范围列出 文章的内容和标题
get 'blogtable','1' —> 列出 文章id 等于1的数据
get 'blogtable','1', {COLUMN => 'info'} —> 列出 文章id 等于1 的 info 的头(Head)内容
get 'blogtable','1', {COLUMN => 'text'} —> 列出 文章id 等于1 的 text 的具体(Body)内容
get 'blogtable','1', {COLUMN => ['text','info:author']} —> 列出 文章id 等于1 的内容和作者(Body/Author)内容
我的废话2:
有人会问Java Web服务器中是Tomcat快还是GlassFish快?小型数据库中是MySQL效率高还是MS-SQL效率高?我看是关键用在什么场景和怎么使用这 个产品(技术),所以我渐渐的认为是需要对产品、技术本身深入的了解,而并非一项新的技术就是绝佳的选择。试问:Tomcat的默认的运行参数能和我们线 上正在使用的GlassFish性能相提并论吗?我不相信GlassFishv2和GlassFishv3在默认的配置参数下有显著的差别。我们需要对产 品本身做到深入的了解才能发挥他最高的性能,而并非感观听从厂家的广告和自己的感性认识
迷信哪个产品的优越性。
我的废话3:
对于NOSQL这样的新技术,的的确确是可以解决过去我们所需要面对的问题,但也并非适合每个应用场景,所以在使用新产品的同时需要切合当前的产品需要, 是需求在引导新技术的投入,而并非为了赶时髦去使用他。你的产品是否过硬不是你使用了什么新技术,用户关心的是速度和稳定性,不会关心你是否使用了 NOSQL。相反Google有着超大的数据量,能给全世界用户带来了惊人的速度和准确性,大家才会回过头来好奇Google到底是怎么做到的。所以根据 自己的需要千万别太勉强自己使用了某项新技术。
我的废话4:
总之一句话,用什么不是最关键,最关键是怎么去使用!
分享到:
相关推荐
《HBase专题配套文件解析》 HBase,全称Apache HBase,是构建在Hadoop分布式文件系统(HDFS)之上、面向列的开源数据库,主要用于处理大规模数据。HBase的设计理念是支持实时读写,适合大数据场景下的快速随机访问...
【标题】:“HBase专题测试文件” 【描述】:这篇内容是与HBase相关的测试资料,配合某博主的博客文章进行深入学习。博客链接指向了CSDN平台的一篇文章,详细介绍了HBase的相关知识和实战操作,这可能是对HBase进行...
本文档概述了广西大数据应用专题开发技术方案的第三个标包,主要介绍了大数据设计架构、分布式模块设计、插件化程序开发、多样化数据采集系统、Docker 容器部署、ArcGIS 二次开发等技术方案。 titre:广西大数据...
本文档是关于智慧城市大数据应用专题开发技术方案的详细技术方案,主要介绍了智慧城市大数据应用的架构设计、技术选型、系统部署、数据处理方式等方面的技术细节。 该方案的主要技术架构基于 Hadoop+Hive+Spark,...
分布式数据库如Cassandra、HBase等,它们解决了单机数据库在容量和性能上的瓶颈。分布式数据库通常采用分片策略,将数据分布在多个节点上,同时提供事务处理和一致性保证。 6. 分布式缓存 分布式缓存如Redis、...
除此之外,数据库知识也是重点,包括关系型数据库MySQL的事务处理、索引优化、查询优化,以及NoSQL数据库如MongoDB和HBase的使用场景和优缺点。数据结构与算法虽然不是Java特定的,但它们是衡量开发者解决问题能力的...
由于应急测绘需要处理大量的地理空间数据,分布式数据库能够帮助实现快速查询和统计周边地物、人口、法人等专题数据,满足不同尺度和不同用户需求的测绘应急专题数据资源服务。 传统的数据库系统在处理大量数据时...
"大数据应用专题开发技术方案" 大数据设计架构 在广东移动大数据关联分析服务项目中,采用了 HADOOP+MPP+RDB+流计算混搭技术架构,满足不同类型数据处理及访问需求。系统架构体系通过使用信令 XDR 数据、MR 数据、...
- HBase的元数据管理:HBase的RegionServer定位依赖Zookeeper。 - Kafka的集群管理:Kafka的Broker选举和消费者分区分配依赖Zookeeper。 - Dubbo的服务注册与发现:Dubbo通过Zookeeper实现服务的注册、查找和监控...
**Zookeeper面试专题及答案** 在Java开发领域,Apache ZooKeeper是一个至关重要的分布式协调服务,它为分布式应用程序提供了高可用性、一致性以及命名服务等关键功能。本篇内容将深入探讨Zookeeper的核心概念、功能...
【Hadoop与大数据技术大会2012PPT】是一个关于Hadoop和大数据技术的专题会议,该会议可能聚集了业界专家和学者,分享了他们在2012年关于这两个领域的最新研究、实践经验和未来发展趋势。这个压缩包包含了多个PDF文件...
【Java与MongoDB面试专题】 在Java开发中,MongoDB是一种广泛应用的NoSQL数据库,尤其在处理非结构化和半结构化数据时表现出色。在面试中,掌握关于MongoDB的基本概念、特性和与传统RDBMS的区别是至关重要的。 1. ...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
MongoDB面试专题及答案.pdf 本文档总结了 MongoDB 相关的知识点,涵盖了 NoSQL 数据库的定义、类型、特点、优点、应用场景、与 RDBMS 的差别、MongoDB 的特点、优势、限制等。 NoSQL 数据库 NoSQL 数据库是一种非...
HBase 知识体系最强总结 Hadoop知识体系最强宝典 Hadoop企业级调优手册 Flink知识体系保姆级总结 Flink面试八股文 最强最全面数仓建设规范指南(强烈推荐) 最强最全面的大数据SQL面试题和答案 数据结构与算法篇 数据...
### MongoDB面试专题知识点详解 #### 1. NoSQL数据库的概念及其与RDBMS的区别 - **NoSQL**:Non-relational databases(非关系型数据库),通常指那些**不使用传统的关系表格来组织数据**的数据库系统。NoSQL的...
《Zookeeper面试专题》 Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供一致性服务。在面试中,Zookeeper 是一个经常被提及的话题,因为它在大数据、云计算和分布式系统中的核心作用。以下是对...
Zookeeper 是一个分布式协调服务,源自 Apache Hadoop 项目,主要设计用于...Zookeeper 在分布式系统中的应用广泛,包括 HBase、Kafka、Hadoop 等项目,理解和掌握其核心概念和机制对于从事分布式开发的人员至关重要。