将 Apache Cassandra 与 Apache Ignite 集成

2023-12-06

我正在尝试将 Apache Ignite 与 Apache Cassandra(3.11.2) 集成,因为我想使用 Ignite 缓存现有 Cassandra 数据库中存在的数据。

在浏览了在线资源之后,到目前为止我已经完成了以下工作:

  1. 已下载阿帕奇点燃.
  2. 将“libs/optional/”中存在的所有文件夹复制到“libs/”(我不知道 Cassandra 需要哪些文件夹)。
  3. 在 config 文件夹中创建了 3 个 xml,即“cassandra-config.xml”、“connection-settings.xml”和“persistance-settings.xml”。目前我对 Cassandra 和 Ignite 使用相同的节点(172.16.129.68)。

卡桑德拉配置.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Cassandra connection settings -->
<import resource="connection-settings.xml" />

<!-- Persistence settings for 'cache1' -->
<bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
        <constructor-arg type="org.springframework.core.io.Resource" value="file:/home/cass/apache_ignite/apache-ignite-fabric-2.4.0-bin/config/persistance-settings.xml" />
</bean>
<!-- Ignite configuration -->
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <list>
            <!-- Configuring persistence for "cache1" cache -->
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="cache1"/>
                <property name="readThrough" value="true"/>
                <property name="writeThrough" value="true"/>
                <property name="writeBehindEnabled" value="true"/>
                <property name="cacheStoreFactory">
                    <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
                        <property name="dataSourceBean" value="cassandraAdminDataSource"/>
                        <property name="persistenceSettingsBean" value="cache1_persistence_settings"/>
                    </bean>
                </property>
            </bean>
        </list>
    </property>
    <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
    <property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="ipFinder">
                <!--
                    Ignite provides several options for automatic discovery that can be used
                    instead os static IP based discovery. For information on all options refer
                    to our documentation: http://apacheignite.readme.io/docs/cluster-config
                -->
                <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
                <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
                <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                    <property name="addresses">
                        <list>
                            <!-- In distributed environment, replace with actual host IP address. -->
                            <value>172.16.129.68:47500..47509</value>
                        </list>
                    </property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

连接设置.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="loadBalancingPolicy" class="com.datastax.driver.core.policies.TokenAwarePolicy">
    <constructor-arg type="com.datastax.driver.core.policies.LoadBalancingPolicy">
        <bean class="com.datastax.driver.core.policies.RoundRobinPolicy"/>
    </constructor-arg>
</bean>

<bean id="cassandraAdminDataSource" class="org.apache.ignite.cache.store.cassandra.datasource.DataSource">
    <property name="port" value="9042"/>
    <property name="contactPoints" value="172.16.129.68"/>
    <property name="readConsistency" value="ONE"/>
    <property name="writeConsistency" value="ONE"/>
    <property name="loadBalancingPolicy" ref="loadBalancingPolicy"/>
</bean>

持久性设置.xml

<persistence keyspace="test" table="epc_table">
    <keyPersistence class="java.lang.String" strategy="PRIMITIVE" column="imsi"/>
    <valuePersistence strategy="BLOB"/>
</persistence>
  1. 我运行以下命令从 bin 文件夹启动 Ignite。

    ignite.sh ../config/cassandra-config.xml

现在,我想通过 sqlline 查看 cassandra 表。我尝试过以下方法:

./sqlline.sh -u jdbc:cassandra://172.16.129.68:9042/test //(test是键空间的名称)

我得到以下输出:

No known driver to handle "jdbc:cassandra://172.16.129.68:9042/test". Searching for known drivers...
java.lang.NullPointerException
sqlline version 1.3.0
0: jdbc:cassandra://172.16.129.68:9042/test>

我也尝试过:

./sqlline.sh -u jdbc:ignite:thin://172.16.129.68

但是当我使用“!tables”时,我看不到任何表格。

究竟缺少了什么?如何使用 sqlline 访问/修改 Cassandra 中存在的表?

