wip library to store cold objects in s3, warm objects on disk, and hot objects in memory
nodejs typescript
at main 3.5 kB view raw
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Documentation - Tiered Storage</title> 7 <link rel="stylesheet" href="style.css"> 8</head> 9<body> 10 <header> 11 <nav> 12 <div class="logo">🗄️ TieredCache</div> 13 <ul> 14 <li><a href="index.html">Home</a></li> 15 <li><a href="about.html">About</a></li> 16 <li><a href="docs.html" class="active">Docs</a></li> 17 </ul> 18 </nav> 19 </header> 20 21 <main> 22 <section class="content"> 23 <h1>Quick Start Guide</h1> 24 25 <h2>Installation</h2> 26 <pre><code>npm install tiered-storage 27# or 28bun add tiered-storage</code></pre> 29 30 <h2>Basic Usage</h2> 31 <pre><code>import { TieredStorage, MemoryStorageTier, DiskStorageTier, S3StorageTier } from 'tiered-storage'; 32 33const storage = new TieredStorage({ 34 tiers: { 35 hot: new MemoryStorageTier({ maxSizeBytes: 100 * 1024 * 1024 }), 36 warm: new DiskStorageTier({ directory: './cache' }), 37 cold: new S3StorageTier({ 38 bucket: 'my-bucket', 39 region: 'us-east-1', 40 }), 41 }, 42 compression: true, 43 defaultTTL: 14 * 24 * 60 * 60 * 1000, // 14 days 44}); 45 46// Store data 47await storage.set('user:123', { name: 'Alice' }); 48 49// Retrieve data 50const user = await storage.get('user:123'); 51 52// Invalidate by prefix 53await storage.invalidate('user:');</code></pre> 54 55 <h2>Selective Tier Placement</h2> 56 <p>Control which tiers receive specific files:</p> 57 <pre><code>// Critical file - store in all tiers 58await storage.set('index.html', htmlContent); 59 60// Large file - skip hot tier to save memory 61await storage.set('video.mp4', videoData, { 62 skipTiers: ['hot'] 63});</code></pre> 64 65 <h2>Bootstrap on Startup</h2> 66 <pre><code>// Warm up hot tier from warm tier 67await storage.bootstrapHot(1000); // Load top 1000 items 68 69// Warm up warm tier from cold tier 70await storage.bootstrapWarm({ 71 sinceDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), 72 limit: 10000, 73});</code></pre> 74 75 <h2>Statistics & Monitoring</h2> 76 <pre><code>const stats = await storage.getStats(); 77console.log('Hot tier:', stats.hot); 78console.log('Warm tier:', stats.warm); 79console.log('Cold tier:', stats.cold); 80console.log('Hit rate:', stats.hitRate);</code></pre> 81 82 <h2>API Reference</h2> 83 <ul> 84 <li><code>get(key)</code> - Retrieve data</li> 85 <li><code>getWithMetadata(key)</code> - Retrieve with metadata and source tier</li> 86 <li><code>set(key, data, options)</code> - Store data</li> 87 <li><code>delete(key)</code> - Delete from all tiers</li> 88 <li><code>exists(key)</code> - Check if key exists</li> 89 <li><code>touch(key, ttlMs)</code> - Renew TTL</li> 90 <li><code>invalidate(prefix)</code> - Delete by prefix</li> 91 <li><code>listKeys(prefix)</code> - List keys</li> 92 <li><code>getStats()</code> - Get statistics</li> 93 <li><code>bootstrapHot(limit)</code> - Warm up hot tier</li> 94 <li><code>bootstrapWarm(options)</code> - Warm up warm tier</li> 95 </ul> 96 </section> 97 </main> 98 99 <footer> 100 <p>&copy; 2024 Tiered Storage Library. Built with ❤️ for performance.</p> 101 </footer> 102 103 <script src="script.js"></script> 104</body> 105</html>