开发设计临时

Java进阶笔记(持续更新~)

2019-05-09  本文已影响132人  WebGis学习笔记

目录📐

🍃MySql

一,执行一条SQL的过程

1.连接器和客户端建立连接

2. 查询缓存(MySQL8.0后将删除该功能)

select SQL_CACHE * from T where ID = 10;

3.分析器

4.优化器

select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
该步骤决定了先从t1表中取出`c=10`的ID值还是先查找出t2表中`d=20`的ID值。

5.执行器

问题:

二,MySQL引擎的区别

MySQL有四种引擎:ISAM , MyISAM,HEAP,InnoDB
ISAM :ISAM执行读取操作的速度很快,不支持事务处理,也不能够容错。
MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。
HEAP:HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快。
InnoDB:支持事务等高级操作。

三,数据库优化思路

1.SQL语句优化:

2.索引优化

3.数据库结构优化

4.服务器硬件的优化

🍃JVM

Java类的加载过程

加载(将Class文件转换成Class对象实例)

验证(验证数信息是否符合JVM规范,是否是一个有效的字节码文件)

准备(为类追踪的所有静态变量分配内存空间,并为其设置一个初始值(由于还没产生对象,实例变量不在此操作范围内))

解析(将常量池中的符号引用转为直接引用(得到类或者字段,方法在内存中的指针或者偏移量,一遍直接调用该方法,这个可以在初始化之后再执行))

初始化(将一个类中所有被static关键字表示得代码统一执行一遍)

Java运行时数据区结构

- (A)PC寄存器/程序计数器(每个线程有一个独立的程序计数器,且互不影响,独立储存)
  - (a)保存当前正在执行的程序的内存地址。
- (B)Java栈 Java Stack(每条线程对应一个栈,一个栈中对应多个栈帧,执行一个方法压入一个栈帧,结束一个方法出一个栈帧)
  - ![](https://img.haomeiwen.com/i14037200/6f9066f05140f0ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  - (a)栈帧是每个方法关联起来的,每运行一个方法就创建一个栈帧,每个栈帧会含有一些局部变量,每当一个方法执行完成时,该栈帧就会弹出这个栈帧的元素作为这个方法的返回值,并清除这个栈帧。
  - (b)Java栈顶的栈帧就是当前执行的活动栈,也就是正在执行的方法,`PC寄存器会指向该地址`。  
  - (c)栈帧的结构:`局部变量表,操作数栈,动态连接方法,返回的地址`
- (C)堆 Heap(堆时JVM所管理的内存中最大的一块,被所有的Java线程锁共享,不是线程安全的,在JVM启动时创建)
  - (a)所有对象实例以及数组都要在堆上分配。
  - (b)Java堆时GC管理的主要区域,现在GC基本都采用`分代收集算法`,所有堆还可以细分为:`新生代和老年代`新生代再细致一点有`Eden空间,From Survivor空间,To Survivor空间`等。
- (D)方法区Method Area(方法区存放了要加载类的信息(名称,修饰符等)类中定义为静态常量,类中的Field信息,类中的方法信息,`方法区是被Java线程共享的`)
  - (a)方法区数据虽然时被线程共享,但是不会像Java堆一样被GC频繁回收,它储存的信息相对比较稳定,再一定条件下会被GC
- (E)常量池Constant Pool(`常量池本身是方法区的一个数据结构。`)
  - (a)常量池中储存了如字符串,final变量值,类名和方法名变量值。常量池在编译期间就被确定,并保存在已编译的。class文件中。
- (F)本地方法栈Native Method Stack(本地方法栈和Java栈所发挥的作用非常相似,区别不过是Java栈为JVM执行Java方法服务,而本地方法栈为JVM执行Native方法服务。本地方法栈也会抛出StackOverflowError和OutOfMemoryError异常。)

🍃Hadoop

区分hdfs hbase hive 区别以及应用场景

Hive

Hive在Hadoop中扮演数据仓库的角色。建立在Hadoop集群的最顶层,对存储在Hadoop群上的数据提供类SQL的接口进行操作。你可以用HiveQL进行selelct,join等等操作。
特点:支持SQL查询
注意:Hive现在适合再离线下进行数据操作,不使用于在线查询,因为一个字“慢”
适用场景:不想用程序语言开发MapReduce的朋友们,熟悉SQL的朋友可以使用Hive开离线进行数据处理分析工作。如果你有数据仓库的需求并且你擅长写SQL并且不想写MapReduce jobs就可以用Hive代替。

HBase

HBase是一个数据库,一个NoSql数据库,像其他数据库一样提供随即读写功能,Hadoop不能满足于实时需要,HBase正可以满足。
特点:即时读写
适用场景:需要实时访问一些数据,就可以把它存入HBase,你也可以用Hadoop作为静态数据仓库,HBase作为数据存储,放那些进行一些操作会改变的数据。

问题:

什么情况下应用HBase?

官方解释

Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

Pig VS Hive

Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作,Hive于SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。
Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简介的脚本用于转换数据流以便潜入到较大的应用程序。
Pig相比Hive轻量,它主要的优势时相比于直接使用Hadoop Java APIs可大幅削减代码量。正因如此,Pig仍然是吸引大量的软件开发人员。
Hive和Pig都可以与HBase组合使用,Hive和Pig还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。

Hive VS HBase

Hive 是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理程序,HBases是为了支持弥补Hadoop对实时操作的缺陷弥补的项目。
想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果索引访问,就用HBase+Hadoop。
Hive query就是MapReduce jobs 可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。

JDBC

未完待续~

文中有错误希望大家在评论区指出,谢谢~~~~~~~~~

上一篇下一篇

猜你喜欢

热点阅读