操作系统:RHEL 6.5


Apache Ignite 是一个键值数据库,默认情况下不会创建可供您使用 JDBC 连接器查看的表。CacheStore是一种将 Ignite 与外部数据库或任何其他存储集成的方法,它将数据作为键值对加载。

在您的配置中,您说 Ignite 想要在 Cassandra 中存储和加载条目,但 Ignite 仍然不知道条目结构(顺便说一句,Ignite 实际上并不关心将哪些对象放入其中)。

为了能够列出表并对其进行查询,您需要创建表。为此,您需要在 /lib 目录中有 ignite-indexing 并设置查询实体 or 索引类型如果您有带注释的 POJO。以下是此类配置的示例:

<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="mycache"/>
<!-- Configure query entities -->
<property name="queryEntities">
    <list>
        <bean class="org.apache.ignite.cache.QueryEntity">
            <property name="keyType" value="java.lang.Long"/>
            <property name="valueType" value="org.apache.ignite.examples.Person"/>

            <property name="fields">
                <map>
                    <entry key="id" value="java.lang.Long"/>
                    <entry key="orgId" value="java.lang.Long"/>
                    <entry key="firstName" value="java.lang.String"/>
                    <entry key="lastName" value="java.lang.String"/>
                    <entry key="resume" value="java.lang.String"/>
                    <entry key="salary" value="java.lang.Double"/>
                </map>
            </property>

            <property name="indexes">
                <list>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="id"/>
                    </bean>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="orgId"/>
                    </bean>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="salary"/>
                    </bean>
                </list>
            </property>
        </bean>
    </list>
</property>

如果您进行配置,您将能够登记和查询该表SQLine。 (请注意,您无法查询未加载到 Ignite 中的数据。要加载它们,您可以使用IgniteCache.get()已启用readThrough选项或IgniteCache.loadCache()从 Cassandra 表加载所有内容)。

要使用 JDBC 查询 Cassandra,您需要一个 JDBC 驱动程序,请尝试,例如DBSchema.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Apache Cassandra 与 Apache Ignite 集成 的相关文章

