도대체 왜 이런 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] 의상 코디 정보
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바