【问题标题】:Apache Ignite use table names instead of cachename in a queryApache Ignite 在查询中使用表名而不是缓存名
【发布时间】:2022-01-26 14:42:43
【问题描述】:

我有一个用 java 制作的应用程序,它为用户提出的每个请求多次查询模式(大约 1000 次)。 这最初是在多年前以这种方式设计的,目前代码重构对于方法的复杂性来说风险太大。 无论如何,为了利用数据库工作,我想引入一个 Ignite 层来缓存大部分基本静态的查询数据,所以我希望这些查询中的许多查询会更快,并且不再在数据库上。

我已经在服务器上正确配置了 ignite 以缓存我需要的表,一切都很好,直到我尝试在 DBEaver 或 Squirrel 上查询,我发现要在 Ignite DB 上查询的表的名称是ignite 配置称为 property name=cacheName"。

我不想将手放在代码上以逐个更改查询,因此我假设有一种方法可以使查询与 Oracle DB 上的查询保持一致。

例子

在 oracle DB 中我有 . 我在代码中的查询类似于 "从 中选择 * 其中 x"

在 Ignite 架构中,我有

cacheName.

所以为了查询这个我的查询应该被转换成类似

"select * from cacheName. where x"

似乎在 Ignite 中 cacheName 被认为是一个模式,问题是每个表都有不同的模式。我应该考虑重构所有查询还是有办法保持相同的查询格式?

我的配置是这样的

取自一张表配置

       <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <property name="name" value="<TableName>Cache"/>
            <property name="cacheMode" value="PARTITIONED"/>
            <property name="atomicityMode" value="ATOMIC"/>

            <property name="cacheStoreFactory">
                <bean class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
                    <property name="dataSourceBean" value="dsOracle"/>
                    <property name="dialect">
                        <bean class="org.apache.ignite.cache.store.jdbc.dialect.OracleDialect">
                        </bean>
                    </property>

                    <property name="types">
                        <list>
                            <bean class="org.apache.ignite.cache.store.jdbc.JdbcType">
                                <property name="cacheName" value="<TableName>Cache"/>
                                <property name="keyType" value="package.obfuscated.key"/>
                                <property name="valueType" value="package.obfuscated.type"/>
                                <property name="databaseSchema" value="<DBSchemaName>"/>
                                <property name="databaseTable" value="<TableName>"/>

                                <property name="keyFields">
                                    <list>
                                        <bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">

。 . . [表格字段列表] . .

非常感谢

【问题讨论】:

  • 嗯...如果您正在寻求有关如何做重构以外的其他事情的帮助,我认为是时候重构了。

标签: mysql database oracle caching ignite


【解决方案1】:

在你的缓存定义中,你可以设置 SQL Schema:

        var cacheConfiguration = new CacheConfiguration<PersonKey,Person>()
                .setName("PERSON_CACHE")
                .setSqlSchema("MY_SCHEMA")
                .setCacheMode(CacheMode.PARTITIONED)
                .setIndexedTypes(PersonKey.class, Person.class);
        var cache = ignite.<PersonKey,Person>getOrCreateCache(cacheConfiguration);

这将创建一个在 SQL 中显示为 MY_SCHEMA.Person 的表。

【讨论】:

  • 嗨@Stephen,您的建议非常有用。它完美地满足了我的需要。非常感谢
猜你喜欢
  • 2023-01-22
  • 2013-09-27
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多