【文档说明】高级数据库-分布式数据库HBase-实用课件.ppt,共(77)页,4.810 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92361.html
以下为本文档部分文字说明:
分布式数据库---以HBase为例by梁桂煌--part1戚潇明--part2吴文泰--part3王浩宇--part4Part1---关于分布式数据库回顾集中式数据库分布式数据库系统概述DDBS(DistributedDatabaseSystem)的分类D
DBS架构介绍查询流程优缺点分析前言-集中式数据库背景随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:1.数据按实际需
要已在网络上分布存储,再采用集中式处理,势必造成通信开销大;2.应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;3.集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式DB的‚集中计算‛概念向‚分布计算‛概念发
展。上述提到的分布计算主要体现在客户机/服务器模式和分布式数据库体系结构两个方面。分布式数据库系统概述随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩大,以分布式为主要特征的数据库系统的研究与
开发受到人们的注意。分布式数据库是数据库技术与网络技术相结合的产物,在数据库领域已形成一个分支。分布式数据库的研究始于20世纪70年代中期,世界上第一个分布式数据库系统SDD-1是由美国计算机公司(CCA)于1979年在DEC计算机上实现。20世纪90年代以来,分布式数据库系
统进入商品化应用阶段,传统的关系数据库产品均发展成以计算机网络及多任务操作系统为核心的分布式数据库产品,同时分布式数据库逐步向客户机/服务器模式发展。典型的分布式数据库系统(DDBS)的物理结构。其中在不同地域的3台计算机分别控制本地数据库及各终端用户T;每台计算机及其本
地数据库组成了此分布式数据库的一个站点,各站点用通讯网络连接起来,可以是局域网或广域网。分布式数据库系统概述DDBS(DistributedDatabaseSystem)的分类1.同构同质型DDBS:各个场地都采用同一类型的数据模型(譬如都
是关系型),并且是同一型号的DBMS。2.同构异质型DDBS:各个场地采用同一类型的数据模型,但是DBMS的型号不同,譬如DB2、ORACLE、SYBASE、SQLServer等。3.异构型DDBS:各个场地的数据模型的型号不同,甚至类型也不
同。随着计算机网络技术的发展,异种机联网问题已经得到较好的解决,此时依靠异构型DDBS就能存取全网中各种异构局部库中的数据。DDBMS是分布式数据库系统的核心部分,就其性质可分为匀质和异质两种。若每个站点的LDBMS相同,则
是匀质的;若至少有两个LDBMS不同,则是异质的。异质DDBMS要在不同LDBMS的不同数据模型间进行转换,因而比匀质DDBMS更复杂。一般来说,若从头开始研制一个DDBS,则选择匀质较方便,且通常都选用关系模型。这是由于关系模型易于分布管理,但若DDBS是建立在已有的若干数据库之上,则这
些数据库很可能有的是基于关系模型的,有的是基于层次或网络模型的,即它们是不同质的,因此要建立异质的DDBMS。分布式数据库管理系统架构介绍分布式数据库的设计概略图•用户进行数据获取时,会经过相关设定的分布策略对不同的用户请求进行划分•全局用户指的是被所有用户所共享
的资料存储•局部用户指的是针对不同用户的特殊需求所配置的资料存储具体的查询流程1.对用户请求按照惯例进行相关的查询分析和优化算法,检查是否存在该关系以及相应的字段、该用户能否读取它们等,确认无误后根据数据字典DD
的信息进行优化;2.预处理后,接受用户请求,并判定把它送到哪里,或必须访问哪些计算机才能满足该要求;3.进行分布策略判定时,在用户全局DBMS、局部DBMS和其他计算机的DBMS之间进行协调,寻找最为合适的站点进行查询请求处理;
具体的查询流程DDBS的特点和优缺点DDBS的基本特点:(1)物理分布性:数据不是存储在一个场地上,而是存储在计算机网络的多个场地上。(2)逻辑整体性:数据物理分布在各个场地,但逻辑上是一个整体,它们被所有用户(全局用户)共享,并由一个DDBMS统一管理。
(3)场地自治性:各场地上的数据由本地的DBMS管理,具有自治处理能力,完成本场地的应用(局部应用)。(4)场地之间协作性:各场地虽然具有高度的自治性,但是又相互协作构成一个整体。DDBS的特点和优缺点
DDBS的优点(1)具有灵活的体系结构(2)适应分布式的管理和控制机构(3)经济性能优越(4)系统的可靠性高、可用性好,局部应用的响应速度快DDBS的缺点(1)系统开销较大,主要花在通信部分。
(2)复杂的存取结构(如辅助索引),在集中式DBS中是有效存取数据的重要技术,但在分布式系统中不一定有效。(3)数据的安全性和保密性较难处理。Part2---HBase生态圈HBase与HadoopHIVE与HadoopHBase与HDFS相互关系2.1
HBase与HadoopHadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算Hadoop框架中最核心设计就是:HDFS和MapR
educe.HDFS提供了海量数据的存储,MapReduce提供了对数据的计算Hbase是hadoop的数据库,能够对大数据提供随机、实时的读写访问功能,具有开源、分布式、可扩展及面向列存储的特点2.
2HBase与HDFS整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一
个NameNode和若干个DataNode组成的。NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS支持文件形式的数据。2.2HBase与HDFS从内部来看,文件被分成若干个数据块,这若干个数据块存放在一组DataNode上
。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者,用户数据永远
不会经过NameNode。HBase作为面向列的数据库运行在HDFS之上,HDFS缺乏随即读写操作,HBase正是为此而出现。HBase以GoogleBigTable为蓝本,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。2.3HBase与HIV
EHive是建立在Hadoop上的数据仓库基础架构。提供了一系列的工具,用来进行数据提取、转换、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据机制。可以把Hadoop下结构化数据文件映射为一张成Hive中的表。提供类s
ql查询功能,除了不支持更新、索引和事务,sql其它功能都支持。可以将sql语句转换为MapReduce任务进行运行,作为sql到MapReduce的映射器。提供shell、JDBC/ODBC、Thrift、Web等接口。通过Hive可以使用HQL语言查询存放在HDFS
上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoop。2.3HBase与HIVEHbase
是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。HBase非常适合用来进行大数据的实时查询。Hive和Hbase是两种基于Hadoop的不同技术,Hive
是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL的Key/vale数据库,数据也可以从Hive写到Hbase,再从Hbase写回Hive。关系图HBase的基本原理Part3---HBase的基本原理HBase的存储架
构HBase的表结构(BigTable)从RDBMS到HBase为什么HBase高吞吐?回顾一下:Hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模式,并从Hadoop的MapR
educe程序模型中获益。相应的,可以通过两种方式获得HBase数据:1、直接通过行键查询,或者一系列行键的表扫描。2、使用map-reduce进行批操作在面对离线或批处理方式分析任务时,HBas
e可以高效地支持MapReduce框架进行工作。从原理上分析,HBase的存储可以抽象成key/value的形式,key是行键,value是列簇的集合(这些概念将在后面章节解释)。HBase的存储架构HBase的存储架构ZooKeeper
:协调所有服务器HMaster:管理所有RegionServersRegionServer:用户从RegionServer获取数据,一般是一台机器HRegion:一张完整的表保存在多个HRegion
s上,即1个HRegion存表的1块区域;HBase的存储架构---一些细节如图,在一个RegionServer上:HRegion:就是图中的红色区域,其中"TableFoo"和"TableBar"是
某两张用户表的一部分(其它部分在其它RegionServer上)META:即META表,保存HRegion的元数据,存储内容形式为:<表名+起始主键+regionID>ROOT:即ROOT表(根数据表)
,记录保存各个META表的位置,因为META表也可能被拆分HLog:数据更新日志,用户更新数据时,操作首先被提交到HLog文件中,是"Write-aheadlog"的方式;HBase的存储架构---一些细细节如图,在某个RegionServer中的某个Region上:MemSt
ore:HRegion的自带缓存区,目的当然是减少磁盘I/O,提高数据操作效率;*Note:每个HRegion由很多个Store(未画出)组成,每一个Store是一个列族(呆会再解释)下的数据;此外,一般来说每个Store配备一个或多个MemStore,MemStore
驻留在内存中,起缓存的作用;数据到来时,首先更新到MemStore中,达到一定条件后(e.g.脏数据阈值),再将数据更新到HFile中,达到持久化存储和一致性要求;2007年,MikeCafarella发布了BigTable开源实现的代码,他
称其为HBaseHBase实际上定义了一个四维数据模型,下面就是每一维度的定义:行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列
簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。版本:每列都可以有一个可配置的版本数量,你可以通过列修
饰符的制定版本获取数据。HBase的表结构(BigTable)OneCase:从MySql转型到HBaseMomentsMIDAuthor_IDTimestampPositionTextPic_links................
..77289552016-03-0316:20S.L.C,Utah"TremendousTrip!"http://www.trip/1/2?需求:将MySQL数据库中的一张表中的数据导入到HBase中,原表如下:
在HBase的列存储模式中,可以将属于聚集成”列族“,那么一条朋友圈(Moment)的元属性可以放入一个族中:列族内部扩展非常方便,动态扩展时不需要锁定整个表或整个元组(因为是按列存储的);例如,如果需要在朋友圈增加”APP分享“功能,
对于HBase表则只需要在Content:列族中加入新的列修饰符Content:APP_link。OneCase:从MySql转型到HBaseMomentsMIDAuthor_IDMetadata:Content:TimestampPosit
ionTextPic_link..................77289552016-03-0316:20S.L.C,Utah"TremendousTrip!"http://www.trip/1/2?为什么HBase高吞吐率?主要有两方面原因:1、快速的元组定位2、属性(列)的读/写
机制1、快速的元组定位---以DNS数据库为例需求:查找173.x.x.x的IP地址和域名为什么HBase高吞吐率?IP地址域名127.0.0.1localhost38.25.63.10x.acme.com............173.194.193.108smtp3.google
.com............RDBMSIP地址域名35.22.63.11x.conq.com38.25.63.10x.acme.com............IP地址域名173.194.65.109gmai
l-smtp.l.google.com173.194.193.108smtp3.google.com............HBaseHRegion1HRegionkIP地址域名127.0.0.1localhost38.25
.63.10x.acme.com............173.194.193.108smtp3.google.com............RDBMS......按元组插入顺序组织,没有索引的话需遍历默认按字母
表序组织,自动分表2、属性(列)的读/写机制---以基因组数据库为例:需要编号第400至500的基因序列(所有样本)为什么HBase高吞吐率?seq400seq401GCTAA.........GCTAC...seq50
0seq501ACCCG.........GCAGC...HRegion200RDBMSHBaseHRegion250GS_IDseg0...seg400...seg500...0ACCGT...GCTAA...A
CCCG........................100000AGGGT...GCTAC...GCAGC.........按行存储,大批、高维的数据导致性能瓶颈按列存储,HRegion定位,列并发I/OPart4---HBase的操作DDL操作DML操作API访问应用距离HBas
e与RDBMS的对比HBASE操作本节以创建一个个人信息表为例子来讲解如何使用DDL操作、DML操作和API来创建、修改、删除和查询表。前两项操作都是在hbaseshell中进行操作:使用个人信息为列演示HBase的用法。创建一个us
er表,其结构如表所示:这里address和info对于表来说是一个有三个列的列族:address列族由三个列contry、province和city组成;info列族由三个列age、birthday和company组成。
当然可以根据需要在address和info中建立更多的列族,如name、telephone等相应的列族加入info列族。HBASE操作——DDL操作DDL(DataDefinitionLanguage)是数据库模式定义语言,是用于描述数
据库中要存储的现实世界实体的语言,本节内容将执行关于Hbase的DDL操作,包括:数据库表的建立、查看所有表、查表结构、删除列族、删除表等操作。1.创建一个表成员:2.查看表结构:3.删除一个列族:分为三步:1.disab
le表2.alter表3.enable表create'user','user_id','address','info'describe'user'disable'user‘alter'user',{NAME=>'user_id',
METHOD=>'delete'}enable'user'4.删除表:1.disable表2.drop表5.查询表是否存在:6.判断表是否enable或disabledisable‘user‘drop‘user’exists'user'is_e
nabled'user‘is_disabled'user'HBASE操作——DML操作DML(DataManipulationLanguage)是数据操纵语言,用户通过它可以实现对数据库的基本操作。例如,对表中数据的查询、插入、删除和修改。在DML中,应用程序可以对数据库作插
,删,改,排,检等五种操作。本节将针对Hbase数据库执行如下DML操作,包括:添加记录、查看记录、查看表中的记录总数,删除记录、删除一张表、查看某个列族的所有记录等。HBaseShell基本操作命令如
表所示:1.向表中插入数据语法:put<table>,<rowkey>,<family:column>,<value>,<timestamp>例如:给表user的添加一行记录:<rowkey>是'andieg
uo',<family:column>是'info:age',value是'27',timestamp:系统默认2.获取一条记录1)获取一个ID的所有记录语法:get<table>,<rowkey>,
[<family:column>,....]例如:查询<table>为'user',<rowkey>为'andieguo'下的所有记录2)获取一个ID的一个列族的所有数据语法:get<table>,
<rowkey>,[<family:column>,....]例如:查询<table>为'user',<rowkey>为'andieguo',<family>为'info'下的所有记录put'user','andieguo','info:age','
27'put'user','andieguo','info:birthday','1989-09-01'put'user','andieguo','info:company','zonesion'get'user','andieguo'get'user'
,'andieguo','info'3)获取一个ID的一个列族中的一个列的所有数据get<table>,<rowkey>,[<family:column>,....]查询<table>为'user',
<rowkey>为'andieguo',<family:column>为'info:age'下的所有记录3.更新一个记录:4.获取指定版本的数据5.删除ID为‛andieguo”的列为’info:age’字段6.向ID为‛andieguo”添加’info:age’字段1)第一次添加(默
认使用counter实现递增)2)第二次添加7.清空数据表get'user','andieguo','info:age'put'user','andieguo','info:age','28'get'user
','andieguo',{COLUMN=>'info:age',TIMESTAMP=>1409304}delete'user','andieguo','info:age'incr'user','andieguo','info
:age‘COUNTERVALUE=1incr'user','andieguo','info:age‘COUNTERVALUE=2truncate'user'HBASE操作——API介绍1)几个相关类与HBase数据模型之间的对应
关系HbaseAdmin用于数据库的创建与删除,HbaseConfiguration用于数据库的配置,Htable用数据库表的相关操作,HtableDescriptor用于数据库表列族的相关操作,Put用于数据库表记录的添加,Get用户数据库表记录的获取,Scanner用于数据库表全
表查询。HBASE操作——API介绍2)HBaseConfiguration类名:org.apache.hadoop.hbase.HBaseConfiguration作用:对HBase进行配置常用方法:voidset(Stringname,Stringvalue),通过属性名来设
置值。用法示例:3)HBaseAdmin类名:org.apache.hadoop.hbase.client.HBaseAdmin作用:提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创
建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。Configurationconf=HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","Mas
ter");HBASE操作——API介绍4)HTableDescriptor类名:org.apache.hadoop.hbase.HTableDescriptor作用:包含了表的名字极其对应表的列族。常用方法:voidaddFamily(HcolumnDescriptorfamily)
添加一个列族。其详细用法如下所示,向tb_user表中添加了一个content列族。5)HColumnDescriptor类名:org.apache.hadoop.hbase.HColumnDescriptor作用:维护着关于列族的信息,例如版本号,压缩设置等。它通
常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。HTableDescriptortableDescriptor=newHTableDescriptor("tb_
user");HColumnDescriptorcol=newHColumnDescriptor("content:");tableDescriptor.addFamily(col);HBASE操作——API介绍6)HTable类名:
org.apache.hadoop.hbase.client.HTable作用:可以用来和HBase表直接通信。此方法对于更新操作来说是非线程安全的。HTabletable=null;ResultScannerrs=n
ull;try{Scanscan=newScan();table=newHTable(conf,tableName);rs=table.getScanner(scan);}catch(IOExcept
ione){e.printStackTrace();}HBASE操作——API介绍7)Put类名:org.apache.hadoop.hbase.client.Put作用:用来对单个行执行添加操作HTabletable=null;try{tab
le=newHTable(conf,tabelName);PutputRow1=newPut(rowKey.getBytes());putRow1.add(family.getBytes(),qualifier.getBytes(),value.getBytes());t
able.put(putRow1);table.close();}catch(IOExceptione){e.printStackTrace();}HBASE操作——API介绍7)Get类名:org.apache
.hadoop.hbase.client.Get作用:用来获取单个行的相关信息Getquery=newGet(rowKey.getBytes());query.addColumn(Bytes.toBytes(fa
mily),Bytes.toBytes(qualifier));if(table.exists(query)){Resultresult=table.get(query);System.out.format("ROW\t%s\n",
newString(result.getRow()));for(KeyValuekv:result.raw()){System.out.format("COLUMN\t%S:%s\t%s\n",newString(kv.getFamily()),newString(kv.getQualifie
r()),newString(kv.getValue()));}}HBASE典型应用场景典型HBASE问题:储存互联网建立互联网索引1爬虫持续不断地抓取新页面,这些页面每页一行地存储到BigTable里。2MapReduce计算作业运行在整张表上,生成索引,为网
络搜索应用做准备。搜索互联网3用户发起网络搜索请求。4网络搜索应用查询建立好的索引,或者直接从BigTable直接得到单个文档。5搜索结果提交给用户。三种主要使用场景1.捕获增量数据数据通常是细水长流,累加到已有数据库以备将来使用,例如分析,处理和服务。许多HBase使
用场景属于这个类别——使用HBase作为数据存储,捕获来自于各种数据源的增量数据。例如,这种数据源可能是网页爬虫(我们讨论过的BigTable典型问题),可能是记录用户看了什么广告和多长时间的广告效果数据,也可能是记录各种参数的时间序列数据。我们讨论几个成功的
使用场景和公司。捕获用户交互数据:FacebookFaceBook使用HBase的计数器来计量人们Like特定网页的次数。内容原创人和网页主人可以得到近乎实时的、多少用户Like他们网页的数据信息。他们可以因此更敏捷地判断应该提供什么内容。
Facebook为此创建了一个叫FacebookInsight的系统,该系统需要一个可扩展的存储系统。公司考虑了很多种可能,包括关系型数据库、内存数据库、和Cassandra数据库,最后决定使用HBase。基于HBase,Facebook可以很方便地横向扩展服
务规模,提供给数百万用户,也可以继续使用他们已有的运行大规模HBase机群的经验。该系统每天处理数百亿条事件,记录数百个参数。三种主要使用场景2.内容服务传统数据库的一个最大使用场合是为用户提供内容服务。各种各样的
数据库支撑着提供各种内容服务的应用系统。多年来这些应用在发展,因此他们所依赖的数据库也在发展。用户希望使用和交互的内容种类越来越多。此外,由于互联网迅猛的增长以及终端设备更加迅猛的增长,对这些应用的连接方式提出了
更高的要求。各种各样的终端设备带来了一个挑战:不同种类设备需要以不同格式使用同样的内容。一方面是用户使用内容UserConsumingContent,对应另一面是用户生成内容UserGenerateContent
。Tweete、Facebook帖子、Instagram图片和微博等都是这样的例子。他们相同的地方是使用和生成了许多内容。大量用户通过应用系统来使用和生成内容,而这些应用系统需要Hbase作为基础。三种主要使用场景3.信息交换Facebook短信系统经常被公开讨论,
他也可能极大地驱动了HBase的发展。当你使用Facebook时,某个时候你可能会收到或者发送短信给你的朋友。Facebook的这个特性完全依赖于HBase。用户读写的所有短信都存储在HBase里。支持Facebook短信的系统需要具备:高的写吞吐量,极大的表,数据中心内的强一致性。除了短信系统
之外,使用HBase的其他应用系统另外要求:高的读吞吐量,计数器吞吐量,自动分库。工程师们发现HBase是个理想的解决方案,因为他支持所有这些要求,他拥有一个活跃的用户社区,Facebook运营团队在Hadoop部署上有丰富经验,等等。在‚HadoopgoesrealtimeatFacebook”
这篇文章里,Facebook工程师解释了这个决定背后的逻辑和显示了他们使用Hadoop和HBase建设在线系统的经验。HBASE应用实例hbase上查询地理信息系统地理信息系统常作为在线交互用户体验的基础使用,如基于位置的服务。对应GIS系统的两大挑战,hbase是一个在线系统
可以很好地解决大数据延迟,对应空间位置建模以下重点介绍。地球数据最简单的形式就是地球上的一个点,由经度和纬度组成。当我们查询数据是我们必须返回同一地点附近的信息,并且返回的数据越少越好,这样可以减少传输数据。G
IS使用专门的空间索引来应对数据组织问题。并且我们将使用这种索引作为以下两种查询的基础,第一种查询,k个最近邻,第二种多边形区域内查询。下面使用一个例子慢慢讲解如何建立索引:假如你在纽约市,需要接入互联网,哪里有最近的wifi热点
呢?为了完成这个问题我们需要快速访问到数据的相关子集,我们可以从如下两个目标开始。1我们希望在空间里彼此接近的点在硬盘上的存储位置点也彼此相近。2我们希望响应查询时返回尽可能少的点。geohash(地理散列)算法Geohash(地理散列)算法是一种把几个值转换为一个值的算法。下面以
(39.92324,116.3906)为例,介绍一下geohash的编码算法。首先将纬度范围(-90,90)平分成两个区间(-90,0)、(0,90),如果目标纬度位于前一个区间,则编码为0,否则编码为1。由于39.92324属于(0,90),所以取编码为1。然后再将(0,90)分
成(0,45),(45,90)两个区间,而39.92324位于(0,45),所以编码为0。以此类推,直到精度符合要求为止,得到纬度编码为10111000110001111001。经度也用同样的算法,对(-180,180)依次细分,得到
116.3906的编码为11010010110001000100。geohash(地理散列)算法接下来将经度和纬度的编码合并,奇数位是纬度,偶数位是经度,得到编码111001110100100011110000
0011010101100001。最后,用0-9、b-z(去掉a,i,l,o)这32个字母进行base32编码,得到(39.92324,116.3906)的编码为wx4g0ec1。解码算法与编码算法相反,先进行base32解码,然后分离出经纬度,最后根据二进
制编码对经纬度范围进行细分即可,这里不再赘述。不过由于geohash表示的是区间,编码越长越精确,但不可能解码出完全一致的地址。用途&缺点:geohash的最大用途就是附近地址搜索了。不过,从geohash的编码算法中可以看出它的一个缺点:位于格子边界两侧的两点,虽
然十分接近,但编码会完全不同。实际应用中,可以同时搜索当前格子周围的8个格子,即可解决这个问题。十进制0123456789101112131415十进制16171819202122232425262728293031base320123456789bcdefgbase32hjkmnpqrs
tuvwxyz因此根据geohash计算的到的值作为行健是最佳的选择。如果使用一个库计算出每个节点的geohash,并且添加到数据中,则原来的数据变化成如下有计算出的数据可看地点越是相近,前边相同的数字
个数就多,因此我们使用geohash算法计算的结果作为行健存储在hbase中,就可以把地点相近的点存储在物理相近处。具体实现k近邻的查询,和如何使用过滤器(filter)和协处理器(coprocessor)把计算工作推往RegionServer不做介绍。HBASE与传统数据库比较Pros
&Cons与传统数据库,例如Oracle进行对比:Hbase优势:Hbase适合大量插入同时又有读的情况,Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间,Hbase很适合寻找按照时间排序topn的场景。Habse显著的缺陷:1.只能做简单的Keyvalue查
询,复杂的sql统计做不到。2.只能在rowkey上做快速查询。ThanksforListening小魔方站作品盗版必究语文更多精彩内容,微信扫描二维码获取扫描二维码获取更多资源谢谢您下载使用!附赠中高考状元学习方法前言高考状元是一个特殊的群体,在许多人的眼中
,他们就如浩瀚宇宙里璀璨夺目的星星那样遥不可及。但实际上他们和我们每一个同学都一样平凡而普通,但他们有是不平凡不普通的,他们的不平凡之处就是在学习方面有一些独到的个性,又有着一些共性,而这些对在校的同学尤其是将参加高考的同学都有一定的借鉴意义
。青春风采北京市文科状元阳光女孩--何旋高考总分:692分(含20分加分)语文131分数学145分英语141分文综255分毕业学校:北京二中报考高校:北京大学光华管理学院来自北京二中,高考成绩672分,还有20分加分。‚何旋给人最深的印象就是她的笑声,远远的就能听见她
的笑声。‛班主任吴京梅说,何旋是个阳光女孩。‚她是学校的摄影记者,非常外向,如果加上20分的加分,她的成绩应该是692。‛吴老师说,何旋考出好成绩的秘诀是心态好。‚她很自信,也很有爱心。考试结束后,她还问我怎么给边远地区的学校捐书
‛。班主任:我觉得何旋今天取得这样的成绩,我觉得,很重要的是,何旋是土生土长的北京二中的学生,二中的教育理念是综合培养学生的素质和能力。我觉得何旋,她取得今天这么好的成绩,一个来源于她的扎实的学习上的基础,还有一个非常重要的,我觉得特别想提的,何旋是一个特别充满自信,充满阳光的这样一个女孩子
。在我印象当中,何旋是一个最爱笑的,而且她的笑特别感染人的。所以我觉得她很阳光,而且充满自信,这是她突出的这样一个特点。所以我觉得,这是她今天取得好成绩当中,心理素质非常好,是非常重要的。高考总分:711分毕业学校:北京八中语文139分数学140分英语141分理综29
1分报考高校:北京大学光华管理学院北京市理科状元杨蕙心班主任孙烨:杨蕙心是一个目标高远的学生,而且具有很好的学习品质。学习效率高是杨蕙心的一大特点,一般同学两三个小时才能完成的作业,她一个小时就能完成。杨蕙心分析问题的能力很强,这一点在平常的考试中可以体现。每
当杨蕙心在某科考试中出现了问题,她能很快找到问题的原因,并马上拿出解决办法。孙老师说,杨蕙心学习效率很高,认真执行老师的复习要求,往往一个小时能完成别人两三个小时的作业量,而且计划性强,善于自我调节。此外,学校还有一群与她实力相当的同学,他们经常在一起切磋、交流,形成一
种良性的竞争氛围。谈起自己的高考心得,杨蕙心说出了‚听话‛两个字。她认为在高三冲刺阶段一定要跟随老师的脚步。‚老师介绍的都是多年积累的学习方法,肯定是最有益的。‛高三紧张的学习中,她常做的事情就是告诫自己要坚持,不能因为一次考试成绩就否定自己。高三的几次模拟考试中,她的成绩一直稳
定在年级前5名左右。上海2006高考理科状元--武亦文武亦文格致中学理科班学生班级职务:学习委员高考志愿:复旦经济高考成绩:语文127分数学142分英语144分物理145分综合27分总分585分“一分也不能少‛“我坚持做好每天的预习、复习,每天放学回家看半小时报纸
,晚上10:30休息,感觉很轻松地度过了三年高中学习。‛当得知自己的高考成绩后,格致中学的武亦文遗憾地说道,‚平时模拟考试时,自己总有一门满分,这次高考却没有出现,有些遗憾。‛坚持做好每个学习步骤武亦文的高考高分来自于她日常严谨
的学习态度,坚持认真做好每天的预习、复习。‚高中三年,从来没有熬夜,上课跟着老师走,保证课堂效率。‛武亦文介绍,‚班主任王老师对我的成长起了很大引导作用,王老师办事很认真,凡事都会投入自己所有精力,看
重做事的过程而不重结果。每当学生没有取得好结果,王老师也会淡然一笑,鼓励学生注重学习的过程。‛上海高考文科状元---常方舟曹杨二中高三(14)班学生班级职务:学习委员高考志愿:北京大学中文系高考成绩:语文121分数学146分英语146分历史134分综
合28分总分575分(另有附加分10分)“我对竞赛题一样发怵”总结自己的成功经验,常方舟认为学习的高效率是最重要因素,‚高中三年,我每天晚上都是10:30休息,这个生活习惯雷打不动。早晨总是6:15起床,
以保证八小时左右的睡眠。平时功课再多再忙,我也不会‘开夜车’。身体健康,体力充沛才能保证有效学习。‛高三阶段,有的同学每天学习到凌晨两三点,这种习惯在常方舟看来反而会影响次日的学习状态。每天课后,常方舟也不会花太多时间做功课,常常是做完老师布置的作业就算
完。“用好课堂40分钟最重要。我的经验是,哪怕是再简单的内容,仔细听和不上心,效果肯定是不一样的。对于课堂上老师讲解的内容,有的同学觉得很简单,听讲就不会很认真,但老师讲解往往是由浅入深的,开始不认真,后来就很难听懂了;即使能听懂,中间也可能出现一些知识盲区。高考试题
考的大多是基础知识,正就是很多同学眼里很简单的内容。‛常方舟告诉记者,其实自己对竞赛试题类偏难的题目并不擅长,高考出色的原因正在于试题多为基础题,对上了自己的‚口味‛。