call(back)

Design a Marketplace Catalog System

Design the catalog for a large marketplace: hundreds of millions of items across thousands of categories, supplied by many sellers and partners, browsed and searched by shoppers in many locales.

The catalog must model categories, per-category attributes and product variants (one shirt, many sizes and colours); ingest items through APIs and bulk feeds; keep versions; detect duplicates of the same product from different sellers; and moderate what is published. Search and browse are served from an index, not from the source of truth.

Cover: the data model; read and write APIs; ingestion, validation, versioning, deduplication and moderation; how the search and browse index is built and kept up to date, including partial updates; localization; caching; consistency between the source of truth and the index; schema evolution; multi-tenant isolation; and backfill and reprocessing.

Hints

Hint 1

Separate the canonical product (what the thing is) from the offer (who sells it, at what price, with what stock). Deduplication merges products; offers stay per seller. Variants hang off a parent product along declared axes.

Hint 2

Attributes are data, not columns: each category owns a versioned schema of typed attributes, items are validated against it on write, and facets in search come straight from it.

Hint 3

The index is a derived view. Feed it from an outbox or change stream with per-document versions so stale updates are rejected, and make a full rebuild a routine operation — new index, backfill, alias swap.

Asked at