DBM(컴퓨터)

DBM (computing)

컴퓨팅에서 DBM은 데이터에 대한 빠른 단일 키 액세스를 제공하는 라이브러리파일 형식이다.원래 Unix의 키 값 데이터베이스dbmNoSQL 시스템의 초기 예다.[1][2][3]

역사

원래 dbm 라이브러리와 파일 형식은 단순한 데이터베이스 엔진으로, 원래 켄 톰슨이 쓰고 1979년 AT&T가 출시했다.이름은 DataBase Manager의 세 글자 약자로, API와 원래의 dbm에서 파생된 기능을 가진 데이터베이스 엔진 제품군을 지칭할 수도 있다.

dbm 라이브러리는 단일 키(기본 키)를 사용해 임의 데이터를 고정 크기 버킷에 저장하고 해싱 기법을 사용하여 키별 데이터를 빠르게 검색할 수 있다.

사용되는 해싱 체계는 확장 가능한 해싱의 한 형태로, 새 버킷이 데이터베이스에 추가될 때 해싱 체계가 확장되며, 즉, 거의 비어 있을 때는 데이터베이스가 하나의 버킷으로 시작하고, 이후 버킷이 가득 차면 분할된다는 것을 의미한다.결과적으로 발생하는 두 개의 하위 버킷은 가득 차면 저절로 분리되므로, 키가 추가될수록 데이터베이스는 커진다.

dbm 라이브러리와 그 파생상품은 사전 관계형 데이터베이스로 디스크 온 해시 테이블로 구현된 연관 배열을 관리한다.실제로, 그들은 연결과 질의 준비로 인한 오버헤드가 필요하지 않기 때문에 키로 접근하는 고속 스토리지에 대해 보다 실용적인 솔루션을 제공할 수 있다.이는 일반적으로 한 번에 하나의 과정으로만 글을 쓸 수 있다는 사실에 의해 균형을 이룬다.에이전트 데몬은 여러 프로세스의 요청을 처리할 수 있지만 IPC 오버헤드를 도입한다.

구현

원래의 AT&T dbm 라이브러리는 많은 후속 구현으로 대체되었다.주목할 만한 예는 다음과 같다.[3]

  • ndbm("new dbm"), 일부 새로운 기능이 있는 원본 dbm에 기반함.
  • GDBM("GNU dbm"), ndbm 기능을 구현하는 라이브러리와 자체 인터페이스를 GNU로 다시 작성한다.또한 데이터 일관성을 보장하기 위한 충돌 허용과 같은 새로운 기능도 제공한다.[4][5]
  • sdbm("작은 dbm"), dbm의 공용 도메인 다시 쓰기.PerlRuby의 표준 분포의 일부분이다.[6][7]
  • qdbm("Quick Database Manager")은 도쿄/쿄토 내각과 동일한 기법을 많이 채택한 고성능 dbm이다.캐비닛으로 옮기기 전에 같은 작가가 [8]썼어
  • tdb("Trivial Database")는 여러 작성자를 지원하는 Samba에서 사용하는 간단한 데이터베이스다.gdbm 기반 API를 가지고 있다.[9]
  • 버클리 DB, 1991년 BSD의 AT&T Unix 저작권을 이용하기 위해 Lippycat Software(현재의 Oracle)가 ndbm을 대체했다.병렬 처리, 트랜잭션 제어, 해싱, B 트리 저장과 같은 많은 확장을 특징으로 한다.
  • LMDB: Berkeley 스타일 API를 사용하여 C에서 Copy-on-write 메모리B+ 트리 구현.

다음 데이터베이스는 dbm에서 영감을 받았으나 dbm 인터페이스를 포장하는 것은 사소한 것일지라도 dbm 인터페이스를 직접 제공하지 않는다.

  • cdb("정규 데이터베이스"), Daniel J. Bernstein의 데이터베이스, 데이터베이스 파일은 만들고 읽을 수만 있을 뿐 수정될 수는 없다.
  • 쿄토 내각과 도쿄 내각의 아파치 2.0 면허를 가진 후계자 Tkrzw.
  • WiredTiger: 전통적인 행 지향 및 칼럼 지향 스토리지를 갖춘 데이터베이스.

