Skip to content

system-design-colin/tiny-dropbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Tiny Dropbox

Overview

This project is a simplified system design implementation of a file storage and synchronization system inspired by Dropbox. It focuses on how files are stored, versioned, and synchronized across multiple clients in a distributed environment.

The goal is to understand how reliable file sync systems are built, including versioning, conflict handling, and efficient data transfer.


Problem Statement

File synchronization systems must keep files consistent across multiple devices while handling concurrent edits, network interruptions, and partial uploads. These systems must efficiently detect changes, transfer only what is needed, and ensure data integrity across distributed clients.

This project explores how to design a simplified file storage and sync system that supports upload, download, and multi-device synchronization.


Learning Objectives

  • Understand file synchronization systems
  • Learn how change detection works (hashing / diffing concepts)
  • Explore versioning and conflict resolution strategies
  • Understand chunk-based file transfer concepts
  • Learn consistency challenges in distributed storage systems
  • Explore tradeoffs between storage efficiency and simplicity
  • Build intuition for client-server sync architectures

Core Features

File Storage

  • Upload files from client to server
  • Download files from storage system
  • Store file metadata and versions

Synchronization

  • Sync files across multiple devices
  • Detect file changes (hash-based or timestamp-based)
  • Resolve conflicts (last-write-wins or versioning conceptually)

Versioning

  • Maintain file history
  • Restore previous versions (conceptual or implemented)
  • Track file updates over time

Transfer Optimization

  • Chunked uploads/downloads (conceptual)
  • Delta sync (only changed parts)
  • Reduce redundant data transfer

Architecture (Conceptual)

Client Agent

  • Watches local file system for changes
  • Uploads updates to server
  • Downloads remote changes

Sync Service

  • Coordinates file versions across clients
  • Detects conflicts and resolves versions
  • Maintains metadata about files

Storage Layer

  • Stores file blobs
  • Maintains version history
  • Ensures durability and integrity

Metadata Store

  • Tracks file ownership and versions
  • Maps files to storage locations
  • Supports fast lookup for sync operations

Engineering Considerations

  • Conflict resolution in concurrent edits
  • Efficient change detection mechanisms
  • Network reliability and partial uploads
  • Tradeoffs between storage cost and version history
  • Consistency across multiple devices
  • Scaling metadata-heavy systems
  • Handling large file transfers efficiently

Integration Ideas

  • Distributed Systems (coordination and consistency challenges)
  • Message Queue (sync event propagation)
  • Caching system (frequent file metadata access)
  • Load Testing (sync performance under concurrency)
  • Backend services (file APIs and storage layer)

Status

🟡 Planned

About

File storage and sync system exploring distributed file consistency and versioning.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors