首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cassandra C#驱动程序进行批删除的正确方法是什么?

使用Cassandra C#驱动程序进行批删除的正确方法是什么?
EN

Stack Overflow用户
提问于 2020-06-08 12:25:09
回答 1查看 79关注 0票数 0

我对卡桑德拉数据库很陌生。我有一个关于使用卡桑德拉的问题。

表结构如下:-

表名:-产品详细信息。

ProductFamily文本,

AccessGroup文本,

ProductDetails地图

((ProductFamily),AccessGroup)主键

数据关系:-

对于1产品族,我们有多个访问组,每个访问组在Map中都有产品详细信息。很可能在所有访问组或某些访问组中都有1项产品详细信息。

设想1:-

  1. 我们只接收ProductId和产品系列的删除事件。

我们的执行情况:-

  1. 从数据库中获取产品系列的所有访问组。
  2. 为每个访问组,点击数据库获取地图,然后我们检查它是否有特定的productid作为映射键。如果是,则在内存中保存访问组-> productid (键、值)对。最后,准备批处理语句删除访问组的所有产品is,因为我们的分区键是相同的。

G 213/code>

注意-最大限度。我们有15-20个项目的地图和8-10个访问组与一个产品系列.

问题:-

  1. ,请您告诉我,我是否遵循了正确的批量删除方法?
  2. ,如果我们在一天内收到数千个这样的事件,这种方法是否具有表现性?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-15 09:26:11

通常,如果目标是提高性能,我们不建议使用批处理。但是,当批处理中的所有语句都引用相同的分区键(vs发送单独的异步请求)时,一些用户报告了性能改进,因此您的方法实际上可以提供最好的性能。

影响性能的一件事是这种方法的“尖峰”性质。卡桑德拉节点最好这样做:

await Task.WhenAll(tasks).

  1. 从数据库中获取产品系列的所有访问组。
  2. 为每个访问组,点击数据库获取地图,然后我们检查它是否有特定的产品作为映射密钥。如果是,
  3. 异步发送一个删除请求,并将Task保存在内存中(而不是立即等待)。最后,
  4. 等待内存中的所有任务。

但是,不能保证这种方法会更好,性能测试和基准是确定这一点的唯一方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62262029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档