> 백엔드 개발 > PHP 문제 > PHP DBA 확장에 대한 자세한 소개

PHP DBA 확장에 대한 자세한 소개

醉折花枝作酒筹
풀어 주다: 2023-03-10 14:08:01
앞으로
2572명이 탐색했습니다.

이 글에서는 PHP의 DBA 확장에 대해 자세히 소개하겠습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP DBA 확장에 대한 자세한 소개

PHP DBA 확장 학습

오늘 우리가 이야기하는 DBA는 전통적인 데이터베이스 관리자 DBA가 아니라 PHP의 Barkley 스타일 데이터베이스를 확장한 것입니다. 버클리 스타일 데이터베이스는 실제로 키-값 쌍 형태의 K/V 데이터베이스라고 부르는 것입니다. 우리가 흔히 많이 사용하는 memcached나 redis처럼 하나의 키만 하나의 값에 해당하는데, memcached는 주로 메모리에 저장하는 반면, DBA 확장은 단순 키처럼 데이터를 파일에 저장하는 방식으로 SQLite와 값쌍 형태가 같다.

DBA Extension에서 사용하는 데이터베이스 종류는 기본적으로 오픈소스이며, 배포와 릴리스가 매우 간단합니다. 단지 db 파일이므로 SQLite와 매우 유사합니다. 하지만 단점은 데이터베이스 파일을 메모리에 한 번에 로드한다는 것입니다. 데이터베이스를 너무 크게 만들 수는 없습니다. 그렇지 않으면 메모리가 버스트됩니다. DBA 데이터베이스는 항상 프로그램과 함께 있으므로 네트워크 관련 인터페이스가 없습니다. 일반적으로 이러한 종류의 데이터베이스는 코드에서 로컬로만 사용됩니다.

설치하는 동안 컴파일 중에 --enable-dba=shared 구성을 추가한 다음 --enable-XXXX 구성을 추가해야 합니다. XXXX는 우리가 사용하려는 Barkley 스타일 데이터베이스 유형을 나타냅니다. dbm, ndbm, gdbm, db2 등. 마찬가지로 운영 체제도 이러한 관련 소프트웨어를 설치해야 합니다. 예를 들어 우리 시스템은 yum install을 사용하여 설치해야 하는 gdbm으로 설치됩니다.

간단한 예

먼저 코드를 통해 DBA 데이터베이스가 어떻게 사용되는지 살펴보겠습니다.

// 打开一个数据库文件
$id = dba_open("/tmp/test.db", "n", "gdbm");
//$id = dba_popen("/tmp/test1.db", "c", "gdbm");

// 添加或替换一个内容
dba_replace("key1", "This is an example!", $id);

// 如果内容存在
if(dba_exists("key1", $id)){
    // 读取内容
    echo dba_fetch("key1", $id), PHP_EOL;
    // This is an example!
}

dba_close($id);
로그인 후 복사

먼저 dba_open()을 사용하여 데이터베이스 파일을 엽니다. 두 번째 매개변수는 r, w, c, n을 포함한 열기 모드입니다. r은 읽기 전용, w는 읽기-쓰기, c는 생성과 읽기-쓰기를 의미하고, n은 그렇지 않은 경우 생성을 의미하며 읽기-쓰기가 가능함을 의미합니다. 세 번째 매개변수는 지정된 데이터베이스 유형입니다. 우리 시스템에는 gdbm 라이브러리만 설치되어 있으므로 gdbm을 매개변수로 사용합니다. mysql과 마찬가지로 dba_popen()을 사용하여 데이터 파일에 대한 영구 링크를 열 수도 있습니다.

dba_replace() 함수는 데이터를 추가하거나 대체합니다. 데이터가 없으면 새 데이터를 추가하고 해당 키의 값을 바꿉니다. 첫 번째 매개변수는 키, 두 번째 매개변수는 데이터 값입니다.

dba_exists()는 지정된 키가 존재하는지 확인하는 것입니다. 존재하는 경우 이 if에서 dba_fetch()를 통해 키에 지정된 데이터를 가져옵니다.

dba_close()는 다른 데이터 작업 핸들과 마찬가지로 데이터베이스 연결 핸들을 닫습니다.

데이터 추가, 탐색 및 삭제

위의 예에서는 데이터를 추가하기 위해 dba_replace()를 사용했습니다. 실제로 형식적인 데이터 추가를 위한 특별한 함수가 있습니다.

// 添加数据
dba_insert("key2","This is key2!", $id);
dba_insert("key3","This is key3!", $id);
dba_insert("key4","This is key4!", $id);
dba_insert("key5","This is key5!", $id);
dba_insert("key6","This is key6!", $id);

// 获取第一个 key
$key = dba_firstkey($id);

