샤딩 3

[개발] 샤딩이란 것을 해보자! (3)

샤딩 1 샤딩 2 조건이 포함된 조회 쿼리 특정 이름이 들어간 유저를 찾고싶다고 하자. # datasource.py class DataSource: ... def select_by_name_exact(self, name): ix = insert_route(name) query = f"SELECT * FROM user WHERE name = '{name}'" cursor = self.cursors[ix] cursor.execute(query) result = cursor.fetchall() return result 삽입과 유사하게 사용하면 된다. 범위 조건이 포함된 조회 쿼리 이제 살짝 복잡해지기 시작한다. aa ~ bb를 찾는다고하면 1번 인스턴스에서 끝나지만 aa ~ zz를 찾는다면 1~4번 인스턴스를..

[개발] 샤딩이란 것을 해보자! (2)

지난시간에 이어 샤딩을 사용해보자. 라우터 생성 우리는 이름을 기준으로 라우팅을 할 것이다. 영어 소문자만 들어온다고 가정하자. 데이터베이스가 4개이니까 a~g로 시작하는건 1번, h~n은 2번, o~u는 3번, v~z는 4번 데이터베이스에 넣도록 하자. # router.py def insert_route(name: str): assert len(name) > 0 ch = name[0] return (ord(ch) - ord('a')) // 7 정말 간단하다. 위 라우터는 삽입할 때 사용하는 라우터이다. 삽입쿼리 추가 # datasource.py from router import insert_route class DataSource: ... def insert(self, name: str, age: in..

[개발] 샤딩이란 것을 해보자! (1)

데이터베이스 샤딩(Sharding)이란 동일한 스키마의 데이터베이스를 여러 인스턴스에 나누어 저장하는 것을 말한다. 이중화와는 다른 개념이다. 이중화는 하나의 데이터를 여러 곳에 저장하지만 샤딩은 하나의 데이터를 하나의 인스턴스에 골라서 저장을 한다. 보통은 잘 사용하지 않고 데이터가 억수로 많은 경우에 사용한다. 샤딩을 사용하면 데이터가 많은 경우에 단일 인스턴스보다 성능이 빨라지고 단일 인스턴스에 저장할 수 없는 만큼의 데이터를 가지고 있다면 샤딩을 사용해야만 할 것이다. 샤딩에는 여러 종류가 있지만 여기에서는 Range Sharding이란 것을 사용해 볼 예정이다. Range Sharding 유저테이블을 샤딩한다고 생각하자. 인스턴스를 4개(개발자가 정하면 된다.) 두고 1~3월 생일은 1번, 4~..