在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让查询优化器能够更好的工作。 一、MySQL 查询优化器是如何工作的 MySQL 查询优化器有几个目标,但是…
mod_rewrite url重写规则,祸害网站壁纸
Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等。本文将针对mod_rewrite和URL匹配的技术细节,以及RewriteCond与RewriteRule 指令格式进行探讨。 Rewirte模块内部处理 Rewirte模块的内部处理极为复杂,但是为了使一般用户避免犯低级错误,也让管理员能充分利用其功…
flume介绍及原理
1 .背景 flume是由cloudera软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一。尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng;同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一. 2 .概述 1. 什么是…
L/F领导者与跟随者模式、HS/HA半同步/半异步模式连接池比较
线程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA半同步/半异步模式。 HS/HA 半同步/ 半异步模式 :分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并解析然后再往队列丢数据,然后消费者读出数据进行应用逻辑处理; 优点:简化编程将低层的异步I/O和高层同步应用服务分离,且没有降低低层服务性能。集中层间通信。 缺点:需要线程间传输数据,因此而带来的动态内…
ZooKeeper源码学习笔记(4)–集群选主算法
FastLeaderElection ZooKeeper 中一共有三个实现了Election接口的选举类,分别是 LeaderElection , AuthFastLeaderElection 和 FastLeaderElection。 前两个类已经在3.4.0版本之后被废弃掉,因此在本节中,我只会介绍LeaderElection 的选主算法。 接下来我会以一个5台节点的集群为例,介绍 ZooKe…
ZooKeeper源码学习笔记(3)–Cluster模式下的ZooKeeper(转)
Cluster集群模式 判断启动模式 前一篇文章 介绍了当配置文件中只有一个server地址时,Standalone模式的启动流程以及ZooKeeper的节点模型和运行逻辑。在本节中,我会针对Cluster的运行模式进行详细讲解。 启动流程
1 2 3 4 5 6 |
<span class="hljs-keyword">public</span> <span class="hljs-keyword">synchronized</span> <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">start</span><span class="hljs-params">()</span> </span>{ loadDataBase(); cnxnFactory.start(); startLeaderElection(); <span class="hljs-keyword">super</span>.start(); } |
QuorumPeerMain::runFromConfig会构造一个QuorumPeer对象…
ZooKeeper源码学习笔记(2)–Standalone模式下的ZooKeeper(转)
前言 ZooKeeper是一个相对简单的分布式协调服务,通过阅读源码我们能够更进一步的清楚分布式的原理。 环境 ZooKeeper 3.4.9 入口函数 在bin/zkCli.sh中,我们看到client端的真实入口其实是一个org.apache.zookeeper.ZooKeeperMain的Java类
1 2 3 |
<span class="hljs-string">"<span class="hljs-variable">$JAVA</span>"</span> <span class="hljs-string">"-Dzookeeper.log.dir=<span class="hljs-variable">${ZOO_LOG_DIR}</span>"</span> <span class="hljs-string">"-Dzookeeper.root.logger=<span class="hljs-variable">${ZOO_LOG4J_PROP}</span>"</span> \ -cp <span class="hljs-string">"<span class="hljs-variable">$CLASSPATH</span>"</span> <span class="hljs-variable">$CLIENT_JVMFLAGS</span> <span class="hljs-variable">$JVMFLAGS</span> \ org.apache.zookeeper.ZooKeeperMain <span class="hljs-string">"<span class="hljs-variable">$@</span>"</span> |
通过源码走读,看到在Zoo…
ZooKeeper源码学习笔记(1)–client端解析(转)
前言 ZooKeeper是一个相对简单的分布式协调服务,通过阅读源码我们能够更进一步的清楚分布式的原理。 环境 ZooKeeper 3.4.9 入口函数 在bin/zkCli.sh中,我们看到client端的真实入口其实是一个org.apache.zookeeper.ZooKeeperMain的Java类
1 2 3 |
<span class="hljs-string">"<span class="hljs-variable">$JAVA</span>"</span> <span class="hljs-string">"-Dzookeeper.log.dir=<span class="hljs-variable">${ZOO_LOG_DIR}</span>"</span> <span class="hljs-string">"-Dzookeeper.root.logger=<span class="hljs-variable">${ZOO_LOG4J_PROP}</span>"</span> \ -cp <span class="hljs-string">"<span class="hljs-variable">$CLASSPATH</span>"</span> <span class="hljs-variable">$CLIENT_JVMFLAGS</span> <span class="hljs-variable">$JVMFLAGS</span> \ org.apache.zookeeper.ZooKeeperMain <span class="hljs-string">"<span class="hljs-variable">$@</span>"</span> |
通过源码走读,看到在Zoo…