- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
背景
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/
我是astyanax的新手,尝试了一些示例程序并遇到此错误。这是一个简单的编写,看起来像是在做一些基本错误的事情。不使用复合键。 Caused by: InvalidRequestException(
尝试编写一个查询,该查询将使用 astyanax 客户端和 RowSliceQuery 对列族中的所有行进行分页。 keyspace.prepareQuery(COLUMN_FAMILY).getKe
我正在尝试使用 Astyanax 驱动程序列出 Cassandra 中的列族。它列出了键空间,但输出中缺少许多列族。 我有一个简单的程序: import com.netflix.astyanax.As
我最近开始使用Cassandra在我们的Production environment 。我们有一个24 node cluster与 replication factor of 4 。含义2 copie
这是我的设置: 4 个节点 Cassandra 1.2.19 Astyanax 1.56.49 我正在设置配置 AstyanaxContext context = new AstyanaxContex
我正在使用 Astyanax 客户端从 Cassandra 数据库读取数据。 我在 Cassandra 数据库中有大约一百万行。我有一个十字colocation centre具有四个节点的集群。 这是
如何使用 astyanax 客户端创建带有复合键的表。现在我已经用 cqlsh -3 创建了它,这就是它在 cli 中的样子: [default@KS] describe my_cf; Col
我正在尝试将 Astyanax 用于带有 Java 的 Cassandra。我在 https://github.com/Netflix/astyanax/wiki/Getting-Started 尝试
我编写了一些相当简单的代码来试验 astyanax。当与本地主机上的单节点 Cassandra 数据库通信时,它工作正常,但是当我将相同的架构写入两节点集群(绝对可以从我的主机访问)时,我得到一个 T
我最近开始使用 Cassandra 数据库,并且正在考虑使用 Netflix 客户端 astyanax。我进入了这个页面- https://github.com/Netflix/astyanax 我想
我从事的项目使用astyanax驱动程序来访问Cassandra。我想实现一个异步操作: MutationBatch m; //… ListenableFuture> lf = m.executeAs
Astyanax 通过其 AnnotatedCompositeSerializer 支持 Cassandra 中的复合列。我有一个包含 3 个字段的复合列名称的列族,类似于此示例,改编自 Astyan
过去几周我们一直在尝试评估不同的 Cassandra 客户端,所以现在看来我们将继续使用 Netflix/Astyanax 客户端。 我们正在尝试优化 Cassandra 数据库,主要是为了读
我正在尝试使用 Astyanax 客户端插入 Cassandra 列族中的复合列。下面是我在 Cassandra 中的列族。 create column family USER_DATA with k
我正在开发一个项目,其中我需要使用 Astyanax 客户端删除 Cassandra 中除一列及其数据之外的所有列及其数据。 我有一个如下所示的动态列族,并且该列族中已经有几百万条记录。 create
您好,我正在使用 Astyanax 客户端在我的程序中使用 CQL 访问 Cassandra。我遇到的问题是,当我执行查询时,OperationResult 的行数设置为最大值 10 000。我需要根
我使用 astyanax 连接池定义如下: ipSeeds = "LOAD_BALANCER_HOST:9160"; conPool.setSeeds(ipSeeds) .setDiscoveryTy
我正在尝试从具有 double 类型列的Cassandra表中获取 double 值。我已经使用CQL3语法创建了表: CREATE TABLE data_double ( datetime
我想将 Astyanax 包含在我的项目中。我从 github checkout 代码并用“gradlew build”编译它。我不熟悉gradle。 我将 Astyanx jar 文件手动包含到我的
有没有办法检查当前上下文中是否存在 Astyanax Keyspace?现在我的代码执行以下操作: keyspace = context.getClient(); try{ keyspace.d
我是一名优秀的程序员,十分优秀!