-
Notifications
You must be signed in to change notification settings - Fork 1
TRUETIME_INTEGRATION
This document describes the TrueTime-inspired clock synchronization and distributed transaction coordination implemented for ThemisDB's sharding system.
TrueTime is a distributed time API inspired by Google Spanner that provides time with uncertainty bounds. This enables strict serializability and snapshot isolation across distributed shards without complex locking protocols.
The TrueTime class provides:
-
Time Intervals with Uncertainty: Returns
TTIntervalwith[earliest, latest]bounds - Clock Synchronization: NTP-based sync to keep clocks accurate
- Drift Detection: Monitors and compensates for clock drift
- Wait-Until-Certain: Key operation for external consistency
// Get current time with uncertainty
TTInterval now = truetime->now();
// Wait until a timestamp is definitely in the past
truetime->waitUntil(commit_timestamp);
// Get current uncertainty bound
auto epsilon = truetime->getUncertainty();TrueTime::Config config;
config.base_uncertainty_us = 1000; // 1ms base uncertainty
config.max_drift_us = 100000; // 100ms max drift
config.sync_interval_s = 30; // Sync every 30 seconds
config.ntp_servers = {"time.google.com"};Implements two-phase commit with TrueTime for cross-shard transactions:
Write Transactions (Two-Phase Commit):
- Begin: Coordinator assigns transaction to participating shards
- Execute: Operations are buffered on each shard
- Prepare Phase: All shards prepare to commit
-
Assign Commit Timestamp:
commit_ts = TT.now().latest -
Wait:
TT.waitUntil(commit_ts)- ensures external consistency - Commit Phase: All shards commit with the same timestamp
Read-Only Transactions (Wait-Free):
-
Snapshot Timestamp:
snapshot_ts = TT.now().latest -
Read: Query all shards at
snapshot_ts - No Locking Required: Reads don't block writes
auto coordinator = std::make_shared<DistributedTransactionCoordinator>(truetime);
// Begin transaction across multiple shards
std::string txn_id = coordinator->beginTransaction({"shard1", "shard2"});
// Add operations
coordinator->addOperation(txn_id, "shard1", operation1);
coordinator->addOperation(txn_id, "shard2", operation2);
// Commit (2PC with TrueTime)
bool success = coordinator->commit(txn_id);
// Read-only transaction (wait-free)
auto results = coordinator->executeReadOnly(
{"shard1", "shard2"},
read_operations
);The ShardRouter now supports:
- Snapshot Reads: Read at specific timestamp for consistency
- Transaction Coordination: Access to distributed transaction coordinator
// Create ShardRouter with TrueTime
auto router = std::make_shared<ShardRouter>(
resolver, executor, config, metrics, truetime
);
// Read with snapshot timestamp
auto snapshot_ts = truetime->now().latest;
auto data = router->get(urn, snapshot_ts);
// Access transaction coordinator
auto txn_coordinator = router->getTransactionCoordinator();Log entries now include timestamps for ordering:
struct LogEntry {
uint64_t term;
uint64_t index;
std::string command;
uint64_t timestamp_ns; // TrueTime timestamp
};This enables:
- Timestamp-based Ordering: Total order across all shards
- Snapshot Isolation: Read at any past timestamp
- Conflict Detection: Detect conflicts based on timestamps
If transaction T1 commits before T2 begins, then T1's commit timestamp is less than T2's commit timestamp.
Implementation:
- T1 commits at timestamp
commit_ts1 = TT.now().latest - T1 waits until
TT.waitUntil(commit_ts1)returns - T2 can now start, getting
commit_ts2 = TT.now().latest - By TrueTime properties:
commit_ts1 < commit_ts2
Read-only transactions read a consistent snapshot without blocking writes.
Implementation:
- Get snapshot timestamp:
ts = TT.now().latest - Read all data with
timestamp <= ts - No locks needed - writes continue concurrently
All transactions appear to execute in timestamp order.
Implementation:
- Each transaction gets a unique commit timestamp
- Reads see all writes with
timestamp < read_timestamp - Writes are applied in timestamp order
β Completed:
- TrueTime clock with uncertainty bounds
- NTP-based clock synchronization
- Drift detection and compensation
- Two-phase commit with TrueTime
- Distributed transaction coordinator
- ShardRouter integration
- RaftLog timestamp support
- Wait-free read-only transactions
- Integrate GPS receivers for precise time
- Fallback to NTP when GPS unavailable
- Uncertainty < 100ΞΌs with GPS
- Machine learning for drift prediction
- Adaptive sync intervals
- Temperature-based compensation
- WAN-aware time sync
- Regional time masters
- Cross-region consistency
- Benchmark commit latency
- Optimize wait times
- Parallel prepare/commit
- Metrics and monitoring
TODO: Add comprehensive tests for:
- TrueTime accuracy and uncertainty bounds
- Transaction isolation levels
- Conflict detection and resolution
- Multi-shard consistency
- Recovery after failures
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme