有人能帮忙吗?垃圾收集器没有收集这些Map器对象,堆可用空间也没有减少。
正在堆内存中创建com.datastax.driver.mapping.mapper类对象。我已经给出了使用mapper的代码,这是整个应用程序中唯一的地方。
代码:
public RawPlan retrievePrePPlan(PlanCompleteTrigger planCompleteTrigger) {
Mapper<PrePPlan> mapper = new MappingManager(session).mapper(PrePPlan.class);
//TODO Replace Select all with individual column names
Select select = QueryBuilder.select().all().from(CassandraTableConstants.PRE_P_PLAN);
select.where(QueryBuilder.eq("runuuid", planCompleteTrigger.getRunUUID()))
.and(QueryBuilder.eq("groupid", planCompleteTrigger.getGroupId()))
.and(QueryBuilder.eq("itemnbr", planCompleteTrigger.getItemNumber()))
.and(QueryBuilder.eq("sl", planCompleteTrigger.getSL()));
ResultSet resultSet = session.execute(select);
Result<PrePPlan> prePPlans = mapper.map(resultSet);
return new RawPlan(prePPlans.all());
}
1条答案
按热度按时间nx7onnlm1#
您错误地使用了对象Map器—您只使用它将行Map到pojo。您有以下问题-您正在使用querybuilder构建一个单独的cql查询,这会导致以下问题-cassandra需要分别接收和解析每个cql语句-这会严重影响性能。您可以使用占位符构建查询,准备查询,然后绑定参数—这应该要快得多。
但实际上,您只需要正确地使用对象Map器-如果您已经有了
Mapper
示例,则您有以下选择:使用
mapper.get
,以及其他crud操作(如果您有完整的主键)如果查询可能返回多个结果,或者需要自定义查询,请使用访问器。
它将使您的生活更轻松,因为您不需要构建查询-对象Map器将根据pojo注解在后台完成所有工作,然后通过准备它来优化查询执行,等等。