wip library to store cold objects in s3, warm objects on disk, and hot objects in memory
nodejs
typescript
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>© 2024 Tiered Storage Library. Built with ❤️ for performance.</p>
101 </footer>
102
103 <script src="script.js"></script>
104</body>
105</html>