Source

yummy / DESIGN

Yummy Design
============

What we want:
 - user auth
 - per user tags
 - global tags
 - per user timeline
 - global timeline
 - tag popularity ( count )
 - url popularity ( count )
 - shared with how many ( count )
Treat the URL itself as the hash
When a new URL is inserted it should:

Append to url:<url>
  { timestamp, user, tags }
Entry into user:urls ZSET sorted by timestamp
Entry into tag:<tag> for every <tag> ZSET sorted by tags

Each tag:
Entry into user:tags SET
Entry into global:tags

tag:<tag> is a SET
So to find intersection of tags, fetch SINTER tag:<tag1> tag:<tag2> which will get URLs
now fetch each URLs data using MGET