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

每个 POST 请求执行多次插入

谭正谊
2023-03-14

我们有一个场景,每个插入id_2在Cassandra中给定id_1,对于下面的架构:

CREATE      TABLE  IF    NOT    EXISTS my_table (
  id_1                   UUID,
  id_2                   UUID,
  textDetails            TEXT,
  PRIMARY KEY (id_1, id_2)
);

单个 POST 请求正文包含id_2多个值的详细信息。这将触发单个表上每个 POST 请求的多个插入。

每个INSERT查询如下所示执行:

insertQueryString = "INSERT INTO my_table (id_1, id_2, textDetails) " + "VALUES (?, ?, ?) IF NOT EXISTS"
    cassandra.Session.Query(insertQueryString, 
    id1,                            
    id2,        
    myTextDetails).Exec();

1个

Cassandra是否确保每个POST请求在单个表上的多个插入上的数据展示一致性?每个POST请求都在Go例程(线程)上处理。后续GET请求应确保检索一致的数据(通过POST插入)

使用批处理语句在暂存时会出现“批处理太大”的问题

2个

我们有两个数据中心(用于Cassandra),每个数据中心有3个副本节点。

为确保完全一致性,需要为写查询操作(POST请求)和就绪查询操作(GET请求)设置什么样的一致性级别

共有1个答案

郭兴平
2023-03-14

这里有多个问题:

  • 在Cassandra中应该非常小心地使用批处理-仅当您将数据插入同一个分区时。如果您将数据插入多个分区,那么最好使用并行执行的单独查询(但您可以收集每个分区键的多个条目并对其进行批处理)。
  • 您正在使用IF Not EXISTS,它是针对同一个分区完成的——结果它会导致多个节点之间的冲突(参见轻量级事务的留档),并且它需要从磁盘读取数据,因此它会大大增加节点的负载。但是您真的需要仅在行不存在时才插入数据吗?如果行已经存在,问题是什么?在执行INSERT时,只需覆盖Cassandra中的数据就更容易了,因为它不需要从磁盘读取数据

关于一致性级别——QUORUM(或LWT的SERIAL)将为您提供强大的一致性,但代价是延迟增加(因为您需要等待另一个DC的回答)和缺乏容错能力——如果您丢失另一个DC,那么您的所有查询都将失败。在大多数情况下,LOCAL_QUORUM就足够了(LOCAL_SERIALLWT的情况下),它将提供容错能力。我建议阅读这份关于在Cassandra之上构建容错应用程序的最佳实践的白皮书。

 类似资料:
  • 问题内容: 我有一个ajax调用到一个php文件。我正在收到结果。现在,我正在研究是否有可能使ajax请求每1秒自动执行一次。我将结果发布到名为的输入字段中。如何每三秒钟执行一次ajax调用而不必调用该函数? 问题答案: 您可能要考虑的是服务器发送事件(SSE) 这是一种HTML5技术,JavaScript可以通过该技术“ 长期轮询 ”服务器端点(您的PHP文件)以查看是否发生了任何更改。长轮询基

  • 问题内容: 我有一个javascript函数,其中有两个$ .post请求。两个$ .post请求都应该执行。但是有时候,第二个$ .post请求却没有执行。这可能是什么原因? 问题答案: 是$ .ajax()结构的缩写形式。我通常更喜欢使用该结构,因为: 比较容易发现我是否错过了任何事情 我可以更轻松地添加其他参数,例如 当刚接触ajax时,我发现对这种结构进行故障排除要容易得多 在您的情况下,

  • 问题内容: import scrapy from selenium import webdriver 此解决方案效果很好,但是它对相同的URL两次请求,一个是scrapy Scheduler,另一个是Selenium Web驱动程序。 与没有selenium的苛刻要求相比,完成这项工作将花费两倍的时间。如何避免这种情况? 问题答案: 这是解决这个问题的有用技巧。 *为硒 *创建一个Web服务 ,在

  • 我必须对我的应用程序做一个压力测试,以创建1000个用户。为了创建用户,我使用JSON执行POST请求: 我不知道如何使用JMeter创建多个用户。有for循环吗?另外,我如何避免代码必须是唯一的,这样每个用户都需要一个唯一的代码?

  • 到目前为止,我们主要通过.await来使用 Futures,它将阻塞当前任务,直到特定的Future完成。但是,真正的异步应用程序,通常需要同时执行几个不同的操作。 Executing Multiple Futures at a Time 在本章中,我们将介绍几种,同时执行多个异步操作的方法: join!:等待全部 Futures 完成 select!:等待几种 Futures 之一,完成 Spa

  • 我已经做了一个简单的场景登录在ASP点网络应用程序。但是我在登录时发送的请求在执行时显示为GET。第一个图像是HTTP请求的屏幕截图,第二个图像是执行时请求详细信息的屏幕截图。如何将该请求转换为POST请求?还添加了显示“对象移动到这里”消息的响应数据截图。