随笔分类 -  Java

1 2 3 4 5 ··· 7 下一页

一个简单的MongoDB操作类
摘要:import java.net.UnknownHostException;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObjec 阅读全文

posted @ 2012-12-27 17:03 Phinecos(洞庭散人) 阅读(10453) 评论(0) 推荐(0) 编辑

Solr Cache使用介绍及分析
摘要:文将介绍Solr查询中涉及到的Cache使用及相关的实现。Solr查询的核心类就是SolrIndexSearcher,每个core通常在同一时刻只由当前的SolrIndexSearcher供上层的handler使用(当切换SolrIndexSearcher时可能会有两个同时提供服务),而Solr的各种Cache是依附于SolrIndexSearcher的,SolrIndexSearcher在则Cache生,SolrIndexSearcher亡则Cache被清空close掉。Solr中的应用Cache有filterCache、queryResultCache、documentCache等,这些Cache都是SolrCache的实现类,并且是SolrIndexSearcher的成员变量,各自有着不同的逻辑和使命,下面分别予以介绍和分析。 阅读全文

posted @ 2012-05-24 20:05 Phinecos(洞庭散人) 阅读(11643) 评论(0) 推荐(0) 编辑

每日学习笔记(26)
摘要:用solr连接solr服务器时,如果你是执行查询动作,那么推荐使用的是CommonsHttpSolrServer,如果你是执行更新操作,那么推荐使用的是StreamingUpdateSolrServer,后者是会将所有的documents缓存在本地,然后一次性写入打开的HTTP连接中,并且是一个线程安全的类。 阅读全文

posted @ 2012-03-08 19:50 Phinecos(洞庭散人) 阅读(1656) 评论(3) 推荐(0) 编辑

每日学习笔记(25)
摘要:在上一篇中第4点里,我遇到了一个solr集群中各个节点在进行master-slave身份切换时困扰的问题,详情见上一篇。今天顺利地解决了这个问题,下面记录下完整的解决方案。 阅读全文

posted @ 2012-03-07 22:12 Phinecos(洞庭散人) 阅读(1802) 评论(0) 推荐(1) 编辑

每日学习笔记(24)
摘要:1,一开始都是调用HttpMethod的getResponseBody()和getResponseBodyAsString,但这样总会出现下图中的警告信息这是由于没有使用缓存的缘故,如果字符串数据过多,会出警告,应该改用流和缓存来读取数据: InputStreamresStream=null; Stringresponse=null;BufferedReaderresBufferReader=null;try{httpClient.executeMethod(httpMethod);resStream=httpMethod.getResponseBodyAsStream();resBuf... 阅读全文

posted @ 2012-03-01 20:17 Phinecos(洞庭散人) 阅读(5896) 评论(0) 推荐(0) 编辑

深入剖析SolrCloud(四)
摘要:在上一篇中介绍了连接Zookeeper集群的方法,这一篇将围绕一个有趣的话题---来展开,这就是Replication(索引复制),关于Solr Replication的详细介绍,可以参考http://wiki.apache.org/solr/SolrReplication。 在开始这个话题之前,先从我最近在应用中引入solr的master/slave架构时,遇到的一个让我困扰的实际问题。 阅读全文

posted @ 2012-02-29 00:07 Phinecos(洞庭散人) 阅读(9507) 评论(1) 推荐(3) 编辑

深入剖析SolrCloud(三)
摘要:在上一篇中介绍了SolrCloud的第一个模块---构建管理solr集群状态信息的zookeeper集群。当我们在solr服务器启动时拥有了这样一个Zookeeper集群后,显然我们需要连接到Zookeeper集群的方便手段,在这一篇中我将对Zookeeper客户端相关的各个封装类进行分析。 阅读全文

posted @ 2012-02-16 20:15 Phinecos(洞庭散人) 阅读(9622) 评论(0) 推荐(2) 编辑

深入剖析SolrCloud(二)
摘要:上一篇介绍了SolrCloud的基本概念,从这一篇开始我将深入到其实现代码中进行剖析。 SolrCloud最重要的一点就是引入了ZooKeeper来统一管理各种配置和状态信息。zookeeper是一个开源分布式的服务,它提供了分布式协作,分布式同步,配置管理等功能. 其实现的功能与google的chubby基本一致.zookeeper的官方网站已经写了一篇非常经典的概述性文章,请大家参阅:ZooKeeper: A Distributed Coordination Service for Distributed Applications. 阅读全文

posted @ 2012-02-15 17:56 Phinecos(洞庭散人) 阅读(11862) 评论(0) 推荐(2) 编辑

深入剖析SolrCloud(一)
摘要:SolrCloud是基于Solr和Zookeeper的分布式搜索方案,是正在开发中的Solr4.0的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能:1)集中式的配置信息 2)自动容错 3)近实时搜索 4)查询时自动负载均衡 阅读全文