随机推荐

  • 自动递增 id JSON

    我正在制作一个 RESTful Web 服务 我希望发布到 JSON 文件的项目有一个 Id 我一直在到处搜索 但找不到任何有关如何执行此操作的信息 JSON 看起来像这样 id 2 title Hello World artist Joh
  • iOS Google 地图 SDK - 隐藏/删除标签

    我在我的 iOS 项目中使用 Google Maps SDK 我正在使用 Swift 和我想在 UIView 中显示 Google 地图 不带任何文本或标签 我能够正确显示地图 但无法从地图中删除文本 我在 Javascript 中看到了同
  • 使用 node.js 解密 AES256 返回错误的最终块长度

    使用这个Gist我能够在 Node js 0 8 7 中成功解密 AES256 然后 当我升级到 Node js 0 10 24 时 我现在看到以下错误 类型错误 错误 0606506D 数字信封 例程 EVP DecryptFinal e
  • MD5 哈希加盐,用于在 C# 中将密码保存在数据库中

    您能否告诉我一些简单的算法 用于通过 MD5 哈希用户密码 但使用salt以提高可靠性 现在我有这个 private static string GenerateHash string value var data System Text
  • 在 JavaScript 中获取 CSS 类名

    我面临着从 JavaScript 中的字符串获取类名的问题 例如 var ddd p class Box title Heading text here p 现在我想从中获取 p 标签的类名 浏览器擅长 HTML 解析 setup var
  • 如何获取 kivy 按钮的 Id 和 Text 值作为字符串?

    我有一个带有多个按钮的应用程序 我需要在按下按钮时以字符串形式获取按钮的 id 和文本值 然后 抓取的按钮 ID 和文本值将被传递到另一个函数以进行进一步处理 为了简单起见 我编写了这个示例程序 main py from kivy app
  • ZMQ ROUTER中的客户端维护

    ZeroMQ ROUTER 套接字如何在内部维护其客户端连接 该指南称每个客户都会获得一个唯一的 ID 但并不清楚 什么算作客户端 每台机器不同的客户端或每个连接的应用程序不同 从客户端收到的请求数量是否有限制 原因是 我正在对这段代码进行
  • 图像比较并返回百分比

    int DiferentPixels 0 Bitmap first new Bitmap First jpg Bitmap second new Bitmap Second jpg Bitmap container new Bitmap f
  • Angular:承诺内的异步等待 - 事件监听器

    从一天起我就一直在这个问题上苦苦挣扎 我想创造这样一种情况 img 在 component ts 文件中我只想包含这一行 this userdp this userService getUserDp 在 getUserDp 中 代码如下 a
  • 如何重新标记 matplotlib 热图的轴刻度

    我正在关注这个例子生成热图 是否可以重新标记 X 轴上的值 并向其添加一个常量 例如 我希望 X 轴上的数字不是 0 1 2 3 4 而是 5 6 7 8 9 您可以使用关键字参数来标记 x 轴和 y 轴extent在致电imshow 这是
  • 如何从Python列表中生成所有可能的排列对? [复制]

    这个问题在这里已经有答案了 如何从 Python 列表中生成所有可能的对排列 Example input 3 8 2 output 3 8 3 2 8 3 8 2 2 3 2 8 您可以使用itertools permutations im
  • 带有 CTE 的 BigQuery UPDATE 语句

    正在寻求有关 BigQuery 的帮助 我似乎无法在 UPDATE 语句中使用 CTE 即 with ctename as select column1 column2 column3 from blah update table2 set
  • 如何禁用引导列中的垂直滚动

    我有两个引导列 左 和 右 我想用屏幕修复左栏并禁用滚动 但我想在右列中启用滚动 这将有更多内容 基本上我想显示帖子 使帖子标题显示在左列中 帖子内容显示在右列中 完全相同this 注 我用过overflow y hidden 但没有成功
  • 在主题中使用 fontFamily 属性时,Toast 会抛出 ArrayIndexOutOfBoundsException 和 appcompat v26

    每当我展示一个Toast 应用程序崩溃 如果我使用旧版本的 AppCompat 库或删除该应用程序 则该应用程序可以正常工作fontFamily从风格上 创建时 Override protected void onCreate Bundle
  • 在 Dataobject 中提交表单 - Silverstripe 3.1

    我正在使用 Aram 的 DataobjectAsPage 模块 现在我想在每个 DOaP 站点上都有一个表单 我在我的数据对象中创建了这样的表单 public function RegistrationForm fields new Fi
  • 获得mysql中每个人第二高的工资

    我们有如下表 person id salary 1 1500 1 1000 1 500 2 2000 2 1000 3 3000 3 2000 4 3000 4 1000 我们希望每个人的薪水都是第二高的 按每个人分组并获得第二高的工资 像
  • 不同实现之间的随机输出不同

    我已经用 libstdc libc 和 dinkumware 尝试过这个程序 include
  • 重新排列 SimpleCursorAdapter 中的列表视图项目

    我有一个数据库 SQLite 然后使用 SimpleCursorAdapter 将值显示到列表视图中 但是 我想重新排列列表视图项目并显示以 ID 1 开头的项目 然后显示 ID 号 2 的项目 依此类推 问题是 我无法理解基于重新分配列表
  • 如何将xpath的值放入html img标签中

    以下代码为我提供了适当的字符串 但我不知道如何将该值放入 html img 标签中
  • 将 Apache Cassandra 与 Apache Ignite 集成

    我正在尝试将 Apache Ignite 与 Apache Cassandra 3 11 2 集成 因为我想使用 Ignite 缓存现有 Cassandra 数据库中存在的数据 在浏览了在线资源之后 到目前为止我已经完成了以下工作 已下载阿