의 개발자 옹호자로서 카우치베이스많은 행사에 참석하고 많은 개발자들과 교류합니다. Couchbase에 대해 이야기할 때 생성되는 데이터의 내구성에 관한 질문을 많이 받습니다. 예를 들어, 카우치베이스는 메모리 우선, 영구 디스크 후행 유형의 데이터베이스로, 모든 상호 작용이 비동기적으로 디스크에 도달하기 전에 메모리 계층에서 이루어지므로 매우 빠른 속도를 유지합니다. 항상 제기되는 질문은 노드 장애 발생 시 데이터가 저장되는지 어떻게 확신할 수 있는가 하는 것입니다.

이는 매우 중요한 질문이며, 이러한 문제가 발생할 경우 어떻게 극복할 수 있는지 살펴볼 것입니다.

데이터 내구성에 대한 다양한 시나리오를 중심으로 매우 유사한 몇 가지 예제를 살펴보겠습니다. 이러한 예제는 Node.js로 작성되었지만, 사용하려는 Couchbase SDK에 관계없이 명령은 비슷합니다.

첫 번째 시나리오부터 시작하겠습니다. 월드 오브 워크래프트와 같은 대규모 멀티플레이어 온라인 롤플레잉 게임(MMORPG)이 있고 특정 플레이어의 게임 상태를 주기적으로 저장하여 나중에 다시 로그인할 때 위치, 통계, 아이템이 모두 일치하도록 해야 합니다. 이 시나리오에서는 저장이 자주 일어나고 지연 시간이 가장 중요하므로 캐시에 저장하는 것으로 충분할 수 있습니다. 다음과 같은 코드를 작성할 수 있습니다:

플레이어 상태가 저장되고 게임이 계속 진행해도 좋다는 응답을 받습니다. 노드가 실패하고 저장이 디스크에 저장되지 않았거나 복제되지 않았다면, 저장이 자주 이루어지기 때문에 큰 문제가 되지 않을 수 있습니다.

이제 다른 시나리오를 생각해 봅시다. 애플리케이션에 대한 사용자 계정을 생성한다고 가정해 보겠습니다. 메모리 계층에 의존할 수도 있지만, 데이터가 디스크에 도달할 것이라는 확신이 좀 더 필요합니다. 노드에 장애가 발생하면 메모리에 있던 데이터는 복구할 수 없지만 디스크에 있던 데이터는 복구할 수 있기 때문입니다. 그래서 대신 작업을 약간 조정했습니다:

다음을 추가했습니다. persist_to 를 사용하여 응답을 제공하기 전에 데이터가 디스크에 얼마나 많은 노드에 남아 있어야 하는지 지정할 수 있습니다. 저희의 경우 데이터가 단일 노드의 디스크에 있다는 것만 알고 싶고, 이는 괜찮습니다.

이제 세 번째이자 마지막 시나리오를 생각해 봅시다. 뱅킹 애플리케이션을 만들었다고 가정해 보겠습니다. 트랜잭션이 디스크에 존재해야 하며 노드 및 디스크 장애 발생 시 이 데이터를 복제하는 것이 중요합니다. 뱅킹 데이터와 관련하여 고객의 정보가 손실되면 막대한 벌금이 부과될 수 있습니다.

이에 따라 생성 작업이 약간 변경됩니다:

위의 코드에서는 문서를 만든 후 적어도 하나의 디스크에 보존하고 응답을 받기 전에 적어도 두 개의 다른 노드에 복제하기를 원합니다. 필요에 따라 이 수치를 조정할 수 있지만, 지속성 요구 사항이 높을수록 작업의 응답 속도가 느려진다는 점을 기억하세요.

결론

다음을 통해 달성할 수 있는 것은 상당히 많습니다. 카우치베이스. 많은 상황에서 사용자가 직접 내구성 요구 사항을 정의할 필요는 없지만, SDK를 통해 데이터가 캐시, 디스크 또는 복제본에 도달해야 하는지 여부를 결정할 수 있다는 것은 좋은 일입니다. 단, 요구 사항이 강력할수록 속도가 느려지는 것은 Couchbase가 느리기 때문이 아니라 더 많은 일이 일어나기 때문이라는 점을 명심하세요.

Couchbase Node.js SDK 사용에 대해 자세히 알아보려면 다음을 확인하세요. SDK 문서. 데이터 내구성에 대해 자세히 알아보고 싶으시면 카우치베이스 개발자 포털.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기