[DB] Mirror vs Stripe vs Shard

공부한 내용 정리 w/GPT

Posted by Mihyun on April 23, 2023
  • 샤드, 스트라이프, 미러는 모두 데이터를 처리하기 위한 다른 방법입니다.
  • 우선 “mirror”와 “stripe”는 두 가지 서로 다른 방법으로 여러 개의 하드 드라이브를 구성하는 것을 말합니다.

Mirror (RAID-1)

  • 두 개 이상의 하드 드라이브를 사용하여 하나의 드라이브에 저장된 데이터의 정확한 복사본을 만드는 것을 의미합니다.
  • 이것은 백업 및 데이터 중복성 목적으로 자주 사용되며, 하나의 드라이브가 실패해도 데이터는 다른 드라이브에 여전히 사용 가능합니다.

Stripe (RAID-0)

  • 데이터를 두 개 이상의 하드 드라이브에 분할하는 것을 의미합니다.
  • 이 방법은 데이터 액세스 속도를 높이기 위해 사용됩니다. 여러 드라이브가 함께 데이터를 읽거나 쓰므로 데이터 액세스 속도를 높일 수 있습니다.
  • 그러나 하나의 드라이브가 실패하면 스트라이프에 저장된 모든 데이터가 손실될 수 있습니다.

Shard

  • 데이터베이스에서 사용되는 용어로, 대량의 데이터를 처리하기 위해 데이터를 논리적 또는 물리적으로 나누는 것을 의미합니다. 여러 대의 컴퓨터 또는 서버에 데이터를 분산하여 저장하고 처리하는 방법 중 하나입니다.
  • 샤드는 데이터 처리 속도와 확장성을 높이기 위해 데이터를 분할하고 분산 저장하는 방법입니다.
  • 샤드는 스트라이프와 다르게 데이터를 분할하는 것이 목적이며, 미러와는 다르게 데이터의 백업이나 중복 복사본을 만드는 것이 아닙니다. 대신, 대량의 데이터를 여러 개의 작은 조각으로 분할하여 처리하고, 분산된 데이터를 병렬로 처리함으로써 처리 속도와 성능을 높입니다.
  • 예를 들어, 온라인 상점에서 대량의 주문 정보를 처리해야 할 경우, 샤딩을 사용하여 주문 정보를 지역, 제품, 주문 날짜 등 기준에 따라 분할할 수 있습니다. 이렇게 하면 각각의 샤드는 분할된 데이터를 담당하며, 동시에 처리할 수 있어 전체 시스템의 처리 속도와 확장성을 높일 수 있습니다.

시나리오

  1. 저장 시나리오: 대량의 데이터베이스를 처리해야 하는 온라인 쇼핑몰
    • 미러: 고객, 상품, 주문 정보를 각각 다른 하드 드라이브에 두 번 저장하여 데이터 손실을 방지합니다.
    • 스트라이프: 대량의 주문 정보를 저장하는 데 사용됩니다. 데이터를 여러 개의 하드 드라이브에 분산하여 저장하고, 모든 드라이브에서 데이터를 병렬로 읽어오면 처리 속도를 높일 수 있습니다.
    • 샤드: 고객 정보, 상품 정보, 주문 정보 등 데이터를 지역, 카테고리, 날짜 등 기준에 따라 분할하여 여러 대의 서버에 저장하고, 동시에 처리합니다. 이렇게 하면 분할된 데이터를 병렬로 처리함으로써 처리 속도를 높일 수 있습니다.
  2. 저장 시나리오: 온라인 게임의 사용자 데이터 처리
    • 미러: 사용자 데이터를 두 개 이상의 하드 드라이브에 복제하여 데이터 손실을 방지합니다.
    • 스트라이프: 게임 클라이언트에서 전송된 데이터를 여러 개의 하드 드라이브에 분산 저장하고, 모든 드라이브에서 데이터를 병렬로 읽어오면 처리 속도를 높일 수 있습니다.
    • 샤드: 게임 플레이 기록, 게임 아이템, 게임 내 통화 등 데이터를 특정 기준에 따라 분할하여 여러 대의 서버에 저장하고, 동시에 처리합니다. 이렇게 하면 분할된 데이터를 병렬로 처리함으로써 게임 성능을 높일 수 있습니다.

내가 이해한 내용

  • stripe는 n대의 db로 구성된 cluster에서, 해당 데이터가 n대 중 어딘가 1대에 저장되는 것을 뜻함. db selector가 데이터를 잘 찾아주기 때문에 사용자는 데이터가 실제로 어떤 컴퓨터에 저장되어있는지 알 필요가 없음
  • shard는 테이블에 따라서 각각 다른 db에 저장하는 것. 예를 들어 쇼핑에서 한국 사용자의 주문은 한국 db에, 미국 사용자의 주문은 미국 db에 저장하는 것을 뜻함