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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바