首页 文章 精选 留言 我的

精选列表

搜索[编译原理],共10000篇文章
优秀的个人博客,低调大师

如何理解Hadoop-Hbase原理与应用小结

1 我们常说HBase是“数据即日志”的数据库,它是怎样修改和删除数据的?和Oracle这类传统的RDBMS有什么区别? 答:首先Hbase中的一个“元素”是由行键、列族名、限定符、时间戳唯一标识的并且行键作为数据行在表里的唯一标识,我们只有通过行键来访问列族别无他法。 修改数据:我们先找到要修改的行键把新的数据记录追加到对应的列族中并打上一个新时间戳代表最新版本。 删除数据:插入带有删除标记的行进入,相当于把整个行键所在的行删了。 小结:hbase中所有修改和删除都是用insert方式来完成的,这是由底层HDFS文件系统特性决定的,HDFS中的文件只能一次性写入不能修改可以删除在写回。因此hbase是天生面向时间查询的数据库。例如 查询最近一段时间一个人发布的博客、发布签名、发布照片so on。 hbase特点 (1)适合大量插入同时key-value查询,例如可以输入一个key查询一个value,还可以输入一组key查询一组value。 (2)瓶颈是硬盘的传输速度,因为有大量的插入操作和读出操作,使用SSD SCSI IDE不同的硬盘效率是不同的。 (3)适合数据分析。 (4)列式数据库会把相同列的数据都放在一块即列为单位存储。当我们查询某一列的时候只需要调出相应的块即可,这样还可以减少很多I/O。 (5)如果数据元素间的相似性很高的话可以进行大幅度的压缩,相似度越高压缩比越大,甚至可以压缩到原来十几分之一、上百分之一。即节约了空间又减少了I/O,从而提高性能。 (6)hbase只有主键索引,它使用的是LSM(Log Structure Merge)索引,因为hbase所有的修改都是使用追加方式完成的,从数据流上看按照顺序方式写入与日志写入的方式相同,我们又可以认为数据和日志一体化,这又节约了很多空间。 oracle特点 (1)适合小事务短时间片密集型OLTP系统,例如在线交易系统。 (2)瓶颈是硬盘的寻道时间(磁头移动时间),因为oracle随机写随机修改块,首先要找到块这个过程就是寻道时间,而寻道时间又由硬盘转速决定的,5400 7200 15000转/秒 不同的转速效率也是不同的。 (3)适合做SQL统计。 (4)行式数据库会按照数据行顺序集中存放即行为单位存储。当我们查询某一列的时候必须把表里所有的行读完才能抽取我们所要的行,这样很不划算,还要付出很大的I/O资源。 (5)那么从结构上讲oracle的压缩性能就要略逊一筹。 (6)oracle常用的是B+树索引,比较大小来查找记录,小的走左边大的走右边,如果列中的相似度较高的话性能较差。 2 HBase合并storefile的原因是什么?在合并的过程中会做什么操作?如果在合并过程中恰好有涉及到有关storefile的查询发生,会发生什么情况! 答:首先我们介绍一下Hbase数据存储的物理结构 一个物理节点只能跑一个HRegionserver 一个HRegionServer可以包括很多个Region实例,可以是不同表Region 一个Region包含一个hlog和多个store(一个store就是一个列族,因为同列族元素在物理上存放在同一个地方,不同列族在物理上是分离的) 一个store包含一个memstore和多个storefile 当我们在处理数据的时候,首先把数据加载到memstore,数据越来越多直到memstore占满,再写入硬盘storefile中,每次写入形成一个单独storefile,当storefile达到一定的数量后,就会开始把小storefile合并成大storefile,因为hadoop不擅长处理小文件,文件越大性能越好。 在合并的过程中会抛弃删除标识的行和版本过旧的行(hbase版本抛弃方式(1)我们可以预先定义版本的个数,超过这个值就抛弃(2)还可以预先定义版本的时间长短,超过这个时间就抛弃),合并完后形成更大的storefile,当达到数量再次合并,直到storefile容量超过一定阀值后会把当前的Region进行分裂为2个并由Hmaster(hbase数据库主控节点)分配到不同的HRegionServer服务器处理实现负载均衡。 如果在合并过程中恰好有涉及到有关storefile的查询发生的话,我们先是把小storefile加载到内存中进行合并此时如有用户访问可以在内存中检索相关数据返回给用户,我们可以想象在内存中做一个独立镜像备份专门提供被查询需求,另一个主体在另一块内存空间里进行合并,当合并完成后释放备份的内存空间,返回到原来的状态。 3 Hbase具有怎么样的一致性水平 答:hbase是最终一致性的系统,因为hbase是架构在hadoop之上的数据库,“错误是常态”是hadoop座右铭,在cap理论中hbase为了满足可用性和分区容错性牺牲了一部分的数据一致性。 举例:我们要进行电信的指标汇总,并且把汇总结果冗余三份分布在3个datanode中,我们可以设置阀值只要有2份结果保存了我们就可以继续做下面的操作,在一定时间范围内允许第3份结果稍后一致性同步,这就是最终一致性。所以说hbase是适用于AP理论的系统,最终一致性也满足分布式集群的特点。 本文转自 leonarding151CTO博客,原文链接:http://blog.51cto.com/leonarding/1049404,如需转载请自行联系原作者

