- This repository is a multi-module Java + C++ codebase for the Pixels columnar engine, deployment daemons, and serverless query acceleration.
PIXELS_HOMEis a hard requirement for most workflows (install.sh, IntelliJ run configs, runtime scripts).- Existing AI guidance files were not found; conventions here are inferred from project READMEs and build scripts.
- Core format/runtime:
pixels-core, shared APIs/types:pixels-common, cache service:pixels-cache. - Control plane services run as stateless daemons (
pixels-daemon): metadata, transaction, cache coordination, index endpoints. - External API gateway:
pixels-server(REST on18891, RPC on18892). - Query pipeline: SQL parse (
pixels-parser) -> physical planning (pixels-planner) -> operator execution (pixels-executor). - Turbo/serverless path:
pixels-turbo/*modules (pixels-invoker-*,pixels-worker-*,pixels-scaling-*) integrate Trino with Lambda/vHive/EC2 autoscaling. - Retina CDC path:
pixels-retina+cpp/pixels-retinareplay log-based changes with MVCC; index backends are pluggable underpixels-index/*.
- RPC/data contracts are centralized in
proto/*.proto; row batch schema is inflatbuffers/rowBatch.fbs. - Storage backends are split by module (
pixels-storage/pixels-storage-{s3,hdfs,gcs,redis,http,localfs,...}) and selected by table/storage settings. - Typical operational flow: Trino connector reads Pixels metadata/files -> optional Turbo pushdown builds sub-plans -> workers execute and write intermediate/output storage.
- Example runtime switch for Turbo lives in Trino catalog config:
cloud.function.switch=off|on|auto(pixels-turbo/README.md).
- Full build from repo root (default used by project):
mvn -T 3 clean install
- Install local runnable layout (
bin/,sbin/,etc/) intoPIXELS_HOME:./install.sh
- Start core services after install:
./sbin/start-pixels.sh(fromPIXELS_HOME)
- Run CLI tooling (load/compact/stat/eval):
java -jar ./sbin/pixels-cli-*-full.jar
- C++/DuckDB path is separate (
cpp/README.md):cd cpp && make pull && make -j
- Root
pom.xmlsetsmaven-surefire-pluginwith<skipTests>true</skipTests>; tests do not run unless explicitly enabled. - Some JUnit tests need lower JDK internals access (README notes JDK 8 for those tests), while integrations like Trino may require newer JDKs.
- Prefer module-scoped iterations when changing one area (for example
mvn -pl pixels-core -am ...) to avoid rebuilding all modules.
- Keep runtime/config edits aligned with
PIXELS_HOME/etc/pixels.propertiesand scripts underscripts/{bin,sbin,etc}. - When documenting/evaluating performance flows, mirror project examples in
docs/TPC-H.mdanddocs/CLICKBENCH.md(for exampleLOAD,COMPACT,STAT). - For storage- or index-related changes, update the matching pluggable module instead of hard-coding backend-specific logic in shared modules.
- For serverless changes, ensure planner/invoker/worker settings remain consistent (input/intermediate/output storage schemes in
pixels-turbo/README.md).