diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/docker-compose.yaml b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/docker-compose.yaml new file mode 100644 index 00000000..2e1e9115 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/docker-compose.yaml @@ -0,0 +1,19 @@ +version: '3.8' + +services: + trino: + image: trinodb/trino:latest + container_name: trino + ports: + - "8080:8080" + volumes: + - ./etc:/etc/trino + - ./data:/var/trino/data + depends_on: + - valkey + + valkey: + image: valkey/valkey:8.0.1 + container_name: valkey + ports: + - "6379:6379" \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/catalog/redis.properties b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/catalog/redis.properties new file mode 100644 index 00000000..58539099 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/catalog/redis.properties @@ -0,0 +1,5 @@ +connector.name=redis +redis.table-names=example_table +redis.nodes=valkey:6379 +redis.default-schema=default +redis.table-description-dir=/etc/trino/table-descriptions \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/config.properties b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/config.properties new file mode 100644 index 00000000..6e1e67b2 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/config.properties @@ -0,0 +1,4 @@ +coordinator=true +node-scheduler.include-coordinator=true +http-server.http.port=8080 +discovery.uri=http://localhost:8080 \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/jvm.config b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/jvm.config new file mode 100644 index 00000000..891be3c2 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/jvm.config @@ -0,0 +1,17 @@ +-server +-Xmx16G +-XX:InitialRAMPercentage=80 +-XX:MaxRAMPercentage=80 +-XX:G1HeapRegionSize=32M +-XX:+ExplicitGCInvokesConcurrent +-XX:+ExitOnOutOfMemoryError +-XX:+HeapDumpOnOutOfMemoryError +-XX:-OmitStackTraceInFastThrow +-XX:ReservedCodeCacheSize=512M +-XX:PerMethodRecompilationCutoff=10000 +-XX:PerBytecodeRecompilationCutoff=10000 +-Djdk.attach.allowAttachSelf=true +-Djdk.nio.maxCachedBufferSize=2000000 +-Dfile.encoding=UTF-8 +# Allow loading dynamic agent used by JOL +-XX:+EnableDynamicAgentLoading \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/log.properties b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/log.properties new file mode 100644 index 00000000..d253499a --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/log.properties @@ -0,0 +1 @@ +io.trino=INFO \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/node.properties b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/node.properties new file mode 100644 index 00000000..d4dda3b1 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/node.properties @@ -0,0 +1,3 @@ +node.environment=production +node.id=ffffffff-ffff-ffff-ffff-ffffffffffff +node.data-dir=/var/trino/data \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/table-descriptions/example_table.json b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/table-descriptions/example_table.json new file mode 100644 index 00000000..83116956 --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/etc/table-descriptions/example_table.json @@ -0,0 +1,33 @@ +{ + "tableName": "example_table", + "schemaName": "default", + "key": { + "dataFormat": "raw", + "fields": [ + { + "name": "id", + "type": "varchar" + } + ] + }, + "value": { + "dataFormat": "hash", + "fields": [ + { + "name": "field1", + "type": "varchar", + "mapping": "field1" + }, + { + "name": "field2", + "type": "varchar", + "mapping": "field2" + }, + { + "name": "field3", + "type": "varchar", + "mapping": "field3" + } + ] + } +} \ No newline at end of file diff --git a/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/readme.md b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/readme.md new file mode 100644 index 00000000..bee781ef --- /dev/null +++ b/app/server/datasource/nosql/redis/dockerized_trino_setup_redis_valkey/readme.md @@ -0,0 +1,81 @@ +# Docker compose setup for Trino + Redis/Valkey + +## Official Docs: +- [Trino](https://trino.io/docs/current/connector/redis.html) +- [Valkey (open-source Redis)](https://valkey.io/download/) + +## Project Structure + +``` +./ +├──── data/ +│ └── ... # empty folder for redis usage +├──── etc/ +│ └── catalog/ +│ └── redis.properties +│ └── table-descriptions/ +│ └── example-table.json +│ └── config.properties +│ └── log.properties +│ └── node.properties +│ └── jvm.config +├── docker-compose.yml +└── readme.md +``` + +## Instructions + +### Steps to Run + +1. Pull containers: + +```sh +docker pull trinodb/trino +docker pull valkey/valkey +``` + +2. Start the services: + +```sh +docker-compose up -d +``` + +### Example Usage + +1. Connect to Valkey: + +```sh +docker exec -it valkey redis-cli +``` + +2. Insert some data: + +```r +HSET example_table:1 field1 "Alice" field2 "Wonderland" field3 "25"; +``` + +3. Connect to Trino: + +```sh +docker exec -it trino trino +``` + +4. Run a sample query: + +```sql +SELECT * FROM redis.default.example_table; +``` + +You should see this: + +``` +id | field1 | field2 | field3 +-----------------+--------+-------------+-------- + example_table:2 | Bob | Builderland | 30 + example_table:1 | Alice | Wonderland | 25 +(2 rows) + +Query 20250105_174102_00000_nf6v2, FINISHED, 1 node +Splits: 1 total, 1 done (100.00%) +0.40 [2 rows, 0B] [5 rows/s, 0B/s] +``` \ No newline at end of file