优秀的个人博客,低调大师

[Android Pro] Android中IntentService的原理及使用

转载自:http://blog.csdn.net/ryantang03/article/details/8146154 在Android开发中,我 们或许会碰到这么一种业务需求,一项任务分成几个子任务,子任务按顺序先后执行,子任务全部执行完后,这项任务才算成功。那么,利用几个子线程顺序执行是 可以达到这个目的的,但是每个线程必须去手动控制,而且得在一个子线程执行完后,再开启另一个子线程。或者,全部放到一个线程中让其顺序执行。这样都可以 做到,但是,如果这是一个后台任务,就得放到Service里面,由于Service和Activity是同级的,所以,要执行耗时任务,就得在 Service里面开子线程来执行。那么,有没有一种简单的方法来处理这个过程呢,答案就是IntentService。 什么是IntentService,首先看看官方的解释: IntentService is a base class forServices that handle asynchronous requests (expressed asIntents) on demand. Clients send requests throughstartService(Intent)calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work 简单 说,IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动 IntentService的方式和启动传统Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们去手动控 制。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回 调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。 还有一个说明是: All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time. 大致意思是:所有请求都在一个单线程中,不会阻塞应用程序的主线程(UI Thread),同一时间只处理一个请求。 那么,用IntentService有什么好处呢?首先,我们省去了在Service中手动开线程的麻烦,第二,当操作完成时,我们不用手动停止Service,第三,it's so easy to use! ok,接下来让我们来看看如何使用,我写了一个Demo来模拟两个耗时操作,Operation1与Operation2,先执行1,2必须等1执行完才能执行: 新建工程,新建一个继承IntentService的类,我这里是IntentServiceDemo.java public class IntentServiceDemo extends IntentService { public IntentServiceDemo() { //必须实现父类的构造方法 super("IntentServiceDemo"); } @Override public IBinder onBind(Intent intent) { System.out.println("onBind"); return super.onBind(intent); } @Override public void onCreate() { System.out.println("onCreate"); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { System.out.println("onStart"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void setIntentRedelivery(boolean enabled) { super.setIntentRedelivery(enabled); System.out.println("setIntentRedelivery"); } @Override protected void onHandleIntent(Intent intent) { //Intent是从Activity发过来的,携带识别参数,根据参数不同执行不同的任务 String action = intent.getExtras().getString("param"); if (action.equals("oper1")) { System.out.println("Operation1"); }else if (action.equals("oper2")) { System.out.println("Operation2"); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void onDestroy() { System.out.println("onDestroy"); super.onDestroy(); } } 我把生命周期方法全打印出来了,待会我们来看看它执行的过程是怎样的。接下来是Activity,在Activity中来启动IntentService: public class TestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //可以启动多次,每启动一次,就会新建一个work thread,但IntentService的实例始终只有一个 //Operation 1 Intent startServiceIntent = new Intent("com.test.intentservice"); Bundle bundle = new Bundle(); bundle.putString("param", "oper1"); startServiceIntent.putExtras(bundle); startService(startServiceIntent); //Operation 2 Intent startServiceIntent2 = new Intent("com.test.intentservice"); Bundle bundle2 = new Bundle(); bundle2.putString("param", "oper2"); startServiceIntent2.putExtras(bundle2); startService(startServiceIntent2); } } 最后,别忘了配置Service,因为它继承于Service,所以,它还是一个Service,一定要配置,否则是不起作用的,开始我就是忘了,结果半天没反应。 <service android:name=".IntentServiceDemo"> <intent-filter > <action android:name="com.test.intentservice"/> </intent-filter> </service> ok,最后来看看执行结果: 从结果可以看 到,onCreate方法只执行了一次,而onStartCommand和onStart方法执行了两次,开启了两个Work Thread,这就证实了之前所说的,启动多次,但IntentService的实例只有一个,这跟传统的Service是一样的。Operation1 也是先于Operation2打印,并且我让两个操作间停顿了2s,最后是onDestroy销毁了IntentService。 这就是IntentService,一个方便我们处理业务流程的类,它是一个Service,但是比Service更智能。 分类: Android Pro 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/3779933.html如需转载请自行联系原作者 demoblog

