【问题标题】:Ignite with Cassandra integration使用 Cassandra 集成点燃
【发布时间】:2017-10-30 10:43:31
【问题描述】:

我正在尝试将 Ignite 与 Cassandra 集成。我正在使用持久性策略作为 BLOB。当我运行程序时,它显示一个错误,如“com.datastax.driver.core.exceptions.CodecNotFoundException:未找到请求操作的编解码器:com.datastax.driver.core 的 [varchar java.nio.HeapByteBuffer]。 CodecRegistry.notFound(CodecRegistry.java:679) "

这是我的持久化 xml 文件

<persistence keyspace="sam" table="key">
<keyPersistence class="java.lang.String" strategy="BLOB" column="key"/>
<valuePersistence class="java.lang.String" strategy="BLOB" column="value"/>
</persistence>

main.cpp

int main()
{
IgniteConfiguration cfg;
cfg.springCfgPath = "apache-ignite-fabric-2.0.0-bin/cassandra-config.xml";
Ignite grid = Ignition::Start(cfg);
Cache<Test, Test> cache = grid.GetCache<Test, Test>("cache1");
Test obj;
cache.LoadCache ();
Test key;
key.key = "123dfsdfs";
obj.value = "sdfsf";
cache.Put (key,obj);
return 0;
}

【问题讨论】:

    标签: c++ cassandra ignite


    【解决方案1】:

    该错误表示 Cassandra 中的列类型为 varchar,但您正尝试将 BLOB 写入其中。因此失败。

    但是为什么你对字符串使用BLOB 策略呢?您可以改用PRIMITIVE 策略将字符串按原样写入varchar 列。

    【讨论】:

    • 当我更改策略时,它适用于字符串:)。但实际上我想使用一个类而不是“java.lang.String”。所以我只是更改了 keyPersistence class="com.test.Test"。它显示其他错误,例如“引起:java.lang.IllegalStateException:无法序列化类'com.test.Test'的对象引起:java.io.NotSerializableException:com.test.Test”
    • 我相信这是因为Test 不是Serializable :)
    • 如果我将策略更改为 POJO,是否可以达到相同的结果。 (如果我使用 POJO 那么我可以避免序列化吗?)
    • 是的,使用 POJO 策略,各个字段将保存在不同的列中。但是您必须为此在 Cassandra 中创建完整的架构。
    • 我已经尝试过使用 POJO,但是当我将数据放入 cassandra 时,只有键被插入到表中,所有其他值列都显示为 NULL。我正在使用相同的代码和 persistence.xml 文件更改为
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2013-12-18
    • 2018-06-01
    相关资源
    最近更新 更多