posted @ 2012-02-10 16:36 Phinecos(洞庭散人) 阅读(46999) 评论(6) 推荐(4) 编辑

一次针对批量查询处理的优化
摘要:客户调用批量查询接口对Solr核进行查询时觉得查询响应时间有些慢,接口的内部实现目前是顺序执行每个查询,再把结果汇总起来返回给调用方。因此,考虑引入线程池对查询接口的内部实现进行重构优化。先声明一个大小可随之增长的线程池,privateExecutorServiceexecutor=Executors.newCachedThreadPool();//查询请求处理线程池 然后是主线程方法的代码:publicList<Map<String,String>>queryEntityList(StringentityCode,List<Long>idList)thro 阅读全文

posted @ 2011-12-29 23:10 Phinecos(洞庭散人) 阅读(1748) 评论(0) 推荐(0) 编辑

每日学习笔记(23)
摘要:1,从前端传过来的参数是"\u9676\u9676\u6D4B\u8BD5\u8D26\u53F701"这样的unicode编码,需要将其转换为中文字符串,发现java.util.Properties类中有一个loadConvert函数可以完成这件事,直接copy过来使用。publicstaticStringloadConvert(char[]in,intoff,intlen,char[]convtBuf){if(convtBuf.length<len){intnewLen=len*2;if(newLen<0){newLen=Integer.MAX_VALUE; 阅读全文

posted @ 2011-11-17 12:17 Phinecos(洞庭散人) 阅读(754) 评论(0) 推荐(0) 编辑

一次内存泄露问题的排查
摘要:系统对外提供的Solr查询接口,在来自外部调用的压力加大之后,就会出现solr查询报Read Timed Out的异常,从表面现象上看是此时solr核压力过大,无法响应过多的查询请求。 但实际上此时并发查询压力并不是很大,那么为何solr核会无法及时响应查询请求呢?首先用top查看了下load average,也是很低,也佐证了系统本身压力并不大。 然后,用jstack –l <pid> 查看那些cpu使用率过高的线程,发现全都是GC线程,说明GC过于频繁,而且耗时过长,导致应用线程被挂起,无法响应客户端发来的请求,这种情况就应该是有存在内存泄露的问题咯。 于是,就用jmap将进. 阅读全文

posted @ 2011-11-14 01:11 Phinecos(洞庭散人) 阅读(5102) 评论(2) 推荐(3) 编辑

每日学习笔记(22)
摘要:1,使用JMX监控Solr, 首先在solrconfig.xml中确保没有注释掉下述配置项,以便启用JMX。 <jmx /> 然后在启动时加入一些启动参数来支持远程连接: java-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=3000-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false-jarstart.jar Jdk提供了一个图形化的工具JConsole [JDK_HO. 阅读全文

posted @ 2011-10-18 11:03 Phinecos(洞庭散人) 阅读(766) 评论(0) 推荐(0) 编辑

每日学习笔记(21)
摘要:1,今天收到报警信息,说应用所在机器的硬盘空间不足了,上去一看,居然发现国庆这几天的日志信息累计达到了260多G,可看了下应用下的日志,实际只有几十M而已,进一步check后发现是调用的第三方应用在另一个日志路径下打出大量的Debug信息,回查代码后才明白是Logback和Log4J的冲突问题,于是写了一个类在应用启动时将Log4J的级别调高至ERROR级别,代码如下: publicclassLog4jInit{ privatestaticStringlogFilePath;privatefinalstaticStringDEFAULT_LOG4J_FILE_NAME="log4j. 阅读全文

posted @ 2011-10-12 19:50 Phinecos(洞庭散人) 阅读(1095) 评论(0) 推荐(1) 编辑

每日学习笔记(20)
摘要:1,Solr合并索引数据有两种方法,第一种是1.4版本中引入的,通过CoreAdminHandler来实现,示例如下:http://localhost:8983/solr/admin/cores?action=mergeindexes&core=core0&indexDir=/opt/solr/core1/data/index&indexDir=/opt/solr/core2/data/index 上述命令会将core1和core2的索引合并到core0中去,这里最值得注意的一点是:一旦合并完成,必须在core0上调用commit操作,否则索引数据的变化对于search 阅读全文

posted @ 2011-09-28 14:54 Phinecos(洞庭散人) 阅读(1215) 评论(0) 推荐(0) 编辑

每日学习笔记(19)
摘要:今天的工作需求如下:有一个生产者负责生成源数据,将数据插入到多个工作队列中,每个工作队列由一个线程池进行处理,即每个线程池中可以启动多个线程对与其对应的工作队列中的元素取出来进行处理。 我将业务需求抽象为一个“单生产者—多消费者集群”模型,写了一个模拟代码进行测试,明天打算把模型再套回到业务中去。importjava.text.DateFormat;importjava.util.Collection;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;impo.. 阅读全文

posted @ 2011-08-23 20:30 Phinecos(洞庭散人) 阅读(1353) 评论(0) 推荐(0) 编辑

每日学习笔记(18)
摘要:1,iBatis源码中DefaultSqlSession.java,下面这个方法中匿名类的使用比较有意思,我对这个语法不熟悉,师兄说这是匿名类的初始化, private Object wrapCollection(final Object object) { if (object instanceof List) { return new HashMap() {{ put("list", object); }}; } else if (object != null && object.getClass().isArray()) { return new Ha 阅读全文

posted @ 2011-04-27 21:19 Phinecos(洞庭散人) 阅读(1138) 评论(0) 推荐(0) 编辑

每日学习笔记(16)
摘要:在看jdk里的collection framework这部分,小结一下:1,Arrays.copyOf, System.arraycopy这两个方法用得非常多。 2,比较两个 Object是否相等 if (o1==null ? o2 == null : o1.equals(o2)) 3, equals方法一般写法 Public Boolean equals(Object o) { If (o == this) return true; If ( ! (o instanceof List) return false; //比较具体数据大小 } 4,Iterator一定要会用 5,延迟初始化一定要 阅读全文

posted @ 2011-04-14 18:08 Phinecos(洞庭散人) 阅读(1201) 评论(0) 推荐(0) 编辑

Java中利用package机制实现条件编译
摘要:Java中并没有C语言里的“条件编译”特性。这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译。由于Java本身就设计为一种跨平台的语言,因此这种特性就没有存在的必要了。但是条件编译对于代码的调试来说还是很有用处的。就像我们在C语言中学到的一样,可以通过一些条件编译的开关来使得一些调试代码只在开发过程中使用,而在发布的版本中... 阅读全文

posted @ 2010-03-15 10:31 Phinecos(洞庭散人) 阅读(6400) 评论(0) 推荐(0) 编辑

浅谈Java多线程的同步问题
摘要:多线程的同步依靠的是对象锁机制,synchronized关键字的背后就是利用了封锁来实现对共享资源的互斥访问。下面以一个简单的实例来进行对比分析。实例要完成的工作非常简单,就是创建10个线程,每个线程都打印从0到99这100个数字,我们希望线程之间不会出现交叉乱序打印,而是顺序地打印。先来看第一段代码,这里我们在run()方法中加入了synchronized关键字,希望能对run方法进行互斥访问,... 阅读全文

posted @ 2010-03-13 01:35 Phinecos(洞庭散人) 阅读(43809) 评论(3) 推荐(7) 编辑

1 2 3 4 5 ··· 7 下一页

导航