도대체 왜 이런 DB 샤딩 방법을 쓰는 건가?

2023. 6. 23. 22:49·백엔드

라이브 서비스 중인 코드중 DB 샤딩을 하는 코드의 일부분을 가져와 보았습니다.

<?php

$serverList = [
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
    "ko-live.aws.rds.com:3306",
];

$serverListCount = count($serverList);

// userNo 숫자 : 18899626759716424
// userNo UUID 형식 : 1b2a6d9aeddd4dd1a245c33c643ccc31
function getServer($userNo)
{
    global $serverListCount;
    global $serverList;

    $s = $serverList[0];

    if (strpos($s, 'ko') !== false) {
        if (is_numeric($userNo)) {
            $retUserNoRe = bcmod($userNo, $serverListCount);
            return $retUserNoRe;
        }

        return 0;
    }

    $lastChar = substr($userNo, -1);
    if (is_numeric($lastChar)) {
        $retUserNoRe = bcmod($lastChar, $serverListCount);
        return $retUserNoRe;
    }

    $userNo = ord($lastChar);
    $userNo = $userNo % $serverListCount;
    $retUserNoRe = bcmod($userNo, $serverListCount);

    return $retUserNoRe;
}

 

1. 환경이 'ko' 인 경우

- userNo 가 문자열이면 무조건 0번

- 숫자형이면 userId 로 bcmod 적용

 

2. 환경이 'ko' 가 아닌경우 userNo 의 제일 마지막 char 를 이용

- 숫자이면 마지막 char 로 bcmod 적용

- 숫자가 아니면 마지막 char 를 ord 를 이용하여 아스키 코드로 변환하여 mod 한 후 다시 bcmod 를 적용

 

bcmod() 함수

bcmod(string num, string modulus);

num 를 modulus 로 나눈 후 나머지 값을 문자열로 반환하는 함수입니다.

 

도대체 무엇을 하려고 한 것인가?

'백엔드' 카테고리의 다른 글

mysql 8.0 password reset  (0) 2023.06.27
Http URL  (0) 2023.03.21
프로젝트 탄생 25주년을 기념하여 curl 8.0 출시  (0) 2023.03.21
OAuth2  (0) 2023.03.21
What is Redis?  (0) 2023.03.21
'백엔드' 카테고리의 다른 글
  • mysql 8.0 password reset
  • Http URL
  • 프로젝트 탄생 25주년을 기념하여 curl 8.0 출시
  • OAuth2
somoly
somoly
About me.
  • somoly
    somoly.tistory.com
    somoly
  • 전체
    오늘
    어제
    • 전체 (55)
      • SpringBoot (8)
      • Kotlin (5)
      • Javascript (4)
      • 백엔드 (6)
      • Linux (25)
      • Windows (1)
      • IT (2)
      • FF14 (1)
      • 애니 (1)
      • Figure (1)
      • 회사생활 (1)
  • 블로그 메뉴

    • HOME
    • TAGS
    • MEDIA
    • LOCATION
    • GUESTBOOK
    • ADMIN
    • WRITE
  • 링크

    • [FF14] 5.0 (71-80) 제작 레벨링 매크로
    • [FF14] 갈론드벨
    • [FF14] FFLogs
    • [FF14] Ariyala 장비 시뮬레이터
    • [FF14] 낚시 도우미
    • [FF14] 인테리어 정보
    • [FF14] 의상 코디 정보
  • 공지사항

  • 인기 글

  • 태그

    versioncomapre
    exchage method
    string methods
    jvminline
    P2P
    VirtualBox
    ubuntu
    77인치
    최후의 재림
    dynamodb local
    부팅
    30일전
    피규어
    83인치
    리눅스
    javascript
    우분투
    bcmod
    interactive table
    springboot
    accesskey
    설치
    Spring
    동영상
    utf-8
    tabulator
    종료
    HTTP
    linux
    Kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
somoly
도대체 왜 이런 DB 샤딩 방법을 쓰는 건가?
상단으로

티스토리툴바