优秀的个人博客,低调大师

MaxCompute SQL原理解析及性能调优

分享内容 介绍了MaxCompute(原ODPS) SQL的基于mapreduce是如何实现的及一些使用小技巧,回顾了mapreduce各个阶段可能产生的问题及相应的处理方法,同时介绍了一些应对数据倾斜的处理方法,最后介绍了一些关于数据集构造、特征选择的技巧帮助减少资源利用。 分享嘉宾 顾茂杰 阿里云天池竞赛选手DesTiny 在天池参加过阿里移动推荐算法、新浪微博互动预测大赛、IJCAI 16,并在新浪微博互动预测大赛中获得冠军。现就职于蚂蚁金服,担任推荐平台算法工程师。 分享视频https://v.qq.com/iframe/player.html?vid=l0552ocwlax&width=670&height=376.875&auto=0 分享重点 阿里巴巴大数据-玩家社区https://yq.aliyun.

优秀的个人博客,低调大师

从原理到实践:Oracle 12.2 Sharding技术揭秘

何剑敏Oracle ACS华南区售后团队,首席技术工程师 曾供职于中国联通信息计费部、卓望数码,系统支撑部首席DBA,负责中国移动全网梦网业务和移动应用商城数据库维护。后供职于IBM,负责米其林项目和澳洲电信(Telstra)项目数据库管理。现供职于Oracle ACS华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。 编辑说明:感谢何剑敏撰写了关于Sharding的相关文章,并授权我们分享给大家。根据我们的理解对他的文章顺序做了调整整合,以便于大家理解阅读。 1 Oracle 12.2的重磅特性及发布时间 2016年2月,Oracle出了12.2的beta2版本,并且在4月更新了相关文档,如Concepts,Administrator’s Guide,Global Data Services Concepts and Administration Guide等等。这个版本的文档,比之前2015年10月底文档要好很多,许多概念,演示demo,操作步骤都得到了很好的说明。据信Oracle 12.2将于6.1正式发布。在12.2中Sharding特性受到了广泛的关注,本文着重讲述这一特性的使用和构建。 2 三言两语说透Oracle的Sharding技术 爱因斯坦说过,如果你不能用简单的语言解释某个东西,你就不是真正的理解这个东西。通过这几天的实验和学习,我尽量用简单的语言来给大家描述下什么是Oracle的sharding。 Sharding,中文名叫数据分片,是对数据进行横向扩展的一种方式。数据量增加,我可以通过加一台机器,来扩展其容纳能力和处理能力。 Sharding其实需要解决三个问题:一、数据的路由,二、数据的分片,三、分片的元数据信息保存。 1.数据路由是数据库告诉应用程序,你让我查的数据目前在哪个分片上,这条路怎么走过去。 2.数据分片就是实际数据的存放地点,往往每个分片就是一台单独的服务器(含存储)。 3.由于分片的数据实际是被切割放在不同的机器上,那么需要有个集中的地点存放数据分片的信息,即分片元数据的信息。 应用问路由怎么走,路由去查询元数据得知需要的数据在哪个分片上,最终应用访问到该分片上。 最著名的sharding database就是mongoDB了。mongoDB的sharding功能的架构也是为了解决上面的三个问题,MongoDB有路由服务器(Router)解决路由问题,分片服务器(Shard)存储实际数据(可能还有副本和仲裁),以及配置服务器(Config Server)存放分片元数据。 》》延伸阅读:数据库高可用和分区解决方案-MongoDB 篇 那么,对应在Oracle12.2的 Sharding DB 上,就是GDS框架(GSM,shard directors),shard node,和shardcat数据库。 所以,到这里你就可以比较清楚的了解了oracle 12.2的sharding功能其实就是3个模块。顺便说一下,MonogoDB支持多个副本和仲裁,oracle的adg也同样支持一主多备,由FSFO进行管理。 》》关注Oracle公众号回复"Shard"可以获得:Oracle 12.2 Sharded Database Management.pdf 3 小荷谈Sharding体验 下面,再谈一下我个人对sharding架构的一些看法。 Shardcat是非常重要的一个模块,上面不仅仅有分片的元数据信息,还有duplicated table的master table信息,另外,当进行cross shard query的时候,他还起着coordinator database的作用。所以建议对这个部分搭建RAC+adg架构,避免shardcat的单点故障。 shard node,单个shard node的失效,将导致整个表的不可用。所以我们也要对shard node建立高可用的副本,这里可以用ADG或者OGG的技术。 既然做sharding,又要在做HA,那么就变成了堆机器,堆存储的方式了。我们假设在一个10个shard node的环境,需要多少台机器:一个shardcate,做rac+adg,那么最少就是3台;10个shard node,如果都有adg,那么最少就是20台。那么当前这个环境,就至少要23台机器了。 Sharding架构极其考验对应用的熟悉程度,需要配合应用进行合理的分区和分片。另外,如sharding key必须建索引,sharding的方式可以有一致性hash,让数据均匀分布,也还是可以是range或者list分区,或者hash-range,hash-list的子分区。分片和分区方式需要结合业务,有些场景需要相关数据都在一个分区,避免cross shard join,有些场景需要均匀分片,禁止集中分片,导致热块数据都在一个分片上(如序列增长,做range分区,热点数据将会都在一个分片上)。 事实表和维度表,似乎可以很好的利用sharding功能。维度表做duplicated table,而事实表做sharded table。 4 从安装部署到体验 (一)安装介质: 1. 你需要12.2的database的安装介质(两个zip压缩包)来安装db软件,用于shardcat数据库,和shard node主机上的数据库。 2. 你还需要12.2的gsm安装介质(一个压缩包)来安装GDS框架和gsm服务。这是安装在shardcat主机上的。 3. 你还需要12.2.的client安装介质(一个压缩包)来装scheagent,这是安装在shard node主机上的。安装schagent是为了在shardcat主机上发起命令,在远程的shard node上,通过agent调起来netca和dbca来安装监听和数据库。另外,如果shard node有active dataguard,agent也会自动帮你配好dataguard,配好broker和FSFO。 (二)HIGH LEVEL安装步骤: 1.Oracle Sharding Prerequisites 2.Setting Up the Oracle Sharding Host Environment Scripts 3.Installing Oracle Database 4.Installing the Shard Director Software 5.Creating the Shard Catalog Database 6.Setting Up the Oracle Sharding Management and Routing Tier 7.Deploying and Managing a System-Managed SDB (三)详细安装步骤: 1.Oracle Sharding Prerequisites 12.2企业版non-cdb 使用文件系统而非ASM (12.2 Beta要求,正式发行后,可能会改) 主机hosts文件写上本机和各个shard node的IP解析 机器必须全新,不能残留之前有安装过oracle的信息。 2.Setting Up the Oracle Sharding Host Environment Scripts 目的是因为shardcat和gds都安装在一个主机上,同一个oracle用户,不同ORACLE_HOME,所以建立环境变量的脚本,会比较容易在database环境和gsm环境之间切换。 admin guide上是用shardcat.sh,shard-director1.sh脚本,但是我的可能更简单实用,直接定义成alias。(这种方法其实是跟ORACLE BASE学的。老DBA应该都听说过这个网站。) ##修改环境变量,在环境变量中设置2个alias别名 3.Installing Oracle Database 安装db软件,解开2个压缩包,加载一下上面建好的db_env环境变量,开始跑runInstaller,选择software only,没啥好说的。注意ORACLE_HOME的路径和环境变量中定义的DB的ORACLE_HOME一致。 在shardcat主机和shard node主机,都需要安装好db软件。 4.Installing the Shard Director Software 安装gds框架和gsm服务,解开gsm的压缩包,加载一下上面建好的gsm_env环境变量开始跑runInstaller,注意选择不同与DB的ORACLE_HOME,注意ORACLE_HOME的路径和环境变量中定义的gsm的ORACLE_HOME一致。 本文中gds安装在和shardcat同一个主机上。即shardcat和shard Director在同一主机。(其实,如果有需要,也可以不同主机的) 4.b. Installer schagent in all shard node(admin guide文档没写这步骤,本人免费赠送) 选择client安装包,解压缩后,运行runInstaller,在每个shard node上建立agent 5.Creating the Shard Catalog Database 运行dbca开始建立数据库实例,这个实例是放分片数据的元数据的。我们把这个实例名叫shardcat。 安装好后,再建立listener。以便可以连接这个数据库。 6.Setting Up the Oracle Sharding Management and Routing Tier 7.Deploying and Managing a System-Managed SDB 我们开始部署,以最简单的System-Managed SDB为例。 另外,admin guide中介绍的是4台主机做shard node,其中每2台互为dataguard主备。我们这边为了节约空间和资源,不搞dataguard了,只建立primary库。因此只要2台主机做shard node。 此时,就开始部署shard了。在shard node上的agent会自动的调用netca和dbca,创建listener和database,2个shard node的操作是并行进行的。(如果是有datauard,那么是先建立一对主备,再建立另一对主备。)你可以在分别是两个shard node上ps -ef|grep ora_ 看到已经有sh1和sh2的实例了。 等deploy完,我们可以检查一下shard的情况了: 建立service: (四)建立应用用户,利用应用用户建立sharded table和duplicated table: 利用应用用户登录,创建sharded table和duplicated table 至此,一个Oracle Sharding Database环境就搭建完毕了。欢迎大家体验这一新技术带来的数据库扩展性。原文链接指向原作者网站地址。 文章转自数据和云公众号, 原文链接

优秀的个人博客,低调大师

《大数据分析原理与实践》一一导读

前 言 本书的缘起与成书过程大数据经过分析能够产生高价值,这无疑已在大数据火爆的今天成为共识,从而使得大数据分析在“大数据+”涉及的领域(如工业、医疗、农业、教育等)有了广泛的应用。大数据分析的相关知识不仅是大数据行业的从业人员应该必备的,也是和大数据相关的各行各业的从业者需要了解的。然而,人们对大数据分析的解读有多个不同方面。从“分析”的角度解读,大数据分析可以看作统计分析的延伸;从 “数据”的角度解读,大数据分析可以看作数据管理与挖掘的扩展;从“大”的角度解读,大数据分析可以看作数据密集高性能计算的具体化。而大数据分析的有效实施也需要多个方面的知识。从分析的角度来讲,需要统计学、数据分析、机器学习等方面的知识;从数据处理的角度来讲,需要数据库、数据挖掘等方面的知识;从计算平台的角度来讲,需要并行系统和并行计算的知识。上述多样化

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册