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

Configuration Modeshape:如何为索引配置JDBC存储选项,configuration,modeshape,Configuration,Modeshape,我正在JBOSS 6 EAP中使用modeshape 3.6.0.Final 根据前面的元素 缓存索引存储 通过JDBC配置缓存的方法已被删除 我找到了一些所有配置,这正是我想要实现的: <cache-index-storage cache-container-jndi-name="index_cache_container" lock-cache-name="index_locks" data-cache-name="index_data" metadata

我正在JBOSS 6 EAP中使用modeshape 3.6.0.Final

根据前面的元素

缓存索引存储

通过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>

MYSQL
真的
MYSQL
真的
MYSQL
真的
有人能告诉我如何为modeshape 3.6.0.Final的索引配置缓存,以便它们存储在数据库中吗


提前感谢您的帮助?

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

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

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

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


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

感谢Randall的提示和建议。默认情况下,索引存储在Jboss部署目录中的文件中。我想这是一种表现的方式。我说的对吗?当然,在EAP中使用ModeShape时,这是一个存储它们的地方(默认情况下,在集群中的每个进程上保留独立的索引)。当然,如果需要,您可以更改确切的目录位置。