自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

2B铅笔水果橡皮

无病呻吟

  • 博客(62)
  • 资源 (5)
  • 收藏
  • 关注

原创 java并发--Executor 框架

java并发编程的艺术 读书笔记---------------------------------------java的线程即使工作单元也是执行机制。工作单元包括Runnable和Callable,执行机制由Executor框架负责。|||调度模型|||两层调度模型。在上层,java应用程序把应用分解为若干任务,然后使用用户级的调度器Executor框架来将这些任务映射出成

2016-03-06 16:19:26 610

转载 深入理解abstract class 和 interface

原文链接:深入理解abstract class和interface理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为

2016-01-14 14:45:13 462

原创 elasticsearch聚合--内存控制篇

elasticsearch除了提供检索功能之外,还能做更多的事情,比如近实时的数据分析。对此elasticsearch提供了聚合aggregation模块,这比之前的facet模块更加强大。具体提供的聚合类型本文不再介绍,而是重点关注aggr模块中关于内存控制的一些事情。1:Fielddataaggr大量使用fielddata,fielddata也是es中的内存大户。众所周知,倒排

2015-09-08 13:47:03 2334

原创 elasticsearch的autocomplete

对于搜索引擎来说,在键入搜索关键词的过程中进行自动提词是个重要的功能,es对此也提供了支持。这个功能是不是有点类似于prefixquery呢,看上去是的。但是,prefixquery是否会符合条件的doc,而自动提词是返回符合条件的term。所以二者不能混为一谈。因此suggestion模块出现了。我们聚焦下complete。

2015-07-31 16:57:00 2141

原创 redis的no-appendfsync-on-rewrite参数

redis提供了两种持久化机制,rdb和aof。关于aof的原理,类似于预写日志,不再解释。其中几个选项如下:appendfsync always:总是写入aof文件,并完成磁盘同步appendfsync everysec:每一秒写入aof文件,并完成磁盘同步appendfsync no:写入aof文件,不等待磁盘同步。可见,从持久化角度讲,always是最安全的。从效率上

2015-07-19 18:36:50 17119 7

原创 redis的maxmemory设置

redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值,就会动用淘汰策略来处理expaire字典中的键。关于redis的淘汰策略,很多文章都有描述,就不做解释了。关于maxmemory的设置,如果redis的应用场景是作为db使用,那不要设置这个选项,因为db是不能容忍丢失数据的。如果作为cache使用,则可以启用这个选项(其实既然有淘

2015-07-19 12:34:17 7855

原创 fielddata那些事

fielddata主要应用在以下几个场景:1:指定字段的sort操作2:指定字段的aggr操作3:特定的filter,比如geo4:涉及到指定字段的脚本操作为何需要fielddata?当我们对指定字段进行排序的时候,我们需要访问符合指定查询的所有doc中这个field的值。倒排索引的结构非常适合搜索的应用场景,但是对于sort操作确实非常不擅长。搜索需要在term和doc之

2015-06-26 10:32:29 947

原创 elasticsearch分页的实现方式

对于搜索命中的结果,分页浏览是一项基本的需求。在es内部,分页有两种实现方式。1:通过设置查询参数from和sizesize:返回结果的数量。from:从哪一条结果返回。比如,返回前三页,没一页10条记录,可以用下边的命令表示:GET /_search?size=10GET /_search?size=10&from=10GET /_search?size=10&fro

2015-04-28 13:35:29 8128

转载 什么时候使用CountDownLatch

正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,countdownlatch的概念是一个常见的面试题,所以一定要确保你很好的理解了它。在这篇文章中,我将会涉及到在Java并发编 程中跟CountDownLatch相关的以下几点:目录CountDownLatch是什么

2015-04-15 17:20:38 858

原创 elasticsearch源码分析---TransportClient

在es中存在两种形式的客户端,NodeClient和TransportClient。两者的主要区别在于是否加入集群。TransportClient是不会加入集群(作为集群的一个节点)。因此TransportClient跟NodeClient相比算是轻量级的。因为不加入集群,因此访问集群需要指定一个或者多个地址。客户端,顾名思义,就是作为调用的发起方,来向服务器请求数据。因此,我们执行的诸如索引、查

2015-04-13 22:03:05 3668 3

转载 把Java数组转换为List时的注意事项

不幸的是并不是每件事都尽如人意。举个例子,现在将一个Java数组转换为List。当然,我们可以使用Arrays.asList方法,但是如果没有慎重思考就随便使用几乎肯定会产生令人讨厌的意外。考虑完下面这段程序并预测其输出你就明白我的意思了:package com.wordpress.mlangc.arrays; import java.util.Arrays; public class

2015-03-25 15:54:45 381

转载 Java HashMap的工作原理

我们来看个非常简单的例子。有一个”国家”(Country)类,我们将要用Country对象作为key,它的首都的名字(String类型)作为value。下面的例子有助于我们理解key-value对在HashMap中是如何存储的。1. Country.javapackage org.arpit.javapostsforlearning;public class Country {

2015-03-20 15:54:16 339

转载 什么是字符串常量池?

在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象:使用new运算符。例如:String str = new String("Hello");使用字符串常量或者常量表达式。例如:String str="Hello"; //(字符串常量) 或者String str="Hel" + "lo"; //(字符串常量表达式).

2015-03-20 14:43:37 423

转载 JVM中的G1垃圾回收器

我们先回顾一下主流Java的垃圾回收器(HotSpot JVM)。本文是针对堆的垃圾回收展开讨论的。堆被分解为较小的三个部分。具体分为:新生代、老年代、持久代。绝大部分新生成的对象都放在Eden区,当Eden区将满,JVM会因申请不到内存,而触发Young GC ,进行Eden区+有对象的Survivor区(设为S0区)垃圾回收,把存活的对象用复制算法拷贝到一个空的Surv

2015-03-20 12:19:11 495

转载 Java的内存回收机制

在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。1

2015-03-20 11:28:16 386

转载 深入分析Java ClassLoader原理

一、什么是ClassLoader?大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异

2015-03-19 16:56:51 366

转载 Java Class文件详解

Java Class文件中包含以下信息:1234567891011121314151617181920ClassFile { u4 magic;

2015-03-19 16:52:57 560

转载 java内存模型之四---volatile

volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:如上面示例程序所示,对一个volatile变量的单个读/写操作,与对一个普通变量的读/写操作使用同一个监视

2015-02-28 15:48:36 400

转载 java内存模型之三--顺序一致性

数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程

2015-02-28 14:30:31 537

转载 thrift使用指南

原文地址:thrift使用指南---------------------------------------------2. 语法参考2.1 TypesThrift类型系统包括预定义基本类型,用户自定义结构体,容器类型,异常和服务定义(1) 基本类型bool:布尔类型(true or value),占一个字节byte:有符号字节i16:16位有符号整型i32:32

2015-02-13 15:11:37 576

转载 thrift框架介绍

原文链接:点击打开链接-----------------------------------------1、前言Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,J

2015-02-12 15:40:46 539

原创 elasticsearch源码解析---AllocationDecider

AllocationModule分为两个模块:ShardAllocatorModule和AllocationDecidersModule。这里主要关注后一个模块。AllocationDecidersModule有一系列AllocationDecider组成,每一个Decider就是一个分配策略。在AllocationDecidersModule中: add(SameS

2015-01-30 16:05:53 1738

原创 elasticsearch源码分析---索引数据

跟正常的网络通信相似,es的client跟server是通过netty进行通信的,client封装各种request,通过netty发送给es的server。server解析收到的各类request,dispatch到对应的handler中进行处理。下面我们看一下索引一条数据设计到的代码调用。客户端当然就是发起请求的了:client.prepareIndex("index","type",

2015-01-27 17:40:20 1299 2

翻译 elasticsearch之life inside a cluster

选择性的翻译一些个人感觉比较重要的东西。es集群中的机器是如何发现别的机器的呢?通过cluster.name这个配置项。这让我联想到“脑裂”现象。是的,在网络分化的时候,es集群也会发生脑裂现象。当然es有关于recovery的一些配置来防止这种现象的发生。master节点只是管理一些集群级别的变化,比如增加/删除索引,增加/删除节点等。对于文档级别的操作(查询/更新)根本不涉及,所以不必

2015-01-22 17:01:47 620

转载 java内存模型之二---重排序

数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a= 1;b = a;写一个变量之后,再读这个位置。写后写a= 1;a = 2;写一个变量之后,再写这个变量。

2015-01-21 17:17:16 512

原创 elasticsearch源码分析--transport模块

在InternalNode中启动了transportservice,这个服务最终的实现是绑定到transport模块中的local transport或者netty transport。在transportservice中的doStart方法中: protected void doStart() throws ElasticsearchException { adapter

2015-01-21 11:49:07 1466

翻译 elasticsearch之sorting and relevance

默认情况下,es中的返回结果是根据relevance排序的,相关性最强的结果在最前边。接下来我们会介绍相关性是什么意思,是如何计算的?但是,我们先把焦点放在sort这个参数上,看看如何使用1:sorting为了能按照相关性排序,我们需要用一个数值来代表相关性。在es中,_score字段就是表示相关性的数字,用浮点类型表示,默认情况系按照_score的降序排列。有些情况下,我们并没有一个

2015-01-20 16:56:34 1171

原创 elasticsearch源码分析---threadpool模块

elasticsearch的线程池实现在org.elasticsearch.threadpool下。初始化过程中会加载以threadpool开头的配置项的配置信息,然后确定各个线程池的大小,默认情况下,会参照处理器个数进行设置: int availableProcessors = EsExecutors.boundedNumberOfProcessors(settings);

2015-01-18 11:06:37 1290

转载 java内存模型之一---基础

一:并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线

2015-01-16 15:40:50 418

转载 关于volatile关键字

转载一些关于volatile的文章,后续会在java内存模型章节中具体说明语义。----------------------从原子性,可见性和有序性的角度分析,声明为volatile字段的作用相当于一个类通过get/set同步方法保护普通字段,如下:final class VFloat { private float value; final synchro

2015-01-15 15:37:17 498

转载 java线程池

整理了看的一些文章,关于java中多线程相关的知识。--------------------------------------------------------------------线程池的作用:限制系统中执行线程的数量。根据系统的环境情况,可以手动或者自动设置线程数量,以达到运行的最佳效果。线程数目少了就浪费了系统的资源,线程数据多了就造成系统拥挤效率不高。用线程池来控制线程的

2015-01-10 20:02:07 504

翻译 elasticsearch之shard内部

shard是什么?它是如何工作的?这一章节我们将回答以下问题:为什么search是准实时的?为什么文档的CURD操作是实时的?ES如何确保changes是持久话的的,即使断电也不会丢失?为什么删除文档并不立刻释放存储空间?refresh,flush,optimize api是做什么的?什么时候应该使用?1:making text searchable传统的databas

2015-01-04 10:14:58 2560

转载 linux命名空间

文章来源:http://blog.csdn.net/preterhuman_peak/article/details/40857117Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用cl

2014-12-28 23:15:56 836 1

转载 linux函数fork,vfork,clone

文章来源:http://memorymyann.iteye.com/blog/235638fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造出来的是线程)。先介绍下进程必须的4要点:a.要有一段程序供该进程运行,就像一场戏剧要有一个剧本一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.有起码的私有财产,就是进程专用的系统堆

2014-12-28 11:57:32 576

原创 elasticsearch源码分析---discovery模块

根据guice的注册绑定机制,discovery的绑定顺序是这样的:InternalNode中添加DiscoveryModule:modules.add(new DiscoveryModule(settings));DiscoveryModule中创建了LocalDiscoveryModule(不分析)或者ZenDiscoveryModule: public Iterable s

2014-12-23 11:35:08 2559

原创 elasticsearch源码分析--启动进程

es启动脚本是bin目录下的elasticsearch。其中需要加载一些环境变量,诸如ES_CLASSPATH JAVA_OPTS  ES_JAVA_OPTS等。推荐设置ES_HEAP_SIZE的值,来这只es进程需要的内存(经验值为系统内存的一半以上),同时设置-p参数来指定pid文件的生成位置,在es关闭的时候会用到。脚本内容不再赘述,java主类位于org.elasticsearch.b

2014-12-22 16:15:11 1264 3

翻译 elasticsearch之node模块

elasticsearch可以将一个node配置成本地存储数据或者不存储数据。存储数据意味着不同索引的shards允许分配到这个node上。默认情况下每一个node都是一个数据节点,通过将node.data设置成false,开关闭数据节点。这是一个非常强大的设置项,产生了两类非数据节点:专职master节点和客户端节点。客户端节点是一个智能负载平衡器,只参与了处理过程的某些步骤。比如:我们可以

2014-12-16 10:56:04 1326

原创 elasticsearch之mapping types

document中每一个field的数据类型可以通过types来设置。1:主类型每一个json field都可以对应到一个特定的主类型,json本身就提供了很多类型。string/byte/short/integer/long/float/double/boolean/binary/date/null。以上数据类型跟通常的数据类型一样,没什么特殊性。下边介绍一些特有的:toke

2014-12-09 14:57:59 3520

原创 elasticsearch关于index性能优化

如果是在一个index-heavy的环境下,也许可以考虑牺牲部分查询的性能来满足index性能的提升,这种情形下,多半查询是非常稀少的,可以容忍结果返回的合理延时。这种特殊的应用场景,有一些措施可以用来提升index的性能。1:科学的性能测试导致性能低下可能有许多原因,定位影响最大的因素。(1)一个node,一个shard,没有replicas,进行性能测试。(2)全部用defau

2014-12-08 22:00:05 8298

原创 elasticsearch的store属性跟_source字段

众所周知_source字段存储的是索引的原始内容,那store属性的设置是为何呢?es为什么要把store的默认取值设置为no?设置为yes是否是重复的存储呢?我们将一个field的值写入es中,要么是想在这个field上执行search操作(不知道具体的id),要么执行retrieve操作(根据id来检索)。但是,如果不显式的将该field的store属性设置为yes,同时_source

2014-12-07 10:09:08 5836 2

HTML and CSS

详细介绍HTML and CSS使用相关知识 网页 样式

2014-07-09

Scala编程文字版

Scala编程详细知识介绍 Spark语言

2014-07-09

ESServer2.0

最新Elasticsearch图书 涵盖Es详细知识介绍

2014-07-08

分布式系统原理介绍

分布式系统中的基本原理介绍 有利于理解分布式系统的设计

2014-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除