wip library to store cold objects in s3, warm objects on disk, and hot objects in memory
nodejs typescript

last readme update i think

nekomimi.pet 5bc23a4a b4de0bdf

verified
Changed files
+15 -17
+15 -17
README.md
··· 31 31 compression: true, 32 32 }) 33 33 34 - // write cascades down 35 - await storage.set('user:123', { name: 'Alice' }) 34 + // critical file: keep in memory for instant serving 35 + await storage.set('site:abc/index.html', indexHtml) 36 36 37 - // read bubbles up 38 - const user = await storage.get('user:123') 37 + // big files: skip hot, let them live in warm + cold 38 + await storage.set('site:abc/video.mp4', videoData, { skipTiers: ['hot'] }) 39 + await storage.set('site:abc/hero.png', imageData, { skipTiers: ['hot'] }) 39 40 40 - // see where it came from 41 - const result = await storage.getWithMetadata('user:123') 42 - console.log(result.source) // 'hot', 'warm', or 'cold' 41 + // on read, bubbles up from wherever it lives 42 + const result = await storage.getWithMetadata('site:abc/index.html') 43 + console.log(result.source) // 'hot' - served from memory 43 44 44 - // nuke by prefix 45 - await storage.invalidate('user:') 45 + const video = await storage.getWithMetadata('site:abc/video.mp4') 46 + console.log(video.source) // 'warm' - served from disk, never touches memory 47 + 48 + // nuke entire site 49 + await storage.invalidate('site:abc/') 46 50 ``` 51 + 52 + Hot tier stays small and fast. Warm tier has everything. Cold tier is the source of truth. 47 53 48 54 ## How it works 49 55 ··· 163 169 getStats(): Promise<TierStats> 164 170 clear(): Promise<void> 165 171 } 166 - ``` 167 - 168 - ## Skipping tiers 169 - 170 - Don't want big videos in memory? Skip hot: 171 - 172 - ```typescript 173 - await storage.set('video.mp4', data, { skipTiers: ['hot'] }) 174 172 ``` 175 173 176 174 ## Running the demo