현재 위치 - 대출자문플랫폼 - 초보자질문 - 사전에서 CPP 찾기

사전에서 CPP 찾기

다음 예제에서는 레코드를 삽입, 가져오기 및 삭제하는 방법을 보여 줍니다.

레벨 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 = = = = 값

키를 찾을 수 없음:

copyright 2024대출자문플랫폼