2016-10-20 2 views
3

키를 String으로 사용하여 점화 캐시를 사용하고 개체 컬렉션 (비슷한 유형)으로 List를 사용하고 있습니다.개체 목록으로 값이있는 쿼리 캐시를 시작하십시오.

이제 캐시에 저장된 학생에 대해 질문을하고 5 명의 최고 득점 학생을 말하겠습니다.

지금 내가 그런

Exception in thread "main" java.lang.AbstractMethodError: org.apache.ignite.internal.processors.query.h2.opt.GridH2Table$ScanIndex.getCost(Lorg/h2/engine/Session;[I[Lorg/h2/table/TableFilter;ILorg/h2/result/SortOrder;Ljava/util/HashSet;)D 
at org.h2.table.TableFilter.getBestPlanItem(TableFilter.java:203) 
at org.h2.table.Plan.calculateCost(Plan.java:123) 
at org.h2.command.dml.Optimizer.testPlan(Optimizer.java:183) 
at org.h2.command.dml.Optimizer.calculateBestPlan(Optimizer.java:79) 
at org.h2.command.dml.Optimizer.optimize(Optimizer.java:242) 
at org.h2.command.dml.Select.preparePlan(Select.java:1014) 
at org.h2.command.dml.Select.prepare(Select.java:878) 
at org.h2.command.Parser.prepareCommand(Parser.java:259) 
at org.h2.engine.Session.prepareLocal(Session.java:560) 
at org.h2.engine.Session.prepareCommand(Session.java:501) 
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1202) 
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73) 
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:290) 
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:406) 
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1121) 
at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:732) 
at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:730) 
at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) 
at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1666) 
at org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:730) 
at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:700) 
at com.tcs.enm.processor.Main.main(Main.java:47) 

같은 예외 중 하나는 어떻게 쿼리에 도와 줄 수있어

SqlFieldsQuery qry = new SqlFieldsQuery("select count(*) from Person"); 

같은 쿼리를 해고

CacheConfiguration<String, List<Student>> cfg = new CacheConfiguration<String, List<Student>>("students"); 
ignite = Ignition.start("/usr/localc/ignite/examples/config/example-ignite.xml"); 
cfg.setIndexedTypes(String.class, List.class); 

아래와 같이 구성을 정의 ?? ?

답변

2

이러한 쿼리를 실행하려면 각 Student을 별도의 항목으로 저장해야합니다. 이 문제를 가지고 미래에 누군가를 위해 https://apacheignite.readme.io/docs/sql-queries

+0

내 경우에는 수백만 명의 학생이 있습니다 ... 다른 비즈니스 사례로 인해 학생들의 목록으로 가치가 있어야하며 키는 연도, 대학, 대학 등일 수 있습니다. – sridhar

+0

왜 원하니? 이것들이 열쇠가 될까요? 값 필드로 추가하고 빠른 검색을위한 색인을 구성하십시오. –

1

: 자세한 내용은

cfg.setIndexedTypes(String.class, Student.class); 

이 문서를 참조하십시오 : Student 클래스는 모든 주석 필드와 인덱스를 정의하고 캐시 구성은 다음과 같이해야해야 이 오류 메시지는 잘못된 버전의 H2를 사용하기 때문에 발생합니다. 당신의 Ignite 1.7을 사용하는 경우

http://apache-ignite-users.70518.x6.nabble.com/Exception-while-trying-to-access-cache-via-JDBC-API-td8648.html#a8651

, 당신은 1.4.191을 h2database해야합니다. h2database 1.4.192는 Ignite가 처리하지 않은 192의 변경 사항이 있기 때문에 질문에 예외가 있음을 유의하십시오.

패키지를 검토하고 H2 버전을 1.4.191로 변경하면 내 문제를 고쳤다.