feat: Implement distributed database using Mycelium

- Refactor database streamer to support multiple workers.
- Add master node to manage and distribute data updates.
- Implement worker nodes to receive and apply updates.
- Remove unnecessary slave node.
- Improve error handling and logging.
- Use base64 encoding for JSON compatibility in data transfer.
This commit is contained in:
Mahmoud Emad
2025-03-03 12:19:03 +02:00
parent 71906fd891
commit 368edcd93a
4 changed files with 144 additions and 70 deletions

View File

@@ -1,16 +1,33 @@
#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
import freeflowuniverse.herolib.data.ourdb
import time
// Known worker public key
worker_public_key := '46a9f9cee1ce98ef7478f3dea759589bbf6da9156533e63fed9f233640ac072c'
mut streamer := ourdb.new_streamer(incremental_mode: false)!
streamer.add_worker(worker_public_key)! // Mycelium public key
// Create master node
mut streamer := ourdb.new_streamer(
incremental_mode: false
server_port: 9000 // Master uses default port
is_worker: false
)!
println('Starting master node...')
// Add worker to whitelist and initialize its database
streamer.add_worker(worker_public_key)!
// Write some test data
id := streamer.write(id: 1, value: 'Record 1')!
println('Wrote record with ID: ${id}')
println('ID: ${id}')
// Verify data in master
master_data := streamer.read(id: id)!
master_data_str := master_data.bytestr()
println('Master data: ${master_data_str}')
// Keep master running to handle worker connections
for {
time.sleep(1 * time.second)
}