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
···
compression: true,
})
-
// write cascades down
-
await storage.set('user:123', { name: 'Alice' })
-
// read bubbles up
-
const user = await storage.get('user:123')
-
// see where it came from
-
const result = await storage.getWithMetadata('user:123')
-
console.log(result.source) // 'hot', 'warm', or 'cold'
-
// nuke by prefix
-
await storage.invalidate('user:')
```
## How it works
···
getStats(): Promise<TierStats>
clear(): Promise<void>
}
-
```
-
-
## Skipping tiers
-
-
Don't want big videos in memory? Skip hot:
-
-
```typescript
-
await storage.set('video.mp4', data, { skipTiers: ['hot'] })
```
## Running the demo
···
compression: true,
})
+
// critical file: keep in memory for instant serving
+
await storage.set('site:abc/index.html', indexHtml)
+
// big files: skip hot, let them live in warm + cold
+
await storage.set('site:abc/video.mp4', videoData, { skipTiers: ['hot'] })
+
await storage.set('site:abc/hero.png', imageData, { skipTiers: ['hot'] })
+
// on read, bubbles up from wherever it lives
+
const result = await storage.getWithMetadata('site:abc/index.html')
+
console.log(result.source) // 'hot' - served from memory
+
const video = await storage.getWithMetadata('site:abc/video.mp4')
+
console.log(video.source) // 'warm' - served from disk, never touches memory
+
+
// nuke entire site
+
await storage.invalidate('site:abc/')
```
+
+
Hot tier stays small and fast. Warm tier has everything. Cold tier is the source of truth.
## How it works
···
getStats(): Promise<TierStats>
clear(): Promise<void>
}
```
## Running the demo