Berkeley DB (1) - 입문 지식 과 작은 예

더 읽 기
인터넷 에서 버클 리 DB 를 소개 하 는 글 을 많이 봤 는데 거의 모든 중국어 문장 이 입문 을 소개 하고 다 시 는 없어 졌 다.대부분 개괄 이다.요즘 이거 하 니까 좀 더 체계적으로 소개 해 드 리 려 고요.잘 모 르 는 부분 은 저 와 토론 하거나 공식 사이트 sleepycat 의 문 서 를 참조 할 수 있 습 니 다.저 는 최신 버 전 db - 4.4.16. NC. tar. gz 를 사 용 했 습 니 다. 이 가방 에는 상세 한 영문 문서 가 들 어 있 습 니 다.
왜 Berkeley DB 를 사용 해 야 합 니까? 그것 은 어떤 장소 에 적합 합 니까?
버클 리 DB 는 모든 애플 리 케 이 션 에 적합 하지 않 습 니 다. 간단 하고 전일 하기 때문에 효율 적 입 니 다.
내장 형 데이터 베 이 스 는 내장 형 시스템 에 만 적용 되 는 것 이 아니 라 프로그램 에 내장 되 어 있 는 것 을 말한다.그것 의 특징 은 내장 형 시스템 에 매우 적합 하 다.물론 우리 의 pc 클 러 스 터 나 대형 서버 에서 도 유연 하 게 설정 하여 더욱 어 려 운 임 무 를 수행 할 수 있 습 니 다.
그것 은 대량의 간단 한 데 이 터 를 관리 하 는 데 적합 하 다.구 글 은 버클 리 DB HA (High Availability) 로 계 정 정 정 보 를 관리 하고 있다. 모 토로 라 는 그의 무선 제품 에서 버클 리 DB 로 모 바 일 유닛 을 추적 하고 있다.hp, microsoft, Sun Microsystems... 등 도 모두 그의 큰 고객 이다.그것 은 관계 데이터 베 이 스 를 완전히 대체 할 수 는 없 지만, 어떤 면 에 서 는 오히려 그들 이 따라 갈 수 없 는 효율 성 을 가지 고 있다.
성능 테스트, 다음 설정 에서:
Linux – SuSE Linux 9.1 running on an AMD Athlon 64 processor 3200+ at 1GHz system with 1GB of RAM。
매 초, 단일 기록 읽 기 조작 1, 002, 200 회.단일 기록 쓰기 조작 766, 034 회.bulk API 로 읽 기 동작 13, 501, 800 회 할 수 있 습 니 다.물론 이것 은 모두 메모리 에서 발생 하 는 작업 입 니 다. 왜냐하면 bdb 는 cache 를 사 용 했 기 때 문 입 니 다.성능 테스트 의 구체 적 인 데 이 터 는 공식 사이트 의 Performance Metrics & Benchmarks: Berkeley DB 를 참고 할 수 있다.
버클 리 DB 안내
버클 리 DB 는 프로그래머 를 위 한 데이터베이스 라 고 할 수 있다.내 글 에는 c 프로그래머 만 소개 되 어 있다.C + +, 자바, Perl, Tcl, Python, PHP 등 도 지원 합 니 다.원리 와 인 터 페 이 스 는 차이 가 많 지 않다.그것 의 설 치 는 매우 간단 하 다.
cd build_unix
../dist/configure
make
make install
이 몇 단 계 는 ok 입 니 다. 사실은 헤더 파일 과 컴 파일 된 db 라 이브 러 리 를 특정한 위 치 를 가리 키 는 것 입 니 다.심지어 make install 을 사용 하지 않 고 프로그램 을 컴 파일 할 때 - I - L - ldb 로 헤더 파일 과 연결 라 이브 러 리 의 위 치 를 지정 할 수 있 습 니 다.그것 을 완전히 함수 라 이브 러 리 로 사용 할 수 있다.db 라 이브 러 리 에서 데이터 관 리 를 투명 하 게 수행 합 니 다.시스템 의 여러 프로 세 스 든 같은 프로 세 스 의 여러 스 레 드 든 같은 시간 에 데이터 베 이 스 를 방문 하 는 함 수 를 호출 할 수 있 습 니 다.바 텀 데이터 잠 금, 트 랜 잭 션 로그, 저장 관리 등 은 버클 리 DB 함수 라 이브 러 리 에서 이 루어 진다.그 는 전통 적 인 데이터베이스 처럼 client 와 server 가 있 지 않 고 몇 가지 프로 세 스 를 전문 적 으로 뛴다.따라서 응용 프로그램 은 사전에 데이터베이스 서비스 와 네트워크 연결 을 구축 하지 않 고 프로그램 에 내 장 된 Berkeley DB 함수 라 이브 러 리 를 통 해 데이터 저장, 조회, 수정, 삭제 등 을 수행 합 니 다.
버클 리 DB 함수 라 이브 러 리 자 체 는 300 KB 안팎 이지 만 256 TB 에 달 하 는 데 이 터 를 관리 할 수 있 고 여러 가지 성능 이 상업 적 인 데이터베이스 시스템 과 맞 설 수 있다.데이터 에 대한 병행 작업 으로 볼 때 Berkeley DB 는 수천 명의 사용자 가 같은 데이터 베 이 스 를 동시에 방문 하 는 상황 에 쉽게 대처 할 수 있다.따라서 자원 이 제 한 된 내장 형 시스템 에서 데이터 베 이 스 를 관리 하 는 것 도 버클 리 DB 도 좋 은 선택 이다.
버클 리 DB 는 왜 효율 적 입 니까?
Berkeley DB 는 삽입 식 데이터베이스 시스템 으로서 여러 방면 에서 독특한 장점 을 가지 고 있다.우선, 응용 프로그램 과 데이터 베이스 관리 시스템 이 같은 프로 세 스 공간 에서 실행 되 기 때문에 데이터 조작 을 할 때 번 거 로 운 프로 세 스 간 통신 을 피 할 수 있 고 socket 연결 등 을 포함 하기 때문에 통신 에 소모 되 는 비용 도 자 연 스 럽 게 매우 낮 아진 다.그 다음으로 Berkeley DB 는 데이터베이스 시스템 에서 자주 사용 하 는 SQL 언어 가 아 닌 간단 한 함수 호출 인 터 페 이 스 를 사용 하여 모든 데이터 베 이 스 를 완성 합 니 다.이렇게 하면 구조 화 된 조회 언어 를 분석 하고 처리 하 는 데 필요 한 비용 을 피 할 수 있다.
기본 개념
키워드 / 데 이 터 는 Berkeley DB 가 데이터베이스 관 리 를 하 는 기초 이다.키 / data 마다 하나의 기록 을 구성한다.전체 데이터 베 이 스 는 실제 적 으로 많은 이런 구조 단원 으로 구성 되 어 있다.이 를 통 해 개발 자 들 은 버클 리 DB 가 제공 하 는 API 를 사용 해 데이터베이스 에 접근 할 때 키워드 만 제공 하면 해당 데이터 에 접근 할 수 있다.물론 키 와 일부 데 이 터 를 제공 해 조건 에 맞 는 비슷 한 데 이 터 를 조회 할 수도 있다.
하나의 예 로 입문 을 완성 하 다.
rdb 를 사용 한 사람 은 아래 의 예 를 볼 수 있다 고 믿 습 니 다.간단하게 다음 에 지속 적 으로 완 성 된 기능 을 말씀 드 리 겠 습 니 다.간단 한 예 로 서 environment 부분 은 필요 하지 않 을 수 있 습 니 다. 저 는 그것 의 용법 도 함께 넣 었 습 니 다.environment 를 만 들 려 면 데이터베이스 파일 을 어느 디 렉 터 리 아래 에 만 들 지 알려 줍 니 다.데이터 베 이 스 를 만 들 고 데이터 베 이 스 를 열 어 기록 을 쓰 고 기록 을 읽 은 다음 에 기록 한 기록 을 삭제 한 다음 에 environment 와 데이터 베 이 스 를 닫 습 니 다.이러한 기본 적 인 조작 을 알 게 되면 bdb 를 사용 하여 간단 한 응용 을 완성 할 수 있 습 니 다.
....................................................................
#include 
#include 
#include 
#include 
//only this head should include for use bdb.
#include    
#define DATABASE "yangjian.db"

int main()
{
    DB_ENV *myEnv;
    DB *dbp;
    DBT key, data;
    int ret,t_ret;
    u_int32_t env_flags;
    //........... Create an environment object and initialize it for error reporting
    ret = db_env_create(&myEnv, 0);
    if (ret != 0)
    {
          fprintf(stderr, "Error creating env handle: %s
", db_strerror(ret)); return -1; } //........If the environment does not exist create it. Initialize the in-memory cache. env_flags = DB_CREATE | DB_INIT_MPOOL; //........Open the environment. ret = myEnv->open(myEnv,"/home/yangbin1/yangjian/my/db/testevn",env_flags,0); if (ret != 0) { fprintf(stderr, "Environment open failed: %s", db_strerror(ret)); return -1; } if ((ret = db_create(&dbp, myEnv, 0)) != 0) { fprintf(stderr, "db_create: %s
", db_strerror(ret)); exit (1); } if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) { dbp->err(dbp, ret, "%s", DATABASE); exit (1); } memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = "sport"; key.size = sizeof("sport"); data.data = "football"; data.size = sizeof("football"); /* //......put data if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0) { printf("db: %s: key stored.
", (char *)key.data); } else { dbp->err(dbp, ret, "DB->put"); } */ //........put data NOOVERWRITE if ((ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == 0) printf("db: %s: key stored.
", (char *)key.data); else dbp->err(dbp, ret, "DB->put"); //.......get data if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0) printf("db: %s: key retrieved: data was %s.
", (char *)key.data, (char *)data.data); else dbp->err(dbp, ret, "DB->get"); //......del data if((ret = dbp->del(dbp, NULL, &key, 0)) == 0) printf("db: %s: key was deleted.
", (char *)key.data); else dbp->err(dbp, ret, "DB->del"); //.........close, only when the db successful closed,the data can real write to the disk. //if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0) //ret = t_ret; //exit(ret); if (dbp != NULL) dbp->close(dbp, 0); //.........close evn //........When you are done with an environment, you must close it. //........Before you close an environment, make sure you close any opened databases if (myEnv != NULL) myEnv->close(myEnv, 0); return 0; }

좋은 웹페이지 즐겨찾기