Compass---Connection

Compass实例的唯一必要配置就是它的connection.

connection控制着索引将保存在那里,换一句话说就是索引的存储路径。

有下面几种存储方式:
1 文件系统存储
到目前为止,最受欢迎的而且是最简单的存储方法是在文件系统上保持索引,下面是一个基于connection配置的

简单文件系统例子,将索引保存在target/test-index路径下
<compass name="default">
<connection>
<file path="target/test-index"/>
</connection>
</compass>
compass.engine.connection=file://target/test-index

另一种文件系统方法的配置是基于使用Java 1.4 NIO mmap特性

<compass name="default">
<connection>
<mmap path="target/test-index"/>
</connection>
</compass>
compass.engine.connection=mmap://target/test-index
<compass name="default">
<connection>
<niofs path="target/test-index"/>
</connection>
</compass>
compass.engine.connection=niofs://target/test-index

 
2 随机存储
使用随机存储器的索引存储,索引数据可以保存在内存中。对于存储的代价来说,这样方便快速索引和搜索。
下面是配置的例子:

<compass name="default">
<connection>
<ram path="/index"/>
</connection>
</compass>
compass.engine.connection=ram://index

 
3 JDBC存储
JDBC存储connection类型允许索引数据保存到数据库中。保存索引的机制实际是模仿基于树的文件系统,子索引

表里的每行都代表着一个二进制数据的文件。
Compass实现,JdbCDirectory,它是建立在Lucene directory提取之上的,完全与其他的Compass解耦合,并且能
够用于单纯的Lucene应用。当在Compass中使用时,它可以更简单地配置,尤其是事务管理和jdbc数据源管理方面

下面是一个简单使用jdbc存储索引的例子,例子的配置是假定一个不变的配置,没有数据源池:

<compass name="default">
<connection>
<jdbc>
<dataSourceProvider>
<driverManager url="jdbc:hsqldb:mem:test"
username="sa" password=""
driverClass="org.hsqldb.jdbcDriver" />
</dataSourceProvider>
</jdbc>
</connection>
</compass>

以上的配置在jdbc元素上没有定义方言属性。Compass将尝试自动检测基于数据库元数据的数据库方言,如果检测

失败,方言将被设置,在我们的例子里,它应该是

dialect="org.apache.lucene.store.jdbc.dialect.HSQLDialect".

(1)管理环境
当达到一个jdbc索引存储的时候了解Compass是否工作在一个“受管理”的环境下是很重要的。一个管理环境是
Compass不能控制事务管理的环境。如果Compass可以控制事务,比如说是有本地事务工厂,它就不会被认为是一个管理环境。
    如果工作在一个无管理环境下,Compass将会用ransactionAwareDataSourseProxy封装数据源,并且可以提
交/回滚 jdbc 连接。当工作在一个管理环境下,不会出现封装,并且Compass将会让外部事务管理者去提交/回滚 连接。
    通常,并不是总是,当工作在一个管理环境下,jdbc数据源使用的是来自外部系统/配置。大多数情况下它会
是JNDI或外部数据源提供者(比如说Spring)。
    默认情况下,Compass工作在非管理环境下,那么jdbc元素的managed属性应该设为true.

(2) 数据源提供者

Compass考虑到不同的jdbc数据源提供者。DataSourceProvider实现的职责是为了配置和提供一个jdbc数据源实例。当谈到性能,尤其是在共享特性的时候,数据源的实现是非常重要的。
   
    所有Compass支持的不同数据源都允许配置自动提交标志。自动提交有三个值:false,true和external(不要
明确地设置自动提交,假定它已经在其他位置配置了)。自动提交模式的默认值是false并且是推荐值(external可以使用,但是必须确定将真实数据源设置为false)
 
a 驱动器管理器

所有提供者里最简单的,不需要任何外部的库或系统。主要的缺点是性能,因为它没有实现任何种类的共享。
b Jakarta Commons DBCP
  Compass能够使用Jakarta Commons DBCP作为数据源提供者配置,相对于驱动器管理提供者的性能而言,这是一
个推荐的选择,下面是使用时的例子:

<compass name="default">
<connection>
<jdbc>
<dataSourceProvider>
<dbcp url="jdbc:hsqldb:mem:test"
username="sa" password=""
driverClass="org.hsqldb.jdbcDriver"
maxActive="10" maxWait="5" maxIdle="2" initialSize="3" minIdle="4"
poolPreparedStatements="true" />
</dataSourceProvider>
</jdbc>
</connection>
</compass>

配置显示不同的设置可以用于dbcp数据源提供者,他们的值没有其他含义,是典型系统的推荐值,想获取更多信息,请查看Jakarta Commons DBCP文档。

c c3p0
Compass可以使用c3p0作为数据源配置,相对于驱动器管理的性能原因,她也是一个推荐的选择(
你想使用它或上一节的Jakarta Commons DBCP),这取决于你,下面是使用例子:

<compass name="default">
<connection>
<jdbc>
<dataSourceProvider>
<c3p0 url="jdbc:hsqldb:mem:test"
username="testusername" password="testpassword"
driverClass="org.hsqldb.jdbcDriver" />
</dataSourceProvider>
</jdbc>
</connection>
</compass>

c3p0数据源提供者将使用c3p0的ComboPooledDataSource,其他另外的设置可以使用c3p0.perperties文件设置,这个文件作为高级资源保存在同一个LASSPATH/classloader加载c3p0的jar文件的位置。请参考c3p0文档获取更多设置。

d JNDI
Compass也可以通过使用JNDI寻找数据源来配置,下面是使用的例子:

<compass name="default">
<connection>
<jdbc>
<dataSourceProvider>
<jndi lookup="testds" username="testusername" password="testpassword" />
</dataSourceProvider>
</jdbc>
</connection>
</compass>

jndi查找环境 ,包括java.naming.factory.initial和java.naming.provider.url的JDNI设置,可以配置在其他的jndi标签内,直接在Compass标签下面,注意,username和password用于数据源,而且是完全可选的。

e 外部
Compass可以使用ExteranlDataSourceProvider.类的外部数据源来配置,它使用java线程本地保存数据源为了之
后数据源提供者使用。设置数据源在ExteranlDataSourceProvider上使用静态方法setDataSource(DataSource

dataSource),下面是一个如何配置的例子:

<compass name="default">
<connection>
<jdbc>
<dataSourceProvider>
<external username="testusername" password="testpassword"/>
</dataSourceProvider>
</jdbc>
</connection>
</compass>

注意,username和password是用于数据源的,而且是可选的。

还有一些,有时间补上

猜你喜欢

转载自crazycat03.iteye.com/blog/613253
今日推荐