Bird
Raised Fist0
Supabasecloud~5 mins

Caching strategies in Supabase - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Caching strategies
O(n)
Understanding Time Complexity

When using caching with Supabase, we want to know how the number of data fetches changes as requests grow.

We ask: How does caching affect the number of times we call the database?

Scenario Under Consideration

Analyze the time complexity of fetching user profiles with caching.


// Check if user profile is in cache
const cachedProfile = cache.get(userId);
if (cachedProfile) {
  return cachedProfile; // Use cached data
}
// If not cached, fetch from Supabase
const { data, error } = await supabase
  .from('profiles')
  .select('*')
  .eq('id', userId)
  .single();
cache.set(userId, data); // Store in cache
return data;
    

This code tries to get a user profile from cache first, then fetches from Supabase if missing, and stores it in cache.

Identify Repeating Operations

Look at what happens when many user profiles are requested.

  • Primary operation: Database fetch calls to Supabase when cache misses occur.
  • How many times: Once per unique user profile not found in cache.
How Execution Grows With Input

As more unique user profiles are requested, the number of database calls grows with the number of misses.

Input Size (n)Approx. Api Calls/Operations
10Up to 10 database calls if none cached
100Up to 100 database calls if none cached
1000Up to 1000 database calls if none cached

Pattern observation: Without cache hits, calls grow linearly with unique requests; with cache hits, calls reduce greatly.

Final Time Complexity

Time Complexity: O(n)

This means the number of database calls grows directly with the number of unique user profiles requested when cache misses happen.

Common Mistake

[X] Wrong: "Caching makes the number of database calls constant no matter how many users we request."

[OK] Correct: Cache only helps if data is already stored; new unique requests still cause database calls.

Interview Connect

Understanding how caching affects database calls shows you can think about efficiency and user experience in real apps.

Self-Check

"What if we changed the cache to expire every minute? How would the time complexity change when many requests come in quickly?"

Practice

(1/5)
1. What is the main purpose of caching in Supabase applications?
easy
A. To store data temporarily and speed up data access
B. To permanently save all user data
C. To delete old data from the database
D. To encrypt data for security

Solution

  1. Step 1: Understand caching basics

    Caching temporarily stores data to avoid repeated database calls.
  2. Step 2: Identify caching purpose in Supabase

    It speeds up app performance by quickly providing stored data.
  3. Final Answer:

    To store data temporarily and speed up data access -> Option A
  4. Quick Check:

    Caching = Temporary storage for speed [OK]
Hint: Caching means temporary storage to speed up access [OK]
Common Mistakes:
  • Thinking caching permanently saves data
  • Confusing caching with encryption
  • Believing caching deletes data
2. Which of the following is the correct way to set a cache TTL (time-to-live) in Supabase client code?
easy
A. cache.set('key', value, { ttl: 300 })
B. cache.set('key', value, ttl=300)
C. cache.set('key', value, timeout: 300)
D. cache.set('key', value, expire: 300)

Solution

  1. Step 1: Review Supabase cache TTL syntax

    Supabase uses an options object with a ttl property to set time-to-live.
  2. Step 2: Match correct syntax

    cache.set('key', value, { ttl: 300 }) uses { ttl: 300 } which is the correct way to specify TTL in seconds.
  3. Final Answer:

    cache.set('key', value, { ttl: 300 }) -> Option A
  4. Quick Check:

    TTL set with { ttl: seconds } object [OK]
Hint: TTL uses { ttl: seconds } object in cache.set [OK]
Common Mistakes:
  • Using ttl=300 instead of { ttl: 300 }
  • Using wrong property names like timeout or expire
  • Passing TTL as a separate argument without object
3. Given this Supabase cache check code:
const cachedData = cache.get('user_123');
if (cachedData) {
  console.log('Cache hit:', cachedData);
} else {
  const data = await supabase.from('users').select('*').eq('id', 123);
  cache.set('user_123', data, { ttl: 600 });
  console.log('Cache miss, fetched:', data);
}

What will be logged if the cache already has data for 'user_123'?
medium
A. Cache miss, fetched: [new data]
B. Cache hit: [cached data]
C. Error: cache.get is not a function
D. No output

Solution

  1. Step 1: Check cache.get return value

    If cache has data for 'user_123', cachedData is truthy.
  2. Step 2: Follow code logic on cache hit

    Code logs 'Cache hit:' plus cachedData without fetching from database.
  3. Final Answer:

    Cache hit: [cached data] -> Option B
  4. Quick Check:

    Cache hit logs cached data [OK]
Hint: Cache hit means cachedData exists, logs cache hit [OK]
Common Mistakes:
  • Assuming it fetches from database even if cache exists
  • Confusing cache miss and hit outputs
  • Expecting errors when cache is valid
4. You wrote this code to cache user data but it always fetches from the database:
const cached = cache.get('user_1');
if (!cached) {
  const data = await supabase.from('users').select('*').eq('id', 1);
  cache.set('user_1', data, { ttl: 300 });
}
console.log(cached);

What is the main issue causing the cache miss?
medium
A. TTL is too short to keep data
B. cache.get syntax is incorrect
C. You never update the cached variable after setting cache
D. Database query is wrong

Solution

  1. Step 1: Analyze variable assignment

    Variable 'cached' is assigned once before cache.set, so it stays null.
  2. Step 2: Understand cache update logic

    After setting cache, 'cached' is not updated to new data, so console.log shows null.
  3. Final Answer:

    You never update the cached variable after setting cache -> Option C
  4. Quick Check:

    cached variable must update after cache.set [OK]
Hint: Update cached variable after cache.set to avoid misses [OK]
Common Mistakes:
  • Assuming cache.set updates cached variable automatically
  • Blaming TTL without checking variable assignment
  • Thinking cache.get syntax is wrong without error
5. You want to optimize a Supabase app by caching user profile data but ensure updates are reflected quickly. Which caching strategy is best?
hard
A. Cache data without TTL and manually clear cache daily
B. Use very long TTL (e.g., 24 hours) to minimize database calls
C. Never cache user profiles to avoid stale data
D. Use short TTL (e.g., 60 seconds) and refresh cache after updates

Solution

  1. Step 1: Consider update frequency and freshness

    User profiles may change, so cache must refresh often to avoid stale data.
  2. Step 2: Choose caching strategy balancing speed and freshness

    Short TTL with cache refresh after updates keeps data fresh and speeds access.
  3. Final Answer:

    Use short TTL (e.g., 60 seconds) and refresh cache after updates -> Option D
  4. Quick Check:

    Short TTL + refresh = fresh and fast cache [OK]
Hint: Short TTL plus refresh keeps cache fresh and fast [OK]
Common Mistakes:
  • Using long TTL causing stale data
  • Avoiding cache entirely losing speed benefits
  • Not refreshing cache after updates
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard