CQEngine은 Java 컬렉션을 SQL 유사 방식으로 질의할 수 있게 해주는 인메모리 쿼리 엔진입니다.
IndexedCollection에 인덱스를 구성해 반복(iteration) 기반 조회의 비용을 크게 줄이고, 낮은 지연 시간으로 조회할 수 있도록 설계되었습니다.
- 타입 안전한 쿼리 API (
QueryFactory) - 다양한 인덱스 지원(Hash, Navigable, Radix/Suffix, Compound, Standing Query 등)
- 온힙/오프힙/디스크 기반 지속성 지원
- MVCC 기반 트랜잭션 격리(
TransactionalIndexedCollection) - Java Stream과 결합한 후처리(집계/변환) 지원
dependencies {
implementation("io.github.boozilla:cqengine:3.6.1")
}최신 버전은 릴리스 노트에서 확인하세요.
- Gradle Wrapper(
gradle-9.3.1) 실행에는 JDK 17 이상이 필요합니다. - 라이브러리 바이트코드 타겟은 Java 8(
--release 8)을 유지합니다.
import com.googlecode.cqengine.ConcurrentIndexedCollection;
import com.googlecode.cqengine.IndexedCollection;
import com.googlecode.cqengine.index.hash.HashIndex;
import com.googlecode.cqengine.resultset.ResultSet;
import static com.googlecode.cqengine.query.QueryFactory.equal;
IndexedCollection<Car> cars = new ConcurrentIndexedCollection<>();
cars.addIndex(HashIndex.onAttribute(Car.MANUFACTURER));
cars.add(new Car(1, "Ford", "Focus"));
cars.add(new Car(2, "Honda", "Civic"));
ResultSet<Car> result = cars.retrieve(equal(Car.MANUFACTURER, "Ford"));
try {
result.forEach(System.out::println);
}
finally {
result.close();
}CQEngine은 프로그램적 쿼리 API 외에도 SQL/CQN 문자열 파서를 지원합니다. 관련 예제 코드는 아래 경로를 참고하세요.
- SQL 예제: SQLQueryDemo.java
- CQN 예제: CQNQueryDemo.java
온힙/오프힙/디스크 지속성 조합 및 트랜잭션 격리는 아래 문서를 참고하세요.