datastax mapper对象的垃圾收集问题

afdcj2ne  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(411)

有人能帮忙吗?垃圾收集器没有收集这些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());
    }
nx7onnlm

nx7onnlm1#

您错误地使用了对象Map器—您只使用它将行Map到pojo。您有以下问题-您正在使用querybuilder构建一个单独的cql查询,这会导致以下问题-cassandra需要分别接收和解析每个cql语句-这会严重影响性能。您可以使用占位符构建查询,准备查询,然后绑定参数—这应该要快得多。
但实际上,您只需要正确地使用对象Map器-如果您已经有了 Mapper 示例,则您有以下选择:
使用 mapper.get ,以及其他crud操作(如果您有完整的主键)
如果查询可能返回多个结果,或者需要自定义查询,请使用访问器。
它将使您的生活更轻松,因为您不需要构建查询-对象Map器将根据pojo注解在后台完成所有工作,然后通过准备它来优化查询执行,等等。

相关问题