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

大量的表(2k)会导致写入超时异常吗?

鲍永春
2023-03-14

我正在运行OS卡桑德拉3.11.9与数据斯塔克斯Java驱动程序3.8.0。我有一个卡桑德拉键空间,它有多个表作为查找表/搜索索引。每当我收到对endpoint的新 POST 请求时,我都会解析该对象并将其插入到相应的 Cassandra 表中。我还将插入内容放入每个相应的查找表中。(每个对象 10-20 个)

当将大量数据接收到系统中时,我在驱动程序中遇到了WriteTimeoutExceptions。

我试图通过引入Apache Camel将插入请求序列化到查找表中,并将所有语句放入会话可以处理的队列中,但这没有帮助。使用Camel,由于异常现在发生在Camel线程中,测试继续运行,而不是在第一次异常时失败。最终,测试似乎让卡珊德拉崩溃了。(尽管卡桑德拉日志中没有任何内容)

我还尝试关闭查找表,改为向主表中插入每个对象15x的数据(模拟类似的写入次数,就好像我打开了查找表一样)。这个测试无一例外地通过了,这使我认为大量的表是问题所在。

大量(2k)Cassandra表是代码气味吗?我们应该重新架构还是投入更多资源?日志中没有显示任何指示性信息,主要是关于表数量等的一些状态-没有例外)

Datastax Java驱动程序可以像这样多线程使用吗?它说它是线程安全的。

共有1个答案

湛鸿
2023-03-14

大量的表对性能有直接的影响——参见本文档(整个系列都是很好的信息来源),以及这篇博文了解更多细节。基本上,对于大约1000个表,性能会下降大约20-25%。

这可能是一个原因,不是完全直接的,而是相关的。对于每个表,Cassandra需要分配内存,在memtable中为它分配一部分,保存有关它的信息,等等。这个特定的问题可能来自阻塞的memtable刷新,或者类似的问题。检查nodetool tpstats和nodetol tablestats是否有阻塞或挂起的memtable刷新。最好设置一些连续的监控解决方案,例如Apache Cassandra的指标收集器,并在一段时间内观察包含这些信息的重要指标。

 类似资料:
  • 我正在尝试实现View.OnClickListener接口和GoogleApiclient如下 但这失败了,错误如下 错误:任务': app: dexDebug'执行失败。com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException: Process'命令'C:\Program F

  • 问题内容: 我想我发现了一个错误。也许不是,但是Super CSV不能很好地处理。 我正在使用MapReader解析具有41列的CSV文件。但是,我得到的是CSV- 而使我获得CSV的Web服务错了一行。“标题”行是制表符分隔的行,具有41个单元格。 而且“错误的行”是一个由制表符分隔的行,其中包含36个单元格,其内容没有任何意义。 这是我正在使用的代码: 我在上面提到的行中执行mapReader

  • 以下操作会在运行时导致异常: java.lang.VerifyError:操作数堆栈上的类型错误异常详细信息:location:com/sun/net/httpserver/spi/httpserverprovider$1.run()ljava/lang/object;@27:invokestatic原因:类型“sun/net/httpserver/defaulthttpserverprovide

  • 我有一个操作/方法来执行对数据库的插入。它需要几个字段,由于各种原因,操作可能会失败,因为一个或多个输入不是唯一的,或者因为它们与一些需要唯一的内部记录冲突。 反对这种方法的人指出,我们开发团队知道会导致失败的每个错误情况,应该返回错误代码并使用它来处理每个情况。 我看不出检查方法有任何明显的缺点。这些错误情况很有可能发生,您绝对必须在使用saveUserInfo()的任何地方解决它们。似乎正是为

  • 问题内容: 根据python文档,自python 2.5开始支持相对导入和内部包引用。我当前正在运行Python 2.7.3。因此,我尝试在自己的程序包中实现此功能,以便将其用于更简单的导入。我很惊讶地发现它引发了SyntaxError异常,我希望有人可以帮助您找到原因。 我设置了一个测试目录进行测试: 两个__init__.py模块都为空。其他模块是: 当我尝试导入second_level模块时

  • 将HttpServletRequest或HttpServletResponse注入@RestController类中的@RequestMapping方法会导致异常(至少在@SpringBootTest注释启用测试中): 错误: 这是Spring的错误吗?我做错了吗?我几乎可以肯定地通过消除过程跟踪它到HttpServletRequest注入,而不是@Request estParamJSON(一种自