【问题标题】:Modeshape: how to configure JDBC storage option for the indexesModeshape:如何为索引配置 JDBC 存储选项
【发布时间】:2014-03-11 23:10:59
【问题描述】:

我正在使用带有 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 的索引配置缓存以便将它们存储在数据库中?

提前感谢您的帮助?

【问题讨论】:

    标签: configuration modeshape


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢 Randall 的提示和推荐。
    • 默认情况下,索引存储在 Jboss 部署目录中的一个文件中。我想这是在性能方面做到这一点的方法。我说的对吗?
    • 嗯,这肯定是在 EAP 中使用 ModeShape 时存储它们的一个地方(默认为集群中的每个进程保留独立索引)。当然,您可以根据需要更改确切的目录位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多