Skip to content

pkeffect/numbers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

10 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ”ข Math Constants Storage System

โš ๏ธ IMPORTANT: DATA FILES NOT INCLUDED

This repository contains the API and storage infrastructure only. See Data Sources section for obtaining data files.

High-performance, triple-redundancy storage system for accessing billions of digits of mathematical constants (ฯ€, ฯ†, e, โˆš2, and more) with FastAPI backend, Redis caching, WebSocket streaming, dedicated endpoints per constant, and accuracy-first design.

โœจ Features

  • 12 Mathematical Constants: Pi, Euler's number, Golden ratio, Square roots, Logarithms, and more
  • Dedicated Endpoints: Each constant has its own clean API namespace (/pi/*, /e/*, etc.)
  • Triple Redundancy: Original file + SQLite chunks + Binary cache
  • Redis Caching: Lightning-fast access with intelligent cache invalidation
  • WebSocket Streaming: Real-time digit streaming with chunked delivery
  • Smart Cache Management: Automatically skips already-built caches
  • Accuracy First: Automatic verification and corruption detection
  • High Performance: Optimized for random access to billions of digits
  • Modular Architecture: Clean separation with 16 focused router files
  • Hot Reloading: Development-friendly Docker setup
  • Backward Compatible: Legacy parameterized endpoints still work

๐Ÿš€ Quick Start

# Clone the repository git clone https://github.com/pkeffect/numbers cd numbers # Copy environment configuration cp .env.example .env # Place your math constant files in data/ directory # Required filenames: pi_digits.txt, e_digits.txt, phi_digits.txt, etc. # Start the development environment (includes Redis) docker-compose up --build # Build caches (after first startup) curl -X POST http://localhost:8000/admin/build-all-caches

๐Ÿ†• New Features: Redis & WebSocket

Redis Caching

Benefits:

  • โšก 10-100x faster response times for cached queries
  • ๐Ÿ“Š Automatic cache hit/miss tracking
  • ๐Ÿ”„ Smart cache invalidation on data updates
  • ๐Ÿ’พ Configurable TTL and memory limits

Cached Operations:

  • Digit retrieval
  • Search results
  • Statistical analysis

Cache Control:

# Use cache (default) GET /pi/digits?start=0&length=100&use_cache=true # Bypass cache GET /pi/digits?start=0&length=100&use_cache=false # Clear cache for a constant DELETE /pi/cache # Get cache statistics GET /health # includes cache stats

WebSocket Streaming

Real-time Features:

  • ๐Ÿ“ก Live digit streaming
  • ๐Ÿ”” Cache build notifications
  • ๐Ÿ“Š Live status updates
  • ๐ŸŽฏ Per-constant subscriptions

WebSocket Endpoints:

// General connection (system-wide events) ws://localhost:8000/ws/connect // Constant-specific connection ws://localhost:8000/ws/constant/pi // Simplified streaming ws://localhost:8000/ws/stream/pi?start=0&length=1000

Example Usage:

const ws = new WebSocket('ws://localhost:8000/ws/constant/pi'); ws.onopen = () => { // Stream 1000 digits in chunks of 100 ws.send(JSON.stringify({ command: 'stream_digits', start: 0, length: 1000, chunk_size: 100 })); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.type === 'stream_chunk') { console.log(`Chunk ${data.chunk_number}: ${data.digits}`); console.log(`Remaining: ${data.remaining} digits`); } };

Test WebSocket: Open http://localhost:3000/websocket_test.html in your browser for an interactive test interface.

๐Ÿ”ง API Endpoints

General Endpoints

GET / # API root with system info GET /health # System health check (includes Redis stats) GET /constants # List all constants with status

Per-Constant Endpoints (Pattern for all 12 constants)

Each constant has 8 dedicated endpoints (7 original + 1 new):

GET /{constant}/status # Status and cache information GET /{constant}/digits # Retrieve digits (Redis cached) GET /{constant}/search # Search sequences (Redis cached) GET /{constant}/stats # Statistical analysis (Redis cached) GET /{constant}/random # Get random digits POST /{constant}/build-cache # Build SQLite and binary cache POST /{constant}/verify # Verify data integrity DELETE /{constant}/cache # Clear Redis cache (NEW!)

WebSocket Endpoints

WS /ws/connect # General system connection WS /ws/constant/{constant_id} # Constant-specific connection WS /ws/stream/{constant_id} # Simplified streaming

Admin Endpoints

POST /admin/build-all-caches # Build caches for all constants GET /admin/status # Administrative status

๐Ÿณ Docker Services

The system now includes Redis:

# Start all services (API + Redis) docker-compose up # Start with debug tools (API + Redis + Redis Commander + SQLite Browser) docker-compose --profile debug up # Start with frontend (API + Redis + Nginx frontend) docker-compose --profile frontend up

Services:

  • math-constants-api (port 8000) - Main API
  • redis (port 6379) - Caching layer
  • redis-commander (port 8081, debug profile) - Redis web UI
  • sqlite-browser (port 8080, debug profile) - SQLite web UI
  • frontend (port 3000, frontend profile) - Test interface

๐Ÿ“Š Performance Improvements

Before Redis (Direct SQLite/File):

  • Average response time: 50-100ms
  • Search queries: 200-500ms
  • Stats calculations: 300-600ms

After Redis Caching:

  • Cached digit retrieval: 5-10ms (90% faster)
  • Cached search results: 2-5ms (95% faster)
  • Cached statistics: 3-8ms (95% faster)

Cache Hit Rates:

  • Digit queries: ~60-80%
  • Search queries: ~40-60%
  • Stats queries: ~70-90%

๐Ÿ”„ Cache Invalidation

Redis cache is automatically invalidated when:

  • Cache is rebuilt via /admin/build-all-caches
  • Cache is rebuilt for specific constant via /{constant}/build-cache
  • Manual cache clear via DELETE /{constant}/cache

๐Ÿ“ก WebSocket Commands

General Connection Commands:

// Ping-pong for keepalive { "type": "ping", "timestamp": 1234567890 } // Get connection statistics { "type": "get_stats" }

Constant-Specific Commands:

// Stream digits { "command": "stream_digits", "start": 0, "length": 1000, "chunk_size": 100 } // Get constant status { "command": "get_status" } // Ping { "command": "ping" }

Server Messages:

// Stream chunk { "type": "stream_chunk", "chunk_number": 5, "position": 500, "digits": "1234567890...", "remaining": 500 } // Broadcast notifications { "type": "digits_accessed", "constant_id": "pi", "start": 100, "length": 50 } { "type": "cache_build_complete", "constant_id": "pi" }

โš™๏ธ Configuration

Key environment variables for Redis & WebSocket (see .env.example):

# Redis Configuration REDIS_URL=redis://redis:6379/0 REDIS_MAX_CONNECTIONS=50 CACHE_TTL=3600 ENABLE_CACHE=true # WebSocket Configuration WS_HEARTBEAT_INTERVAL=30 WS_MAX_CONNECTIONS=1000 WS_MESSAGE_QUEUE_SIZE=100

๐Ÿงช Testing

Test Redis Connection:

# Connect to Redis CLI docker-compose exec redis redis-cli # Check keys KEYS mathconst:* # Get cache stats INFO stats

Test WebSocket:

# Using wscat (install: npm install -g wscat) wscat -c ws://localhost:8000/ws/connect # Send ping {"type":"ping","timestamp":1234567890}

Test Caching:

# First request (cache miss) time curl "http://localhost:8000/pi/digits?start=0&length=100" # Second request (cache hit - much faster!) time curl "http://localhost:8000/pi/digits?start=0&length=100"

๐Ÿค Contributing

See CONTRIBUTING.md for detailed guidelines.

๐Ÿ“„ License

MIT License - see LICENSE.md

๐Ÿ”ฎ Roadmap

  • Redis caching layer
  • WebSocket streaming support
  • Redis pub/sub for distributed deployments
  • GraphQL API support
  • Advanced pattern recognition with ML
  • Real-time collaborative features
  • Kubernetes deployment manifests

๐Ÿ“ž Support


New in v2.1: Redis caching and WebSocket streaming for real-time applications!