Planet Scale

dorazi·2022년 6월 18일
post-thumbnail

Planet Scale 이란

Plant Scale의 공식문서에 따르면 MySQL과 호환되는 serverless 데이터베이스 플랫폼이라고 한다.
데이터베이스 플랫폼이라는 건 데이터베이스를 제공해준다는 의미고 serverless는 정말 서버가 없다는 것이 아니라 서버를 우리가 유지할 필요가 없다는 뜻이다.

MySQL과 호환된다는 것은 MySQL을 사용하는 것이 아닌 MySQL과 호환되는 다른 어떤 것을 사용해서 그런건데 다른 어떤 것은 바로 Vitess다

Vitess 란

Vitess는 문서에 따르면 가장 scaling 기능이 뛰어난 오픈소스 데이터베이스고 구글이 유튜브를 scale하기 위해 만든 것이라고 한다.

위 말이 맞다면 위 이유 하나만으로 한번 사용해볼만한 가치가 있다고 생각한다.

이유는 scaling이 가장 까다로운 부분이기 때문이다.

하나의 SQL 데이터베이스, 서버만 가지고 있어도 엄청 많은 일을 할 수 있지만 매초 수백만 개의 쿼리를 처리하고 수십만 개의 연결이 들어어고, 수만 개의 노드가 필요하다면 정말 복잡해진다. 데이터베이스에 horizontal scaling도 해야 하고 sharding도 해야 하고 데이터베이스가 죽지 않도록 유지하고 조정해야하는 등 많은 노력이 필요한대 Vitess는 위와 같은 노력을 해결하기 위해 탄생했다고 한다.

Planet Scale 특징

CLI

Plant Scale은 아주 훌륭한 CLI가 있는데 마치 github을 사용하는 것 처럼 사용할 수 있다. 즉 git을 쓰는 것처럼 데이터베이스를 다룰 수 있다는 점이다.

관계

보통 관계형 데이터베이스 환경에서는 연관관계를 위해 foreign key를 생성하고자 할 때 연관관계를 맺고자 하는 테이블에 해당 키가 있어야한다.
예를 들어

USER 
id: 1
username: henry

Comments
id: 1
text: hello!
user: 5 // foreign key

유저테이블과 코멘트테이블애 관계를 맺고 위와 같이 유저테이블에 아이디 5가 없는 상태에서 코멘트테이블에서 foreign key를 5번으로 걸면 작동에 문제가 발생한다.

하지만 Planet Scale에서는 아무 문제없이 작동되는데 이유는 MySQLVitess의 차이점 때문이다.

PlantetScale이 데이터베이스로 사용하는 Vitess는 Scalability에 특화되어있다. 즉 Vitess는 데이터베이스를 잘게 쪼개서 여러 서버에 분산시키는 데에 특화되어 있다는 것이다.

때문에 Vitess는 위에서 코맨트를 생성하기 전에 유저가 존재하는지 확인하지 않는다.

단점 및 보완법

위처럼 Vitess는 foreign key 제약을 지원하지 않기 때문에 테이블간에 관계가 있다면 개발자가 생성에 주의를 해야한다는 단점이 있지만 해당 단점은 Prisma 같은 ORM의 도음으로 보완할 수 있다.

예시로 Prisma에서 client에 previewFeatures = ['referentialIntegrity'] 옵션을 준다 다른 객체에 연결될 때 그 객체가 존재하길 바란다는 옵션이다.

그 다음 db에 referentialIntegrityprisma가 해줄거라고 명시해준다.

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["referentialIntegrity"]
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
  referentialIntegrity = "prisma"
}
profile
프론트엔드 개발자

0개의 댓글