2장. 훨씬 더 많은 데이터 가져오기
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이제 여러분과 일렉트릭하모니 팀은 사용자에게 추천을 제공하기 위해 전체 사용자 기반을 더 잘 나타낼 수 있는 방대한 양의 데이터를 가져와야 하는 과제에 직면하게 되었습니다.
1장에서 데이터 수집에 사용한 방법을 시도해 보지만 트랙 데이터 세트의 크기가 10만 행에서 100만 행으로 증가함에 따라 속도가 느려지는 것으로 나타났습니다. 이것은 종종 무서운 '죽음의 쳇바퀴'로 이어져 선택한 데이터베이스가 규모에 맞게 효과적인지 궁금해집니다.
여러분의 우려는 타당합니다. 다음과 같은 팀과 이해 관계자의 주요 질문에 답해야 합니다:
-
비즈니스에서 데이터를 생성하는 속도만큼 빠르게 데이터를 수집할 수 있나요?
-
시스템이 거의 실시간으로 권장 사항을 제공하고 다른 시스템에서 생성되는 데이터를 따라잡을 수 있나요?
-
재해 발생 시 복구에 얼마나 오래 걸리나요?
이 장에서는 이러한 질문에 답하는 데 필요한 대규모 데이터 집합을 수집하는 방법을 보여 드립니다.
트랜잭션과 메모리 관리 등 데이터베이스 관리 시스템 내부에 대한 알기 쉬운 소개로 여정이 시작됩니다. 그런 다음, 1장에서 사용한 LOAD CSV 명령을 최적화하는 방법을 배웁니다. 그런 다음 원하는 프로그래밍 언어로 자동화된 프로그램을 사용해 데이터를 가져오는 보다 프로덕션과 유사한 시나리오로 넘어갑니다. 또한 다양한 잠금 전략을 실험하여 부정적인 영향 없이 병렬 데이터 가져오기가 가능한 시기와 방법을 파악하고 오프라인 데이터 가져오기 전략으로 마무리합니다.
데이터베이스 트랜잭션
트랜잭션은 일련의 작업을 완전히 성공하거나 완전히 실패하는 단일 단위로 그룹화하여 데이터 무결성을 보장합니다. 고유성 및 유형 제약과 같은 데이터베이스 제약 조건은 일관성과 정확성을 유지하기 위한 규칙을 적용합니다. 트랜잭션은 모든 작업이 이러한 제약 조건을 준수하도록 보장하지만, 많은 검사(예: 고유성)는 트랜잭션이 끝날 때까지(커밋 시) 연기되는 경우가 많습니다. 이렇게 하면 데이터를 한 상태에서 다른 상태로 전환하는 동안 일시적으로 제약 조건을 위반하는 등 업데이트 중에 유연하게 대처할 수 있습니다. 어떤 작업이 제약 조건을 위반하면 전체 트랜잭션이 실패하고 롤백되므로 부분적인 변경이 적용되지 않고 데이터 불일치를 방지할 수 있습니다.
1장에서 보셨듯이 이미 데이터베이스 제약 조건에 대해 어느 정도 경험해 보셨을 것입니다. 예를 들어 HAS_TRACK 관계의 position 속성이 정수가 되도록 하기 위해 제약 조건을 만들었습니다:
CREATE CONSTRAINT has_track_position_integer FOR ()-[r:HAS_TRACK]-() REQUIRE r.position IS TYPED INTEGER
다음 Cypher 쿼리와 같이 정의된 제약 조건을 준수하지 않는 데이터를 쓰려고 하면 어떻게 될까요?
CREATE (n:Playlist)-[:HAS_TRACK ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access