0

我正在使用带有 JBOSS 6 EAP 的 modeshape 3.6.0.Final。

根据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 的索引配置缓存,以便将它们存储在数据库中?

在此先感谢您的帮助?

4

1 回答 1

1

ModeShape 社区取消了对在数据库中存储 Lucene 索引的支持,因为它的性能非常糟糕,尤其是对于写入,因为不同进程上的内容并发更改每个都竞争对数据库的写入。即使在非集群拓扑中,由于性能原因,也不建议将索引存储在数据库中。

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

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

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

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

于 2014-03-11T15:10:59.850 回答