관계형 데이터베이스에서 사용자 데이터 트리 추출
문제
관계형 데이터베이스는 훌륭합니다. 스키마를 정규화하면 문서 지향 NoSQL 솔루션보다 저렴하고 빠르게 애플리케이션에 사용자 데이터를 저장할 수 있습니다. 그러나 행 소유권을 확인하고 추출해야 하는 경우 복잡하고 심층적인 스키마는 정말 골칫거리가 될 수 있습니다.
데이터베이스에서 일부 사용자와 그에 속한 모든 레코드(예: 주소, 주문, 설명 등)를 추출하려는 몇 가지 시나리오가 있습니다.
백업용. 비활성 사용자 데이터를 저렴한 장기 스토리지 및 무료 데이터베이스 공간으로 이동합니다.
법적 목적을 위해. 사용자의 현재 상태를 확보해야 하는 경우.
더 나은 로드 밸런싱을 위해. 데이터베이스 샤드 간에 사용자를 마이그레이션합니다.
판매용. 응용 프로그램에서 역할 모델 데모 사용자를 준비하려면 그의 데이터를 저장하고 응용 프로그램의 데모 인스턴스에 로드하십시오.
디버깅을 위해. 애플리케이션이 오작동하고 사용자 데이터를 격리된 방식으로 분석하고 프로덕션 시스템에서 로컬 시스템으로 복제하려는 경우.
해결책
저는 큰 스키마로 많은 작업을 합니다. 수백 개의 데이터베이스, 각 데이터베이스의 수백 개의 테이블, 깊은 관계 체인, 하루에 최대 몇 번의 스키마 변경. 그래서 관계형 데이터 추출을 자동화하는 도구를 만들었습니다: UpRooted .
목표는 간단했습니다.
완전 자동화. 나는 싱글
JOIN
을 쓰고 싶지 않습니다. 최적. 관련 테이블의 데이터는 데이터베이스 관점에서 가장 효율적인 방법으로 도달해야 합니다.
똑똑한. 제약 조건을 위반하지 않고
FOREIGN KEY
나중에 다른 데이터베이스에 로드할 수 있도록 데이터를 처리해야 합니다. 예시
MySQL 데이터베이스가 있고 관련 테이블의 모든 데이터와 함께
users
= 1인 id
테이블에서 사용자를 추출해야 한다고 가정합니다.UpRooted 사용을 시작하는 가장 쉬운 방법은 Docker 컨테이너를 사용하는 것입니다.
예를 들어 다음과 같이 스크립트 및 출력 파일을 위한 작업 디렉토리를 생성합니다.
mkdir /Users/me/uprooted
Docker를 실행하고 이 디렉터리를 마운트합니다.
docker run --interactive --tty --volume /Users/me/uprooted:/home/uprooted bbkr2/uprooted:latest
UpRooted은 Raku에 작성되었으므로 이 디렉토리에 다음 내용으로
example.raku
파일을 생성합니다(연결 자격 증명을 조정해야 함을 기억하십시오).use DBIish;
use UpRooted::Schema::MySQL;
use UpRooted::Tree;
use UpRooted::Reader::MySQL;
use UpRooted::Writer::MySQLFile;
my $connection = DBIish.connect(
'mysql',
host => '***', port => 3306, user => '***', password => '***', database => '***'
);
my $schema = UpRooted::Schema::MySQL.new( :$connection );
my $tree = UpRooted::Tree.new( root-table => $schema.table( 'users' ) );
my $reader = UpRooted::Reader::MySQL.new( :$connection, :$tree );
my $writer = UpRooted::Writer::MySQLFile.new;
$writer.write( $reader, id => 1 );
컨테이너 내에서 스크립트를 실행합니다.
raku example.raku
사용자는
out.sql
디렉토리의 /Users/me/uprooted
파일에 저장됩니다.더 많은 정보
UpRooted::
네임스페이스의 각 모듈에 대한 설명, 고급 사용 사례 및 잠재적인 스키마 설계 문제에 대해서는 UpRooted README를 읽을 것을 강력히 권장합니다.버그를 발견했거나 몇 가지 제안 사항이 있는 경우 GitHub에서 문제를 자유롭게 생성하세요.
행복한 데이터 추출 :)
Reference
이 문제에 관하여(관계형 데이터베이스에서 사용자 데이터 트리 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bbkr/extracting-user-data-tree-from-relational-databases-1min텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)