我们已经从节俭迁移到了cql,并使用了spring-data-cassandra。
更改后的负载测试性能结果太差,特别是对于大约3万行的时间序列读取。
如果我们缺少导致此问题的内容,有人可以提供指导。
我们能够以30至40倍的速度达到预期的结果。如果我们使用spring-data-cassandra但不进行实体映射。我们观察到线程在为每一行进行实体映射时被阻塞。 Spring-data进行类加载器以为每个结果行加载实体类。
我们所做的更改不是将实体列表指定为返回选择查询,而是将其指定为对象列表。
慢速代码
@Query("select * from \"InstrumentTimeSeries\" where key = ?0 and column1 >= ?1 and column1 <= ?2")
List<InstrumentTimeSeriesEntity> findByKeyAndRangeColumn1(ByteBuffer key, long columnValue1, long columnValue2);
instrumentTimeSeriesRepository.findByKeyAndRangeColumn1(SRL_KEY.toByteBuffer(key), interval.getStartMillis(), interval.getEndMillis()).forEach(entity -> builder.addTick(entity.getColumn1(), SRL_DBL.fromByteBuffer(entity.getValue())));
快速代码。
@Query("select * from \"InstrumentTimeSeries\" where key = ?0 and column1 >= ?1 and column1 <= ?2")
List<Object> findByKeyAndRangeColumn1(ByteBuffer key, long columnValue1, long columnValue2); }
instrumentTimeSeriesRepository.findByKeyAndRangeColumn1(SRL_KEY.toByteBuffer(key), interval.getStartMillis(), interval.getEndMillis()).forEach(row -> builder.addTick(((Row)row).getLong(1), SRL_DBL.fromByteBuffer(((Row)row).getBytes(2))));