유용성

2001년 현재, DBM의 ndbm 구현은 Solaris와 IRIX에 표준화된 반면, gdbmLinux에 어디에나 있다.버클리 DB 구현은 일부 무료 운영 체제에서 표준이었습니다.[2][10]2013년 버클리 DB의 라이선스를 GNU AGPL로 변경한 후, 데비안과 같은 프로젝트는 LMDB로 이전했다.[11]

신뢰성.

많은 DBM 제품군 데이터베이스에 대한 2018년 AFL 솜털 테스트는 데이터베이스 파일이 손상되거나 잘못되었을 때 구현의 많은 문제를 노출시켰다.다니엘 J. 번스타인프리cdb만이 충돌은 보이지 않았다.gdbm, tdb, lmdb의 저자들은 즉각 응답했다.버클리 DB는 다른 문제들의 순전히 양 때문에 뒤쳐졌다;[10] 그 수정사항은 라이선스 변경으로 인해 오픈 소스 소프트웨어 사용자들이 이전 버전에 다시 접속하는 것과 무관할 것이다.[11]

참고 항목

참조

  1. ^ Kew 2007, 페이지 80: "DBM은 빠른 키 검색의 필요성이 인정되던 컴퓨팅 초기부터 우리와 함께 해왔다.원본 DBM은 UNIX 기반 라이브러리 및 파일 포맷으로 데이터에 대한 빠르고 확장성이 뛰어난 키드 액세스를 제공한다.NDBM('새로운 DBM', GDBM('GNU DBM') 및 버클리 DB가 그 뒤를 이었다.이 마지막은 단연코 가장 진보된 것이며 현재 활발하게 개발되고 있는 유일한 DBM이다.그럼에도 불구하고 NDBM의 모든 DBM은 Apache를 포함한 대부분의 프로그램에서 사용하는 것과 동일한 핵심 기능을 제공한다.최소 구현 SDBM도 APR과 함께 번들로 제공되며 다른 DBM과 함께 애플리케이션에서 사용할 수 있다.
    비록 NDBM이 약 600BC년 그리스인에 의해 뉴타운('네아폴리스')이라는 이름이 붙여진 도시처럼, 그리고 오늘날에도 나폴리라고 불린 것처럼, 비록 NDBM은 여전히 기본 DBM으로 남아있다.NDBM은 의 Apache 1.x 버전과 같은 초기 Apache 모듈에서 사용됨mod_auth_dbm그리고mod_rewrite. GDBM과 Berkeley DB 모두 NDBM 에뮬레이션을 제공하며, Linux 배포판에는 이러한 에뮬레이션 중 하나 또는 다른 에뮬레이션을 '실제' NDBM 대신 발송하는데, 라이센스상의 이유로 제외된다.불행히도, 다양한 파일 형식은 완전히 호환되지 않으며, 데이터베이스 잠금과 관련된 행동에는 미묘한 차이가 있다.이런 문제들로 인해 리눅스 사용자들이 꾸준히 아파치 1.x의 DBM에 대한 문제를 보고하게 되었다."
  2. ^ a b 헤이즐 2001, 페이지 500: "가장 일반적인 [단일키] 형식은 DBM이라고 불린다.대부분의 현대판 유닉스에는 DBM 라이브러리가 표준으로 설치되어 있지만 일부 구형 시스템에서는 그렇지 않다.가장 일반적인 두 개의 DBM 라이브러리는 ndbm(솔라리스 및 IRIX 표준)과 버클리 DB 버전 2 또는 3(여러 무료 운영 체제 표준)이다.엑심은 이 두 가지를 모두 지원하는 것은 물론 기존 버클리 DB 버전1, gdbm, tdb도 지원한다."
  3. ^ a b Ladd & O'Donnell 2001, 페이지 823–824: "대부분의 UNIX 시스템은 어떤 종류의 DBM 데이터베이스를 가지고 있다.DBM은 키 쌍과 값 쌍으로 구성된 데이터 파일을 관리하는 라이브러리 루틴 세트다.DBM 루틴은 사용자가 데이터베이스에 정보를 입력하고 검색하는 방법을 제어한다.비록 이것이 정보를 저장하는 가장 강력한 메커니즘은 아니지만, DBM을 사용하는 것이 플랫 파일을 사용하는 것보다 정보를 검색하는 더 빠른 방법이다.대부분의 UNIX 사이트는 DBM 라이브러리 중 하나를 사용하기 때문에 DBM 데이터베이스에 정보를 저장하는 데 필요한 도구를 쉽게 사용할 수 있다.
    거의 유닉스 시스템만큼이나 많은 DBM 라이브러리의 맛이 존재한다.이 도서관들은 대부분 서로 호환이 되지만 기본적으로 모두 같은 방식으로 운영된다...
    사용 가능한 가장 인기 있는 DBM 라이브러리의 목록은 다음과 같다.
    • DBM - DBM은 데이터베이스를 두 개의 파일로 저장한다.첫째는 연장이 있다..Pag그리고 비트맵을 포함하고 있다.두 번째, 그 연장선상에 있다..Dir에는 데이터가 포함되어 있다.
    • NDBM - NDBM은 DBM과 거의 유사하지만 몇 가지 추가 기능이 있어 보다 나은 저장 및 검색 방법을 제공하기 위해 작성되었다.또한 NDBM은 스크립트 내에서 하나의 데이터베이스만 열 수 있는 DBM과는 달리 많은 데이터베이스를 열 수 있게 해준다.DBM과 마찬가지로 NDBM은 확장자를 사용하여 두 개의 파일에 정보를 저장함.Pag그리고.Dir.
    • SDBM - SDBM은 많은 플랫폼에 포팅된 Perl 아카이브와 함께 제공된다.따라서 컴퓨터에 Perl 버전이 있는 한 DBM 데이터베이스를 사용할 수 있다.SDBM은 NDBM과 함께 제공되는 기능과 일치하도록 작성되었으므로 코드의 휴대성은 문제가 되지 않는다.Perl은 거의 모든 인기 있는 플랫폼에서 이용 가능하다.
    • GDBM - GDBM은 DBM 데이터베이스 루틴 계열의 GNU 버전이다.또한 GDBM은 데이터를 캐슁하여 데이터베이스에 쓰는 데 걸리는 시간을 줄여준다.데이터베이스에는 크기 제한이 없으며, 데이터베이스 크기는 시스템 리소스에 따라 완전히 달라진다.GDBM 데이터베이스 파일의 확장자가 있음.Db. 두 파일 모두 두 파일을 사용하는 DBM과 NDBM과 달리 GDBM은 하나의 파일만 사용한다.
    • 버클리 db - 버클리 db는 원래의 DBM 루틴을 크게 확장한다.버클리 db는 다른 DBM 데이터베이스와 마찬가지로 해시 테이블을 사용하지만, 도서관은 또한 정렬된 균형 잡힌 이진 트리를 기반으로 데이터베이스를 작성할 수 있다.BTREE) 및 레코드 라인 번호로 정보 저장(RECNO사용하는 방법은 데이터베이스에서 정보를 저장하고 검색하는 방법에 따라 완전히 달라진다.버클리 db는 확장자가 없는 하나의 파일만 만든다."
  4. ^ "Crash Tolerance". GDBM manual. Retrieved 3 October 2021.
  5. ^ "Crashproofing the Original NoSQL Key-Value Store". Retrieved 3 October 2021.
  6. ^ yigit, ozan. "sdbm.bun". cse.yorku.ca. Retrieved 8 May 2019.
  7. ^ "class SDBM". Documentation for Ruby 2.4.0. Note that Ruby comes with the source code for SDBM, while the DBM and GDBM standard libraries rely on external libraries and headers.
  8. ^ "QDBM: Quick Database Manager". fallabs.com. 2006.
  9. ^ "tdb: Main Page". tdb.samba.org.
  10. ^ a b Debroux, Lionel (16 Jun 2018). "oss-security - Fun with DBM-type databases..." openwall.com.
  11. ^ a b Surý, Ondřej (19 June 2014). "New project goal: Get rid of Berkeley DB (post jessie)". debian-devel (Mailing list). Debian.

참고 문헌 목록