# When to Use Storage and Realtime — Supabase

Source: https://www.skillbyai.com/en/supabase/s-choose

> Fit, limits and alternatives.

## Pick the lightest tool

Store large binary files in Storage and keep only their paths in tables. Use Postgres Changes for modest volumes of row-level updates such as dashboards or task boards; for high-traffic feeds, Broadcast (optionally sent from the database) scales better because every Postgres change must be checked against RLS for each subscriber. Simple refresh-on-focus or polling is often enough when updates are rare. Connection and message limits depend on your plan, so check the docs and pricing page.

## A decision sketch

Rules of thumb.

```bash
# images, PDFs, video                      -> Storage (save the path in a table)
# few users watching row edits             -> Realtime Postgres Changes
# chat, cursors, typing, high message rate  -> Realtime Broadcast
# who is online in a room                   -> Realtime Presence
# data changes rarely                       -> refetch on focus or poll
```

## Never store files as base64 in rows

Large blobs bloat the database, backups and every query; Storage and a CDN serve them far more cheaply.

**Quiz:** Where should a user-uploaded video be kept?

- [x] In Storage, with its path saved in a table
- [ ] As base64 in a text column
- [ ] In a Realtime channel
- [ ] In an environment variable

*Answer:* In Storage, with its path saved in a table. Keep blobs out of the database.
