当前位置: 首页 > 知识库问答 >
问题:

使用Cassandra和CQL3,如何在单个请求中插入整个宽行?

谭炎彬
2023-03-14

我想在Cassandra 1.2.8中插入一个有50,000列的单行。在插入之前,我已经准备好了整行的所有数据(在内存中):

+---------+------+------+------+------+-------+
|         | 0    | 1    | 2    | ...  | 49999 |
| row_id  +------+------+------+------+-------+
|         | text | text | text | ...  | text  |
+---------+------+------+------|------+-------+

列名是整数,允许对分页进行切片。列值是该特定索引处的值。

create table results (
    row_id text,
    index int,
    value text,
    primary key (row_id, index)
) 
with compact storage;
INSERT INTO results (row_id, index, value) values (my_row_id, ?, ?);

这要花很多时间。即使当我们把上面的插入物放入一批中时,也需要大量的时间。

我们已经有了所需的全部数据(完整的行),我假设只说“这里,Cassandra,在一个请求中将此数据存储为单行”是非常容易的,例如:

//EXAMPLE-BUT-INVALID CQL3 SYNTAX:
insert into results (row_id, (index,value)) values 
    ((0,text0), (1,text1), (2,text2), ..., (N,textN));

通过当前的CQL3语法,这个示例是不可能的,但我希望它说明了预期的效果:所有内容都将作为一个查询插入。

在CQL3和DataStax Java驱动程序中可以做到这一点吗?如果没有,我想我将被迫使用Hector或Astyanax驱动程序和节俭batch_insert操作?

共有1个答案

南门欣怡
2023-03-14

通过使用变异多映射,可以在节俭API中使用batch_mutate方法进行多次插入/更新。

Map<byte[], Map<String, List<Mutation>>> mutationMap = new HashMap<byte[], Map<String, List<Mutation>>>();

List<Mutation> mutationList = new ArrayList<Mutation>();

mutationList.add(mutation);
Map<String, List<Mutation>> m = new HashMap<String, List<Mutation>>();

m.put(columnFamily, mutationList);

mutationMap.put(key, m);
client.batch_mutate(mutationMap, ConsistencyLevel.ALL);
 类似资料:
  • 表模式如下: 表A的主键[ID1(分区键)id2(分区键)id3(群集键)] 表B主键[ID1(分区键)id2(分区键)状态(聚类键)id3(聚类键)] 那么在卡桑德拉我该怎么解决呢?

  • 问题内容: 我很难解决这个问题的解决方案。我正在尝试用Java开发一个程序,该程序需要一个数字,例如321,并找到数字的总和,在这种情况下为3 + 2 + 1 =6。我需要任何三个数字的所有数字将它们加在一起,并使用%剩余符号存储该值。这让我感到困惑,我想感谢任何人的想法。 问题答案: 输出量

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 我正在尝试使用Pig将HDFS中的文件中的数据复制到Cassandra中的表中。但在将数据存储在Cassandra中时,作业失败,出现空指针异常。有人能帮我吗? 用户表结构: 创建表用户(user\u id text主键、age int、第一个文本、最后一个文本) 我的猪脚本 > A=加载“/用户/hduser/用户。txt“使用PigStorage(',')作为(id:chararray,age

  • 问题内容: 我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。 我正在尝试使用python请求库来执行此操作: 这将引发以下错误: 如果我从请求中删除“文件”,则它可以工作。 如果我从请求中删除了“数据”,它将起作用。 如果我不将数据编码为JSON,则可以使用。 因此,我认为错误与在同一请求中发送JSON数据和文件有关。 关于如何使它工作的任何想法? 问题答案: 不要使用j

  • 我在评估卡桑德拉。我正在使用datastax驱动程序和CQL。 我必须能够处理每秒至少1000个宽行插入,使用不同但数量很大(~1000)的名称/值对。 问题是:我编写了一个简单的基准测试,它执行1000个宽行插入,每个插入10000个名称/值对。我使用CQL和datastax驱动程序的性能非常慢,而不使用CQL的版本(使用astyanax)在相同的测试集群上有很好的性能。 我已经读过这个相关的问