My Blog

rocksdb 예제

by kai on 2. August 2019 , No comments

예를 들어 rocksdb 위에 간단한 파일 시스템을 구현하고 있다고 가정해 보겠습니다. 저장하려는 항목 유형은 다음과 같습니다: DocDB는 여러 기술을 사용하여 데이터베이스 읽기/쓰기 작업을 가능한 가장 낮은 비용으로 실행할 수 있도록 합니다. 다음은 몇 가지 예입니다. RocksDB 코드는 관리가 용이하고 확장이 용이합니다. 예를 들어 읽기-수정-쓰기 대신 일부 업데이트를 쓰기 전용으로 만드는 병합 연산자가 추가되었으며, 여기서 „읽기“와 „쓰기“는 잠재적인 저장소 읽기 및 쓰기를 의미합니다. 이렇게 하면 쓰기 집약적인 일부 워크로드에 대한 IO 양이 줄어듭니다. 이 개요는 RocksDB가 사용되는 방법에 대한 몇 가지 간단한 예제를 제공합니다. RocksDB가 처음에 만들어진 이유에 대한 자세한 내용은 데이터 @ Scale 2013 컨퍼런스에서 드루바 보르타쿠르의 소개 강연을 참조하십시오. 앞의 예제에서는 바이트를 사전순으로 정렬하는 키에 대한 기본 순서 함수를 사용했습니다. 그러나 데이터베이스를 열 때 사용자 지정 비교기(비교기)를 제공할 수 있습니다. 예를 들어 각 데이터베이스 키가 두 개의 숫자로 구성되고 첫 번째 숫자로 정렬하여 두 번째 숫자로 관계를 끊어야 한다고 가정합니다. 첫째, 이러한 규칙을 표현하는 rocksdb::Comparator의 적절한 하위 클래스를 정의합니다: 다음 예제 파이썬 병합 연산자는 짧은 대기 시간 데이터베이스 액세스가 필요한 응용 프로그램에서 사용할 수 있는 카운터 RocksDB를 구현합니다.

몇 가지 예는 다음과 같습니다: 슬라이스를 사용할 때 슬라이스 포인트가 유지되는 외부 바이트 배열이 유지되도록 하려면 호출자에게 달려 있으므로 슬라이스를 사용할 때주의해야 합니다. 예를 들어, 다음은 버그가 있습니다: RocksDB는 다소 낮은 수준의 API를 가진 모놀리식 키-값 저장소 엔진입니다. 예를 들어 키/값은 바이트 배열일 뿐이며 입력되지 않습니다. 단일 노드의 컨텍스트에 빠른 액세스, 지속성 및 포함을 위해 설계되었습니다. 단일 노드 포커스를 감안할 때 고가용성 및 지리적 데이터 분포를 디자인 목표로 간주하지 않습니다. 다음은 하나의 특정 키에서 역순으로 범위(제한, 시작)의 항목을 처리하는 예입니다. 예를 들어 DocDB에 저장된 다음 문서를 고려하십시오. rocksdb 구현에서 발급된 모든 파일 작업(및 기타 운영 체제 호출)은 rocksdb:Env 개체를 통해 라우팅됩니다.

정교한 클라이언트는 더 나은 제어를 위해 자체 Env 구현을 제공할 수 있습니다. 예를 들어 응용 프로그램은 파일 IO 경로에 인위적인 지연을 도입하여 rocksdb가 시스템의 다른 활동에 미치는 영향을 제한할 수 있습니다. 동일한 경우 WriteBatch에서 어떤 작업이 발생했는지 알아야 합니다. pyrocksdb WriteBatch는 이 리터레이터 프로토콜을 지원하며 이 예제를 참조하십시오. 아래 섹션에서는 C++의 코드가 있는 RocksDB의 예제 사용법을 보여 준다. 데이터베이스 엔진의 IO의 중요한 경로에 언어 간 스위치를 배치하고 싶지 않았습니다. 예를 들어, RocksDB를 스토리지 엔진으로 사용하는 다른 데이터베이스인 CockroachDB는 쿼리 실행 계층이 Go 언어 및 저장소 엔진(RocksDB)에 있기 때문에 중요한 IO 경로에서 Go C++ 스위치를 발생시킵니다. 매우 간단한 쿼리를 처리하는 데 필요한 이러한 언어 경계 홉의 수는 여전히 중요할 수 있으며 이는 성능에 부정적인 영향을 미치는 요인 중 하나입니다.

kairocksdb 예제