레벨 db 소개
하나. 레벨 db 소개
LevelDB 는 Google 오픈 소스의 영구 KV 독립 데이터베이스로 임의 쓰기 및 순차 읽기/쓰기 성능이 높지만 임의 읽기 성능은 매우 일반적입니다. 즉, LevelDB 는 쿼리가 적지만 많은 장면을 쓰는 데 적합합니다. 레벨 db 는 LSM (log structured merging) 정책을 사용합니다. Lsm_tree 는 인덱스 변경 사항을 지연 및 일괄 처리하고 병합 정렬과 유사한 방식으로 업데이트를 디스크로 효율적으로 마이그레이션하여 인덱스 삽입 오버헤드를 줄입니다. LSM 과 관련하여 이 문서의 뒷부분에서도 간략하게 설명합니다.
LevelDB 공식 웹 사이트에 따르면 LevelDB 의 특징과 한계는 다음과 같습니다.
특징:
1, 키 및 값은 모든 길이의 바이트 배열입니다.
2. 기본적으로 항목 (K-V 레코드) 은 키의 사전 순서로 저장됩니다. 물론 개발자는 이 정렬 함수를 다시 로드할 수도 있습니다.
3. 제공된 기본 조작 인터페이스: Put (), Delete (), Get (), batch ();
원자 조작 배치 작업을 지원합니다.
5. 데이터 파노라마의 스냅샷을 만들고 스냅샷에서 데이터를 찾을 수 있습니다.
6. 반복자를 정방향 (또는 역방향) 하여 데이터를 트래버스할 수 있습니다. 반복자는 암시적으로 스냅샷을 생성합니다.
7. 자동으로 Snappy 를 사용하여 데이터를 압축합니다.
8. 휴대성
제한 사항:
1, 비관계형 데이터 모델 (Nosql), SQL 문 또는 인덱스 지원 안 함 :
한 번에 하나의 프로세스만 특정 데이터베이스에 액세스할 수 있습니다.
3. 내장 C/S 아키텍처는 없지만 개발자는 레벨 db 라이브러리를 사용하여 서버를 패키지화할 수 있습니다.
LevelDB 자체는 소스 디렉토리 make 에서 컴파일할 수 있는 lib 라이브러리일 뿐이며 leveldb/include/db.h 헤더 파일을 포함하여 응용 프로그램에 직접 포함할 수 있습니다. 헤더 파일에는 몇 가지 기본 데이터베이스 작업 인터페이스가 있습니다. 다음은 테스트 예입니다.
# include & ltiostream & gt
# include & lt 문자열>
# include & ltassert.h & gt
# 레벨 db/db.h 포함
네임스페이스 STD 사용
인트메인 (void)
{
레벨 db:: db * db;
레벨 db:: options 옵션;
Options.create _ if _ missing = true;
//열기
레벨 db:: statusstatus = 레벨 db:: db:: open (옵션 "/tmp/testdb",& db);
Assert (status.ok ());
String key = "name";
문자열 값 = "첸 지";
//쓰기
상태 = d b-> Put (레벨 db:: writeoptions (), 키, 값);
Assert (status.ok ());
//읽기
상태 = d b-> Get (레벨 db:: readoptions (), 키 & 값);
Assert (status.ok ());
Cout & lt& lt 가치<& ltendl
//삭제
상태 = d b-> 삭제 (레벨 db:: writeoptions (), 키);
Assert (status.ok ());
상태 = d b-> Get (레벨 db:: readoptions (), 키 & 값);
만약 (! Status.ok ())
Cerr & lt & ltkey & lt< ""<< 상태. ToString()& lt;; & ltendl
} 그렇지 않으면 {
Cout & lt& ltkey & lt& lt“= = =“& lt; "< & lt 가치<& ltendl
}
//닫기
데이터베이스 삭제
0 을 반환합니다
}
위 예제에서는 레코드를 삽입, 가져오기 및 삭제하고 코드를 컴파일하는 방법을 보여 줍니다.
G++-o test test.cpp libleveldb.a-LP thread-I include
집행 후. /test-/tmp 아래에 testdb 디렉토리가 생성됩니다. 이 디렉토리에는 다음과 같은 여러 파일이 들어 있습니다.
--
레벨 DB 는 오픈 소스 Lucene 인덱스 라이브러리와 유사한 구글의 오픈 소스 키 저장소 엔진 라이브러리입니다. 다른 소프트웨어 개발자는 이 라이브러리를 사용하여 맞춤형 요구 사항을 충족하기 위한 2 차 개발을 수행할 수 있습니다. LevelDB 는 로그 쓰기를 사용하여 쓰기 성능을 향상시키지만 일부 읽기 성능을 저하시킵니다. 희생된 읽기 성능을 보완하기 위해 SSD 를 스토리지 미디어로 사용하는 것이 좋습니다.
현지화된 키 스토리지 엔진의 경우 간단한 사용은 일반적으로 (1) 데이터베이스 인스턴스 열기의 세 가지 기본 단계로 나뉩니다. (2) 데이터베이스 인스턴스를 삽입, 수정 및 질의합니다. (3) 마지막으로 사용이 완료되면 데이터베이스를 종료합니다. 이 세 단계에 대해서는 아래에서 자세히 설명합니다.
먼저 데이터베이스 인스턴스를 엽니다
레벨 db 데이터베이스의 이름은 파일 시스템 디렉토리에 해당합니다. 데이터베이스의 모든 내용은 이 디렉토리에 저장됩니다. 다음 코드는 데이터베이스를 열거나 새 데이터베이스를 만드는 방법을 설명합니다.
# include & ltassert.h & gt
# 레벨 db/db.h 포함
레벨 db:: db * db;
레벨 db:: options 옵션;
Options.create _ if _ missing = true;
레벨 db:: statusstatus = 레벨 db:: db:: open (옵션 "/tmp/testdb",& db);
Assert (status.ok ());
기존 데이터베이스를 열면 오류를 던져야 합니다. Leveldb::DB::Open 메서드 앞에 다음 코드를 삽입합니다.
Options.error _ if _ exists = true
둘째, 간단한 데이터베이스 읽기 및 쓰기 작업
레벨 db 는 Put, Delete 및 Get 의 세 가지 방법으로 데이터베이스를 수정하고 조회할 수 있습니다. 예를 들어 다음 코드 조각에서는 키1에 해당하는 값을 키 2 에 해당하는 값으로 이동하는 방법을 보여 줍니다.
Std:: 문자열 값;
레벨 db:: 상태 s = d b-> Get (레벨 db:: readoptions (), 키1,& 값);
If (s.ok () s = d b-> Put (레벨 db:: writeoptions (), 키 2, 값);
If (s.ok () s = d b-> 삭제 (레벨 db:: writeoptions (), 키1);
셋째, 데이터베이스를 종료합니다
데이터베이스에 대해 일련의 작업을 수행한 후 데이터베이스를 종료해야 합니다. 이 작업은 비교적 간단합니다.
... 위에서 설명한 대로 데이터베이스를 엽니다 ...
... db 에 대해 뭔가 해 ...
데이터베이스 삭제
LevelDB 의 간단한 사용법에 대한 기본적인 설명과 다음 단계는 완전하고 운영 가능한 예제를 작성하는 방법입니다.
1, 다운로드 소스 git clone /p/leveldb/
소스 코드 CD 레벨 DB &;; & amp 모두 제작
3. test.cpp 를 작성합니다
# include & ltassert.h & gt
# include & ltstring.h & gt
# include & lt level db/db.h >
# include & ltiostream & gt
Int main(){
레벨 db:: db * db;
레벨 db:: options 옵션;
Options.create _ if _ missing = true;
레벨 db:: statusstatus = 레벨 db:: db:: open (옵션 "/tmp/testdb",& db);
Assert (status.ok ());
//쓰기 키1,value 1
Std:: stringkey = "키";
Std:: stringvalue = "value";
상태 = d b-> Put (레벨 db:: writeoptions (), 키, 값);
Assert (status.ok ());
상태 = d b-> Get (레벨 db:: readoptions (), 키 & 값);
Assert (status.ok ());
Std::cout<. & lt 가치< & ltstd:: endl;
Std:: stringkey2 = "키 2";
//키 아래의 값을 키 2 로 이동합니다
상태 = d b-> Put (레벨 db:: writeoptions (), 키 2, 값);
Assert (status.ok ());
상태 = d b-> 삭제 (레벨 db:: writeoptions (), 키);
Assert (status.ok ());
상태 = d b-> Get (레벨 db:: readoptions (), 키 2 & 값);
Assert (status.ok ());
Std::cout<. & ltkey2 & lt< "= = =" < & lt 가치< & ltstd:: endl;
상태 = d b-> Get (레벨 db:: readoptions (), 키 & 값);
만약 (! Status.ok () STD:: cerr < & ltkey & lt< ""<< 상태. ToString()& lt;; & ltstd:: endl;
Else std::cout<. & ltkey & lt< "= = =" < & lt 가치< & ltstd:: endl;
데이터베이스 삭제
0 을 반환합니다
}
4. 링크 g++-otesttest.cpp 컴파일 ../level db/libre vel db.a-LP thread-I ../level db/include.
Libleveldb.a 와 leveldb 의 경로는 다음과 같습니다.
5. 실행 결과. /테스트:
가치
키 2 = = = = 값
키를 찾을 수 없음: