Modeshape:如何为索引配置JDBC存储选项

时间:2014-03-10 23:27:19

标签: configuration modeshape

我正在使用MODEhape 3.6.0.Final和JBOSS 6 EAP。

根据https://github.com/ModeShape/modeshape/blob/master/deploy/jbossas/modeshape-jbossas-subsystem/src/main/resources/schema/modeshape_1_0.xsd前一个元素

  

高速缓存索引存储

用于通过JDBC配置缓存等。

我发现了一些所有配置,这正是我想要实现的目标:

<cache-index-storage 
cache-container-jndi-name="index_cache_container" 
    lock-cache-name="index_locks" 
    data-cache-name="index_data"
    metadata-cache-name="index_metadata"/>

和缓存容器

            <!-- index storage, metadata and locks -->
       <cache-container name="index_cache_container" default-cache="index_data">
            <local-cache name="index_locks">
                <transaction mode="NON_XA"/>
                <string-keyed-jdbc-store datasource="java:jboss/datasources/MySqlDS" passivation="false" purge="false">
                    <property name="databaseType">MYSQL</property>
                    <property name="createTableOnStart">true</property>
                    <string-keyed-table prefix="stringbased">
                        <id-column name="id_column" type="VARCHAR(255)"/>
                        <data-column name="data_column" type="BLOB"/>
                        <timestamp-column name="timestamp_column" type="BIGINT"/>
                    </string-keyed-table>
                </string-keyed-jdbc-store>
            </local-cache>
            <local-cache name="index_data" batching="true">
                <transaction mode="NON_XA"/>
                <string-keyed-jdbc-store datasource="java:jboss/datasources/MySqlDS" passivation="false" purge="false">
                    <property name="databaseType">MYSQL</property>
                    <property name="createTableOnStart">true</property>
                    <string-keyed-table prefix="stringbased">
                        <id-column name="id_column" type="VARCHAR(255)"/>
                        <data-column name="data_column" type="BLOB"/>
                        <timestamp-column name="timestamp_column" type="BIGINT"/>
                    </string-keyed-table>
                </string-keyed-jdbc-store>
            </local-cache>
            <local-cache name="index_metadata">
                <transaction mode="NON_XA"/>
                <string-keyed-jdbc-store datasource="java:jboss/datasources/MySqlDS" passivation="false" purge="false">
                    <property name="databaseType">MYSQL</property>
                    <property name="createTableOnStart">true</property>
                    <string-keyed-table prefix="stringbased">
                        <id-column name="id_column" type="VARCHAR(255)"/>
                        <data-column name="data_column" type="BLOB"/>
                        <timestamp-column name="timestamp_column" type="BIGINT"/>
                    </string-keyed-table>
                </string-keyed-jdbc-store>
            </local-cache>
        </cache-container>

有人能给我一个关于如何为modeshape 3.6.0.Final的索引配置缓存的提示,以便它们存储在数据库中吗?

先谢谢你的帮助?

1 个答案:

答案 0 :(得分:1)

ModeShape社区删除了对在数据库中存储Lucene索引的支持,因为它执行起来非常糟糕,特别是对于写入,因为不同进程上的内容的并发更改都会竞争对数据库的写入。即使在非群集拓扑中,由于性能原因,也不建议在数据库中存储索引。

让集群中的每个进程都维护自己完整的索引副本要好得多。是的,这确实为每次写入添加了工作(因为必须在每个进程上完成写入),但它显着提高了查询性能并消除了群集范围写入冲突的可能性,从而提高了系统的更新吞吐量。

当然,仍然可以在Infinispan中存储索引。 ModeShape保留了此选项,因为Infinispan可以以不使用共享存储的方式进行配置(实际上使每个进程具有独立的索引),并且在这些配置中没有群集范围的索引写入冲突。但是,将索引存储在共享数据库中将再次存在群集范围的索引写入冲突。

如果需要,可以尝试一下,如果确实确保三个缓存中的每一个都存储在一个单独的数据库表中(使用&#34;前缀&#34;属性的唯一值)。 / p>

但是,我强烈建议您不要将索引存储在关系数据库或群集中多个进程共享的其他位置。