精华内容
下载资源
问答
  • 在做大数据的时候刚开始把所有数据都存入lhbase中,结果导致hbase每天都有很多数据 而且key设置的ip虽然散列了,但是随着数据量的增加,用spark查询越来越慢,因为新学习当时没有了解到Hbase的具体存储模式。...

    在做大数据的时候刚开始把所有数据都存入lhbase中,结果导致hbase每天都有很多数据 而且key设置的是ip虽然散列了,但是随着数据量的增加,用spark查询是越来越慢,因为新学习当时没有了解到Hbase的具体存储模式。在知道之后,就考虑写文件的方式。这个只是暂时想出来的方案。后来改成写Hadoop文件。
    我们经常用的IO 大部分都是BIO,但是在我们提高性能的方式上都是AIO,NIO.他们有什么区别呢?我们今天就来看看。

    明白两个概念

    • 阻塞与非阻塞: 阻塞就是当满足条件后,程序会等待该方式或者方法执行完毕后才返回,才能继续进行。非阻塞就是不管io操作是否完成都会继续执行,而不需要等待、这样能快速的完成任务。
      • 同步与非同步:同步任务,是需要等待任务的完成。才能获得该操作,异步则是操作后继续执行,不必等待结果的返回。通常使用事件或者回调机制来实现任务的之间的关系。

    BIO

    在jdk1.4版本之前我们大部分都是采用的BIO,这是一种同步阻塞的的io方式,比我们经常用到的ServerSocket,就是处于等待的阻塞的。只要有请求过来才执行。该方式造成的就是性能上损耗很大。
    * 比如我在写文件的时候,如果有很多数据要写比如需要每秒写入100M/S,可能该方式就不适合了,因为阻塞的会一直等待上次的执行完毕之后才能继续执行,不能充分的发挥磁盘的IO性能。所以平常读写文件对于性能没有太大的要求,可以用该方式去使用
    * 对于高性能的读写该方式就不行了。读写会造成很多的等待。就算开多线程,同样的事情还是会出现。

    NIO

    NIO在操作上主要是用来解决我们上面说的并发问题,如果有多个访问过来在AIO只能是等待的上一个链接请求结束后才能操作。
    NIO是基于Reactor的,在处理的时候NIO是使用单线程或者少量的多线程来操作的。这样就降低了系统的压力。NIO
    在NIO中主要有以下几个内容需要注意的 :
    * Buffer ,在NIO 中的高效容器,原始数据类型都有相应的Buffer实现。缓冲区,其中capacity表示缓冲区的大小,在实现的时候指定,读写限制(limit)表示缓冲区在进行读写操作时的最大允许位置;读写位置(position)表示当前进行读写操作时的位置;缓冲区的很多操作(clear、flip、rewind)都是操作limit和position的值来实现重复读写。
    * Channel表示为一个已经建立好的支持I/O操作的实体的链接,在此链接上进行数据的读写操作,使用缓冲区实现读写
    * Selector(多路复用器):通过一个选择器来同事对多个套接字通道进行监听,当其中套接字通道有可用的事件的时候,通道改成可用状态,选择器就可以实现可用的状态。主要是阻塞在select操作中,前面说的通道可用也是Channel。这样实现的单线程对多个Channel进行高效的管理。
    * 具体实现可以去网上看代码。这里不写代码了
    * 但是NIO还是同步阻塞的。没有实现异步的操作
    * 流程是 客户端访问 ——>Channel —>Selector ——> keys ——状态改变——>server

    流程

    AIO

    其实AIO是在NIO的基础上更近了一步,解决了NIO的同步情况。在这种情况下对IO的操作都是异步的。不需要进行等待。就能提高性能。通过调用回调函数来实现对异步操作结果的获取。

    总结

    Java对BIO、NIO、AIO的支持:

    • JavaBIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

    • Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

    • Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

    BIO、NIO、AIO适用场景分析:

    • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
    • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

    • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

    • 欢迎加入星球
    展开全文
  • Git(一)本地操作基础

    2019-03-27 10:55:55
    git并不通过文件名在数据库中存储信息的,而是通过信息的散列值。 git追踪的内容而不是文件。 在git中,文件一共有三种状态: 已提交(commit):表示数据已经被安全地存入本地数据库中 已修改(modified):...

    git简介

    git并不是通过文件名在数据库中存储信息的,而是通过信息的散列值。
    git追踪的是内容而不是文件。

    在git中,文件一共有三种状态

    • 已提交(commit):表示数据已经被安全地存入本地数据库中
    • 已修改(modified):表示已经改动了文件,但尚未提交到数据库
    • 已暂存(staged):表示对已修改的当前版本的做出了标识并将其加入下一次要提交的快照中

    git的基本工作流如下

    • 修改工作目录中的文件
    • 暂存文件,将这些文件的快照加入暂存区
    • 提交暂存区中的文件,将快照永久地保存在git目录中

    git设置用户身份

    -> ~ git config --global user.name "yangyun"
    -> ~ git config --global user.email "john@example.com"
    

    “–global”选项是面向全局的。如果你想在某个项目中使用不同的用户名和电子邮件地址,可以在项目中使用不带“–global”选项的命令。

    在工作目录中文件都处于:已跟踪(tracked)或未跟踪(untracked)。

    git常见命令

    # 显示常用命令的一些命令
    -> ~ git
    

    查看命令列表

    # 查看Git版本号
    -> ~ git --version
    
    # 查看git子命令列表等价于git help -a
    -> ~ git help --all 
    
    -> ~ git help config
    

    git的短长选项

    # 下面的命令等价:git commit --message="Fixed a type"
    -> ~ git commit -m "Fixed a type"
    

    缩写形式-m使用了一个连字符,而长形式–message使用了两个连字符。

    “–”双破折号可以分离命令行的控制部分与操作数部分。

    git初始版本库

    -> ~ git init
    

    这条命令会将当前的目录,初始化为一个git仓库!最初每一个git版本库都是空的。
    添加文件到版本库中:

    # 添加指定的文件到版本库
    -> ~ git add index.html
    # 将当前目录及子目录中的文件都添加到版本库中,如果提供的参数是目录,该命令会递归地添加该目录下的所有文件
    -> ~ git add .
    # 显示状态信息
    -> ~ git status
    # 简化版
    -> ~ git status -s
    

    查看已暂存和未暂存的变更

    # 工作区的内容与暂存区的内容对比
    -> ~ git diff
    # 查看暂存的内容与上次提交的内容比较,“--staged”与“--cached”是等同的
    -> ~ git diff --staged
    

    使用外部工具

    # tool可以替换为emerge,opendiff(推荐),vimdiff3
    -> ~ git difftool --tool=<tool>
    

    提交文件

    -> ~ git commit -m "xxx"
    # 跳过暂存区,"-a"选项跳过暂存区
    -> ~ git commit -am "xxx"
    

    移除文件

    # 文件删除
    -> ~ git rm file
    # 文件删除回滚
    -> ~ git checkout HEAD  -- file
    # 将文件从暂存区删除
    -> ~ git rm --cached file
    

    重命名文件

    -> ~ git mv file_from file_to
    

    查看日志

    -> ~ git log
    # 加上“-p”参数会显示出每次提交所引入的差异
    -> ~ git log -p
    # “-2”显示最近两次的提交
    -> ~ git log -p -2
    # “--stat”显示查看每个提交的简要统计信息
    -> ~ git log --stat
    # “--follow”选项可以显示fileA的全部历史记录,即使被修改过名称
    -> ~ git log --follow fileA
    
    git log常用选项
    选项 描述
    -p 按补丁格式显示每个提交引入的更改
    –stat 显示每个提交中被更改的文件的统计信息
    –shortstat 只显示上述–stat输出中包含“已更改/新增/删除”行的统计信息
    –name-only 在每个提交信息后显示被更改的文件列表
    –name-status 在上一个选项输出基础上还显示出“已更改/新增/删除”统计信息
    –abbrev-commit 只显示完整的SHA-1 40位校验和字符串中的前几个字符
    –relative-date 显示相对日期,而不是完整日期
    –graph 展示分支和合并的历史信息
    –pretty 可选格式显示提交
    git log输出范围
    选项 描述
    -(n) 只显示最新的n次提交
    –since,–after 只输出指定日期之后的提交
    –until,–before 只输出指定日期之前的提交
    –author 只输出作者与指定字符串匹配的提交
    –committer 只输出提交者与指定字符串匹配的提交
    –grep 只输出提交信息包含指定字符串的提交
    -S 只输出包含“添加或删除指定字符串”的更改的提交

    撤销操作

    # 这样被遗忘的文件也会被提交,也会被合并到一个批次
    -> ~ git commit -m "initial commit"
    -> ~ git commit forgotten_file
    -> ~ git commit --amend
    # 文件恢复到最近提交的版本
    -> ~ git checkout -- file
    

    git分支

    查看分支的指向及项目历史的分叉情况

    -> ~ git log --oneline --decorate --graph --all
    

    git分支

    # 查看分支列表
    -> ~ git branch
    # 创建一个新的分支
    -> ~ git branch testing
    # 切换到指定的分支
    -> ~ git checkout testing
    # 创建分支,并切换到这个分支
    -> ~ git checkout -b hotfix
    # 删除分支
    -> ~ git branch -d hotfix
    # 合并分支
    -> ~ git merge testing
    # 每个分支上面的最新提交
    -> ~ git branch -v
    # 刷选已经并入当前分支的所有分支
    -> ~ git branch --merged
    # 刷选尚未并入的所有分支
    -> ~ git branch --no-merged
    

    变基

    变基操作是把某条开发支线上的工作在另一个分支线上按顺序重现。合并操作是找出两个分支的末端,并把它们合并到一起。
    注意事项:对本地尚未推送的更改进行变基操作,从而简化提交历史,但绝不能对任何已经推送到服务器的更改进行变基操作!
    不要对已经存在于本地仓库之外的提交执行变基操作。

    # 简单的变基操作
    -> ~ git checkout hotfix
    -> ~ git rebase master
    -> ~ git checkout master
    -> ~ git merge hotfix
    
    # 将当前分支切换到client分支,并找出client分支和server分支的共同祖先提交,然后把自从共同祖先以来client分支上独有的工作在master分支上重现。
    -> ~ git rebase --onto master server client
    
    展开全文
  • 1113.6.3 文件出错标志和文件结束标志置 0 函数 206 13.7 C库文件 208 13.8 本章小结 第1篇 基本知识 第1章 C++的初步知识 *1.1 从C到C++ *1.2 最简单的C++程序 1.3 C++程序的构成和书写形式 1.4 C++...
  • 1113.6.3 文件出错标志和文件结束标志置 0 函数 206 13.7 C库文件 208 13.8 本章小结 第1篇 基本知识 第1章 C++的初步知识 *1.1 从C到C++ *1.2 最简单的C++程序 1.3 C++程序的构成和书写形式 1.4 C++...
  • (63) 线性表的顺序存储结构和线性表的链式存储结构分别(B) A. 顺序存取的存储结构、顺序存取的存储结构 B. 随机存取的存储结构、顺序存取的存储结构 C. 随机存取的存储结构、随机存取的存储结构 D. 任意存取的存储...
  • Java EE常用框架.xmind

    2020-06-19 16:08:35
    部署完的工作流是需要手动去执行该工作流的。 根据由谁处理当前任务,我们就可以查询出具体的任务信息。 根据任务的id,我们就可以执行任务了。 细节 流程定义:涉及到了四张数据库表 我们可以...
  • 4.2.7 池 150 4.2.8 自动SGA内存管理 150 4.3 小结 151 第5章 Oracle进程 153 5.1 服务器进程 153 5.1.1 专用服务器连接 154 5.1.2 共享服务器连接 156 5.1.3 连接与会话 157 5.1.4 专用服务器与共享...
  • 书中涉及的内容非常广泛,包括DBMS的概念、术语和体系结构,ER模型和ER图,数据抽象和语义数据建模,UML类图表示法,基本关系模型,关系代数和关系演算,SQL,规范化,磁盘上组织记录文件的主要方法,文件的索引技术...
  •  本书一本关于Oracle 9i & 10g数据库体系结构的权威图书,涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的...
  •  本书一本关于oracle database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要的oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...
  • PGP常用的版本PGP Desktop Professional,它可以用来加密文件,可以用来对邮件保密以防止非授权者阅读,还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。同时,通过使用公钥...
  • Java2核心技术第7版全两卷.pdf中文高清

    千次下载 热门讨论 2012-09-14 14:22:28
    12.3 zip文件流 12.4 流的使用 12.5 对象流 12.6 文件管理 12.7 新的i/o 第13章 泛型程序设计 13.6 约束与局限性 13.7 泛型类型的继承规则 13.8 通配符类型 13.9 反射和泛型 附录a java关键字 ...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    本章讲述了联机重做日志的作用和管理,联机重做日志数据库正常运行不可或缺的文件,对于实例出现故障时的正常恢复十分重要的。 11.1 管理重做日志文件 284 11.2 日志文件组、日志切换和日志归档 284 11.3 了解...
  • 3.8.6 Korn shell编程中的控制结构 53 3.9 管理UNIX进程 55 3.9.1 用ps命令收集进程信息 55 3.9.2 在注销后运行进程 56 3.9.3 在后台执行进程 56 3.9.4 用kill命令终止进程 56 3.10 UNIX系统管理和...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • //用来输入/输出文件流类 unsigned int key2; //key和key2分别用做了电话号码和姓名的关键字 int *p; struct node //新建节点(用户姓名、地址、电话号码、指向下一个结点的指针 ) { char name[8],address...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义什么...
  • c# 加密和解密相关代码

    热门讨论 2011-09-06 11:04:59
    文件的加密与解密 第 章 加密与解密技术 第19章 加密与解密技术 829 19.1 数据的加密与解密 实例571 异或算法对数字进行加密与解密 光盘位置:光盘\MR\19\571 中级 趣味指数: 实 例说明 在实现本实例之前先来简要...
  •  本书经典名著《oracle 10g数据库管理艺术》一书的姊妹篇,通过示例全面而又详细地讲述了oracle 11g的新特性,讲述了更改管理、数据库自动化、性能管理、故障诊断、存储管理、安全管理、性能管理、应用开发、数据...
  • 本版本高清版,第1版第18次印刷,书签最全最好的版本。 基本信息 原书名: The C++ Programming Language, Special Edition 原出版社: Addison Wesley 作者: (美)Bjarne Stroustrup 译者: 裘宗燕 丛书名...
  • 6.1 单向散列算法 6.1.1 MD5算法 6.1.2 SHA算法 6.1.3 小结 6.2 对称加密算法 6.2.1 RC4密码 6.2.2 TEA算法 6.2.3 IDEA算法 6.2.4 BlowFish算法 6.2.5 AES算法 6.2.6 对称加密算法小结 6.3 公开密钥加密算法 6.3.1...
  • 10.4.8 局部静态存储 224 10.4.9 非局部存储 225 10.4.10 临时对象 226 10.4.11 对象的放置 228 10.4.12 联合 229 10.5 忠告 230 10.6 练习 230 第11章 运算符重载 233 11.1 引言 233 11.2 运算符函数 234 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    10.4.8 局部静态存储 224 10.4.9 非局部存储 225 10.4.10 临时对象 226 10.4.11 对象的放置 228 10.4.12 联合 229 10.5 忠告 230 10.6 练习 230 第11章 运算符重载 233 11.1 引言 233 11.2 运算符函数 234 ...
  • 简单来说本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上一种有根结点的定向有序树,IMS...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 2.4.4 存储程序的授权和别名 2.4.5 删除存储程序 2.4.6 隐藏存储过程的源代码 2.5 编辑PL/SQL的环境 2.6 在其他语言中调用PL/SQL 2.6.1 C:使用Oracle的预编译器(Pro*C) 2.6.2 Java:使用JDBC 2.6.3 Perl...
  • 实例282 生成散列图 实例283 生成时序图 实例284 生成直方图 10.4 绘制基于OHLCDataset数据集的图表 实例285 生成K线图 实例286 生成高低图(HighLow) 10.5 生成组合图表 实例287 生成水平组合图表 实例288 生成...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

文件流是散列存储