一种基于Lucene的实时搜索方案

转自http://rdc.taobao.org/?p=2209

背景

阿里集团各大业务快速发展过程中都对搜索服务很多刚性的需要,而这样的搜索需求有着非常明显的特征:快速支持、低成本、实时性和稳定性。

快速支持:

业务需求急迫、需要一周甚至几天内完成索引服务搭建、测试、上线环节。

低成本:

搜索需求方要求接入便捷,低成本的机器和运维成本。

实时性:

搜索需求方的业务数据发生变化,需要实时在索引中进行更新可见,而这个过程通常需要稳定的保证在100ms内。

稳定性:

搜索服务集群不会因为升级、运维操作或者若干台机器的宕机导致搜索服务不稳定。[......]

Read more

分析 Java heap dump工具之IBM HeapAnalyzer

 IBM HeapAnalyzer是一款免费的JVM内存堆的图形分析工具,它可以有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因。

下载解压后有一个ha413.jar

运行环境要求:

1、使用 Java 2 Platform,JDK 1.6或以上来运行IBM HeapAnalyzer

2、然后配置好环境变量

运行命令:

<Java path>java –Xmx[heapsize] –jar ha<HeapAnalyzer version>.jar <heapdump file>

举例:

/us[......]

Read more

oracle-存储过程提示ORA-01031: 权限不足错误解决

在调用存储过程,尤其是含有DDL或者动态SQL语句的过程中,经常出现此错误,详细解释如下:

默认情况下,在调用存储过程用户的角色是不起作用的,即在执行存储过程时只有Public权限。所以如果被调用的存储过程中如果有execute immediate ‘create table..’语句,将会引发ORA-01031: insufficient privileges错误。

    存储过程分为两种,即DR(Definer’s Rights ) Procedure和IR(Invoker’s Rights ) Procedure。为什么会有两种存储过程呢?其实考虑完下面的问题就清楚了。比如[......]

Read more

JBOSS连接池获取及返还和销毁

当应用需要进行业务处理时,首先会执行一个getConnection的操作,用于从连接池中获取连接,当业务处理完成后,需要把连接放回到连接池中,执行一个returnConnection的操作。
下面先看一下getConnection的源码:

  //getConnection方法返回的值是一个连接监听对象ConnectionListener
public ConnectionListener getConnection(Subject subject, ConnectionRequestInfo cri)
               throws ResourceException[......]

Read more

oracle执行计划:多表联合查询方式优化,Nested Loops,Hash Join 和 Sort Merge Join

多表之间的连接有三种方式:Nested LoopsHash Join Sort Merge Join

一. NESTED LOOP:

对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(大于1 万不适合),要把返回子集较小表的作为外表(CBO 默认外表是驱动表),而且在内表的连接字段上一定要有索引。当然也可以用ORDERED 提示来改变CBO默认的驱动表,使用USE_NL(table_name1 table_name2)可是强制CBO 执行嵌套循环连接。[......]

Read more

session在集群间的共享问题

会话跟踪

我们知道在单机条件下session机制的通过cookie或者Url重写完成的,具体的做法是在用户第一请求到getSession方法时创建session并将创建cookie和jsessionid(String字段用来标识session),并把行用页面内所有的URL改写(在尾部家伙snag了jsessionid),然后发送到客户端。客户端再次请求(包含了是否允许cookie的信息),这次请求是已经被服务器做了URL重写了,所以会话被跟踪了。在服务器接受本次请求的时候,会判断 cookie是否被客户端浏览器接受,如果cookie不被接受,那么继续用URL重写来达到会话跟踪,如果coo[......]

Read more