gpt4 book ai didi

java - Astyanax 的 EntityPersister 和 Collection 更新

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:00 26 4
gpt4 key购买 nike

背景

Astyanax 的 Entity Persister 将实体的 map 保存在多个列中。格式为mapVariable.key

问题:

当实体中的映射已更新时,astyanax 的实体持久性不会从 cassandra 中删除已删除的键/值对

我现在使用的解决方案(糟糕的方法)

我正在删除整行,然后重新插入

更多信息

我使用 astyanax 的 Entity Persister (com.netflix.astyanax.entitystore) 在 cassandra 中保存我的 java 对象。

我注意到的是,当一个实体的 Map 被持久化为 2 个值时:testkey:testvalue & testkey2:testvalue2,下一次相同的实体的 Map 被持久化为一个值(一个键/值对已删除):testkey:testvalue,testkey2:testvalue2 未从列族中删除。

因此,作为变通方法,我需要删除整行然后重新插入。

我的插入代码:

        final EntityManager<T, String> entityManager = new DefaultEntityManager.Builder<T, String>()
.withEntityType(clazz)
.withKeyspace(getKeyspace())
.withColumnFamily(columnFamily)
.build();
entityManager.put(entity);

我错过了什么?这真的很低效,我认为 astyanax 的实体持久化器应该自己处理这个问题。

有什么想法吗?

最佳答案

你没有遗漏任何东西。

接下来会发生什么:1. Astyanax 为序列化实体的每个字段创建一个 ColumnMappers 列表。2. 然后,ColumnMappers 轮流填充突变批处理。3. 对于 map ,MapColumnMapper用来。如果你看一下它的代码,你会发现它只是将键值对添加到突变批处理中。4. 当数据在 cassandra 中连续放置时,批处理中的新列被添加,现有列被覆盖,不幸的是旧列保持不变

此处的一种解决方案是为您的 map 编写自定义序列化程序并将其保存在一个字段中。

关于java - Astyanax 的 EntityPersister 和 Collection 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com