Berkeley DB 관련 질문

jazzsir의 이미지

환경은 자원이 제한적인 Embedded 환경이고 꽤 많은 테이블들이 있습니다. 적어도 20개 가까이 되는듯 합니다.
문제는 D/B 요청시마다 D/B 를 열고 닫으니 속도가 너무 느리다는 점입니다.
그래서 D/B Handler(?)를 Static 변수로 메모리에 올려 놓고 사용하려는데
구조를 어떻게 가져가야 할지 고민입니다.

그래서 첫번째 방법은

모든 테이블을 아래와 같이 하나의 DB 구조체에 몽땅 털어 넣고

typedef struct my_dbs {
 
//tables
    DB *DB1
    DB *DB2
.
.
    DB *DB19
    DB *DB20
 
//location of files
    char *DB1_findName;
    char *DB2_findName;
.
.
    char *DB19_findName;
    char *DB20_findName;
 
} MY_DBS;

부팅시 Static 변수로 올려 놓은 후,
각 해당 모듈이 실행/종료 될때마다 사용하는 D/B를 아래와 같이 시작/종료하는방법입니다.
-시작
open_database(&(myDatabase->phonebook_dbp)
-종료
myDatabase->DB1->close(myDatabase->DB1, 0);

두번째 방법은

첫번째 방법처럼 하나의 구조체에 몽땅 넣는게 아닌 각각의 모듈에서 해당하는 DB table만 구조체에 넣고
모듈 시작시 static 변수로 올려놓고 D/B 시작/종료는 첫번째 방밥과 같이 하는 방법입니다.

세번째 방법은

두번째 방법과 같이 각각의 모듈에서 해당하는 Table만 구조체에 넣는건 같지만
Static으로 올려 놓지 않고 모듈안에서만 사용하는 방법입니다.
근데, DB를 핸들하는 모듈이 원래 따로 있는데
이 구조로 가게되면 DB핸들하는 모듈 뿐만 아니라 요청하는 모든 모듈들을 수정해야 하는 문제가 생깁니다.

질문)
1. 위의 방법 중 어느방법이 효율적인지요 아님 다른 효율적인 방법이 있는지요??

2. 각각의 모듈에서 같은 D/B를 Access할 경우가 많습니다. 하나의 모듈에서 Open후 다른 모둘에서도 사용하려고 Access시도하게 되면 문제가 발생할텐데 회피할 수 있는 일반적인 방법은 무엇인지요? Berkeley DB 자체 함수가 있는줄은 아는데 위와 같은 구조에서 확실히 보장이 되는지 의문입니다.

3. 실제 Open/Close는 각각의 모듈에서 하지만 Static으로 올려 놓고 사용하려니 자원을 얼마나 물고 있을지 걱정입니다.
(사실 제가 java만 해와서 C 프로그래밍에 익숙치 않습니다.--;;)

익명 사용자의 이미지

2. 각각의 모듈에서 같은 D/B를 Access할 경우가 많습니다. 하나의 모듈에서 Open후 다른 모둘에서도 사용하려고 Access시도하게 되면 문제가 발생할텐데 회피할 수 있는 일반적인 방법은 무엇인지요? Berkeley DB 자체 함수가 있는줄은 아는데 위와 같은 구조에서 확실히 보장이 되는지 의문입니다.

-->

멀티프로세스로 버클리DB 접근하는 케이스로 보여집니다.
멀티프로세스/멀티스레드 접근할때 DB안정성이 보장됩니다.

http://download.oracle.com/docs/cd/E17076_02/html/gsg_txn/C/multithread-intro.html

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.