$handle_later = [];
while ($key !== false) {
    if (true) {
        // 将 key 保存到数组中
        $handle_later[] = $key;
    }
    // 获取下一个 key
    $key = dba_nextkey($id);
}

// 遍历 key 数组,打印数据库中的全部内容
foreach ($handle_later as $val) {
    echo dba_fetch($val, $id), PHP_EOL;
    dba_delete($val, $id); // 删除key对应的内容
}
// This is key4!
// This is key2!
// This is key3!
// This is an example!
// This is key5!
// This is key6!
로그인 후 복사

dba_insert()는 데이터를 삽입하는 것입니다. 기존 키 정보를 삽입하는 경우 false를 반환합니다.

dba_firstkey()는 첫 번째 키를 가져오는 데 사용되고 dba_nextkey()는 다음 키를 가져오는 데 사용됩니다. 이 두 함수를 통해 전체 데이터베이스의 모든 키 정보를 가져온 다음 이 키를 통해 이동할 수 있습니다. . 전체 데이터베이스의 모든 것.

dba_delete()는 키를 기반으로 데이터 조각을 삭제하는 것입니다.

데이터베이스 최적화 및 동기화

mysql의 경우에도 장기간 사용한 후에는 mysql이 자동으로 파일 조각 모음, 인덱스 구성 등을 허용하는 등 일부 최적화 작업을 수행해야 합니다. 사용하는 SQL 문은 테이블 이름 최적화입니다. 마찬가지로 DBA 확장도 이러한 기능을 제공합니다.

// 优化数据库
var_dump(dba_optimize($id)); // bool(true)
로그인 후 복사

그리고 mysql의 캐시와 마찬가지로 DBA도 데이터를 연산할 때 캐시를 하게 되는데 이때 캐시에 있는 데이터를 강제로 하드디스크 파일로 플러시하는 기능을 사용할 수 있습니다.

// 同步数据库
var_dump(dba_sync($id)); // bool(true)
로그인 후 복사

현재 열려 있는 데이터베이스 목록

함수를 사용하면 현재 열려 있는 데이터 연결을 확인할 수 있습니다. DBA는 간단한 파일 기반 데이터베이스이므로 코드 하나로 여러 데이터 연결을 열 수 있기 때문입니다.

// 获取当前打开的数据库列表
var_dump(dba_list());
// array(1) {
//     [4]=>
//     string(12) "/tmp/test.db"
//   }
로그인 후 복사

시스템에서 지원하는 데이터베이스 유형

마지막으로, 현재 우리 데이터베이스에서 지원하는 데이터베이스 유형을 반환할 수 있는 지원 함수를 살펴보겠습니다.

// 当前支持的数据库类型
var_dump(dba_handlers(true));
// array(5) {
//     ["gdbm"]=>
//     string(58) "GDBM version 1.18. 21/08/2018 (built May 11 2019 01:10:11)"
//     ["cdb"]=>
//     string(53) "0.75, $Id: 841505a20a8c9c8e35cac5b5dc3d5cf2fe917478 $"
//     ["cdb_make"]=>
//     string(53) "0.75, $Id: 95b1c2518144e0151afa6b2b8c7bf31bf1f037ed $"
//     ["inifile"]=>
//     string(52) "1.0, $Id: 42cb3bb7617b5744add2ab117b45b3a1e37e7175 $"
//     ["flatfile"]=>
//     string(52) "1.0, $Id: 410f3405266f41bafffc8993929b8830b761436b $"
//   }

var_dump(dba_handlers(false));
// array(5) {
//     [0]=>
//     string(4) "gdbm"
//     [1]=>
//     string(3) "cdb"
//     [2]=>
//     string(8) "cdb_make"
//     [3]=>
//     string(7) "inifile"
//     [4]=>
//     string(8) "flatfile"
//   }
로그인 후 복사

dba_handlers()에는 부울 매개변수가 있습니다. 코드에서 이 매개변수의 기능이 자세한 수준의 정보를 반환하는 것임을 알 수 있습니다.

요약

오늘 소개한 것은 매우 간단한 데이터베이스 확장 구성요소 세트입니다. 일상적인 프로덕션 환경에서는 실제 적용 시나리오가 많지 않습니다. 간단한 키-값 쌍을 저장하기 위해 PHP 파일 직렬화를 사용할 수 있으며, 캐싱은 대부분 memcached와 같은 도구를 사용하므로 이에 대해 알아볼 수 있습니다.

테스트 코드:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/PHP%E7%9A%84DBA%E6%89%A9%E5%B1%95%E5%AD%A6%E4%B9%A0.md
로그인 후 복사

추천 학습: php 비디오 튜토리얼

위 내용은 PHP DBA 확장에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