소스 임베디드 데이터베이스 SQLite는 열 소개

 

  설명 : 상용 애플리케이션 수십 년 전이 등장하기 때문에, 데이터베이스 소프트웨어 응용 프로그램의 주요 구성 요소가 될 것이다. 중요한 데이터베이스 관리 시스템 인처럼, 그들은 매우 커질 및 시스템 자원의 상당한 양을 차지, 관리의 복잡성을 증가시킨다. 점차 모듈 형 소프트웨어 응용 프로그램으로, 새로운 데이터베이스는 기존의 크고 복잡한 데이터베이스 관리 시스템보다 더 적합 할 것입니다. 임베디드 데이터베이스, 응용 프로그램 프로세스에서 직접 실행 제로 구성 (제로 구성) 동작 모드를 제공하고, 자원 소비가 매우 작습니다. 이 문서에서는 인기 SQLite 데이터베이스 엔진을 소개하고 응용 프로그램 개발에 사용하는 방법에 대해 설명합니다.

  리처드 힙 SQLite는이 C로 작성, 오픈 소스 데이터베이스 엔진을 내장. 그것은 외부 의존성이없는, 완전히 독립적이다. 그것은 PHP V5에 내장 된 PHP V4.3에 도입 된 옵션과 같다. SQLite는, 대부분의 SQL92 표준을 지원하는 모든 주요 운영 체제에서 실행되는 대부분의 컴퓨터 언어를 지원합니다. 또한 SQLite는 매우 강력. 그것의 창조자는 보수적 100,00 번 매일 부담까지 처리 할 수있는 SQLite는 추정 웹 사이트 안타, 때로는 SQLite는 위의 그림에서 10 배의 부하를 처리 할 수있다.

기능

  SQL92 표준 SQLite는 지원 인덱스, 제약 조건, 트리거 및 뷰를 포함한다. SQLite는은 원자 일관 독립적이고 내구성 (ACID) 거래 (뒷면은 ACID에 대한 자세한 정보를 제공 할 것입니다)에 대한 외부 키 제한 조건 만 지원을 지원하지 않습니다.

왜 내장?

  작업의 고유 모드에서 내장 데이터베이스 이름입니다. 이 데이터베이스는 클라이언트 - 서버 구성과 관련된 오버 헤드를 제거 지원 프로세스에 포함된다. 내장 데이터베이스는 실행 시간에, 그들은 적은 메모리를 필요로 실제로 경량입니다. 그들은 효과가 더 이상적입니다, 그것은 빠르고, 임베디드 디바이스 용으로 작성 얇은 코드를 사용하고 있습니다. Embedded 운영 모드는 쉽게 오히려 원래의 텍스트 파일에 의존하지 않고, SQL을 통해 응용 프로그램 데이터를 관리 할 수있는 포함 된 데이터베이스를 할 수 있습니다. 하나를 활성화하고 스냅 샷을 실행할 수 있도록 내장 데이터베이스는 또한 작업의 제로 구성 모드를 제공합니다.

  당신은 사용자 계정의 개념이없는, SQLite 데이터베이스 권한은 파일 시스템에 의존 알고있다. 이 SQLite는 데이터베이스 수준 잠금, 아니 네트워크 서버, 및 (모두는 아니지만) SQL92 표준의 대부분을 얻을 수 있습니다. 다른 주요 기능 SQL92 표준은 외래 키 제약 조건을 확인합니다. 무엇을 알아 SQL92 기능이 구현되지 않습니다.

  이 거래는 것을 의미 원자 들이 하나 완전히 전혀 실행되지 않았거나 때문에. 트랜잭션은 일관성 일관성이없는 상태, 데이터베이스가 예약 된 적이 있기 때문에. 트랜잭션 또는 독립적 이므로 동시에 같은 데이터베이스에 작업을 수행하기 위해 두 개의 트랜잭션이있는 경우, 두 개의 트랜잭션이 아닌 간섭이다. 그리고 거래는 지속 데이터베이스 데이터 손상의 손실없이 충돌과 정전 살아남을 수 있도록.

  SQLite는 트랜잭션 처리가 독점을 통해 독립을 달성하고 데이터베이스 수준 잠금에서 공유합니다. 이것은 여러 프로세스와 스레드가 동시에 같은 데이터베이스에서 데이터를 읽을 수 있지만 단 하나의 데이터를 기록 할 때 것을 의미한다. 프로세스 또는 스레드의 데이터베이스에 쓰기 작업을 수행하기 전에 단독 잠금을 얻어야합니다. 단독 잠금을 실행 한 후에, 다른 사람은 읽기 또는 쓰기 작업이 다시는 일어나지 않을 것입니다.

  SQLite는 사이트의 완전한 기록을 의미 잠금 SQLite는 .


내부 구조

  내부적으로, SQLite는 다음과 같은 구성 요소로 이루어져 있습니다 : SQL 컴파일러, 커널 및 후 단부 첨부 파일을. 가상 머신 및 가상 데이터베이스 엔진 (VDBE), 디버그의 사용을 통해 SQLite에 수정하고 쉽게 SQLite는 커널을 확장합니다. 모든 SQL 문이 쉽게 읽을 수로 컴파일 된 어셈블리는 SQLite는 가상 머신에서 수행 할 수 있습니다.

  도의 내부 구성. 1. SQLite는

  데이터베이스의 2 TB 크기까지 SQLite는 지원은 각 데이터베이스는 하나의 디스크 파일에 완전히 저장됩니다. 이 디스크 파일은 서로 다른 바이트 순서의 컴퓨터간에 이동할 수 있습니다. 이 데이터는 디스크에 B + 트리 (B + 트리) 데이터 구조에 저장됩니다. SQLite는 데이터베이스는 파일 시스템을 기반으로 자사의 허가를 받아야합니다.

데이터 유형

  SQLite는 정적 데이터 유형,하지만 열이 관계의 사용을 지원하지 않습니다. 이 데이터 유형이 나열된 특성을 가지고 있지 않음을 의미하고, 속성 데이터 자체를 가지고있다. 데이터베이스에 값이 SQLite는 그 종류를 확인할 때. 관련 컬럼의 타입이 일치하지 않는 경우, SQLite는 열 유형으로 값을 변환하려고 시도합니다. 자신의 메모리를 필요로 유형, 값을 변환하지 않는 경우.

  SQLite는 지원 NULL, INTEGER, REAL, TEXTBLOB데이터 유형.


SQLite는 관리

  SQLite는은의 다운로드와 함께 제공 데이터베이스 관리에 대한 명령 줄 인터페이스 . 이 프로그램은 명령 줄 데이터베이스 이름을 통해 호출 할 수 있으며 다음과 같은 방법으로 새로운 데이터베이스와 테이블을 생성 할 수 있습니다 :

1. 목록은 새 데이터베이스 및 테이블 만들기
C : \ minblogg> sqlite3를에 c : \ minblogg \ www가 \ DB \가 alf.db 
SQLite는 버전 3.2.1 
지침은 ".help"를 입력 
mytable 테이블 생성> SQLite는 (이름 varchar (40) 세 SMALLINT); 
SQLite는> (23 '닐스 - 에릭')에 삽입 MYTABLE 값; 
SQLite는> MYTABLE에서 선택 *; 
닐스 - 에릭 | 23 
SQLite는>

  그런 다음이 테이블과 구조를 나열, 데이터베이스를 다시 열고 삽입하고 값을 삭제 진행할 수 있습니다.

2. 목록 테이블 및 아키텍처 목록
 
C : \ minblogg> sqlite3를에 c : \ minblogg \ www가 \ DB \ alf.db 
SQLite는 버전 3.2.1이 
지침은 ".help"를 입력 
SQLite는이> .tables 
MYTABLE 
sqlite가> MYTABLE SELECT * FROM; 
닐스 - 에릭 | 23 
SQLite는이> .schema 
mytable 테이블 (이름 varchar (40), 연령 SMALLINT)을 생성; 
SQLite는>

  SQLite는 또한 당신이 어떤 SQLite 데이터베이스의 현재 상태에 대한 자세한 정보를 표시 할 수 있습니다 명령 줄 데이터베이스 분석기와 함께 제공됩니다.

3. SQLite는 분석기 목록
 
C : \ minblogg> sqlite3_analyzer www가 \ DB \ alf.db 
... mytable 테이블 분석 
테이블있는 sqlite_master 분석 ... 
/ ** www가 \ DB를 \의 alf.db를 들어 디스크 공간 이용률 보고서 
***의 2005-Apr- 24 18시 56분 40초 
바이트 페이지 크기 .................... 1,024 
파일 전체 페이지 (측정) .... (2) 
전체 파일의 페이지 ( ..) 2 계산 
데이터를 저장하는 페이지 ................. 2 100.0 %의 
(헤더 당)이 가능리스트의 페이지 0 .... 0.0 % 
freelist에의 페이지는 (계산 ....) 0 0.0 % 
자동 진공 헤드의 페이지 0 ......... 0.0 % 
데이터베이스의 테이블 번호 ...... 2 
인덱스 번호 ........ ............. 0 
이라는 인덱스 번호는 0 ...............
자동으로 생성되는 인덱스 0 ....... 
파일 크기 (바이트) ............. 2,048 
사용자 페이로드의 바이트가 저장 .......... 13 0.63 % 
* ** 자신의 인덱스 ******************** 모든 테이블에 대한 페이지 수 
MYTABLE ................... ............ 1 50.0 %의 
있는 sqlite_master ......................... 1 50.0 %는 
*** 모든 테이블 * ************************************************** **** 
전체 데이터베이스의 백분율 .......... 100.0 %의 
항목 ..................... 2의 수 
소비되는 기억의 바이트. ............ 2048 
페이로드의 바이트 ...................... 91 4.4 % 
항목 당 평균 페이로드 ..... ........ 45.50 
항목 당 평균 사용되지 않는 바이트 ........ 916.50
항목 당 최대 페이로드는 ............. 78 
항목 당 평균 사용되지 않는 바이트 ........ 999.00 
오버플에게 ............. 0 0.0 %를 사용하여 항목
기본 페이지를 사용 .................... 2 
오버 플로우 페이지는 ................... 0 사용 
사용 된 총 페이지를 ...................... 2 
차 페이지에 사용되지 않는 바이트 ......... 1833 89.5 % 
오버 플로우 페이지에 사용되지 않는 바이트 ..... ... 0 
모든 페이지에 사용되지 않는 바이트 ............. 1833 89.5 % 
*** 테이블 MYTABLE ******************** ******************************** 
전체 데이터베이스의 백분율 .......... 50.0 %의 
수 항목 ..................... 1 
소비되는 기억의 바이트 ............. 1,024 
페이로드의 바이트 ...... ................ 13 1.3 % 
항목 당 평균 페이로드 ............. 13.00 
항목 당 최대 페이로드 ......... .... (13) 
오버 플로우에게 ............. 0 0.0 % 사용 항목 
사용되는 기본 페이지를 ......... ........... 1 
오버 플로우 페이지는 ................... 0 사용 
사용 된 총 페이지를 ............ .......... 1 
차 페이지에 사용되지 않는 바이트 ......... 999 97.6 % 
오버 플로우 페이지에 사용되지 않는 바이트 ........ 0 
모든 페이지에 사용되지 않는 바이트 ... .......... 999 97.6 %

  이 데이터베이스 관리자를위한 큰 편의를 가져올 수 있도록 데이터베이스를 관리하기 위해 명령 줄 인터페이스를 사용하여 완벽하게 할 수 있기 때문에. 많은 우수한 웹 기반 SQLite 데이터베이스 관리 시스템이 있습니다. PHP를 기반이 는 SQLiteManager는 .


백업

  두 가지 방법으로 SQLite는 데이터베이스 백업. 데이터베이스가 사용 중이면, 명령 줄 인터페이스를 사용해야합니다 .dump 명령을 사용합니다. 이 데이터베이스를 다시 작성하기 위해 필요한 명령과 데이터를 포함하는 파일을 만듭니다. .dump명령은 데이터베이스 테이블을 백업 할 수 있습니다.

4. 목록 .dump명령
 
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE mytable(name varchar(40), age smallint);
INSERT INTO "mytable" VALUES('Nils-Erik', 23);
COMMIT;
sqlite>

  如果数据库没有处于使用状态,则可以直接将数据库文件复制到安全位置。


在 PHP V5 中使用 SQLite

  一个好的做法是将 SQLite 数据库与 PHP 代码分开。完成此操作的一个简便方法是创建一个 www 目录。在此目录中,创建一个用于存放 SQLite 数据库的 db 目录、一个用于存放数据库和表创建脚本的 dbscripts 目录和一个用于存放数据库备份的 backups 目录。

清单 5. 使用 PHP V5 组织 SQLite 数据库
2004-12-06  15:43    DIR          .
2004-12-06  15:43    DIR          ..
2005-04-23  19:55    DIR          db
2005-01-02  11:46    DIR          dbscripts
2005-01-02  11:46    DIR          backups

  在 PHP V5 中创建 SQLite 数据库与在命令行界面中创建该数据库非常相似。如果该数据库不存在,则创建一个空数据库。

$db = sqlite_open('../db/ac.db');

  创建一个表也非常容易:

清单 6. 创建表
$db = sqlite_open('../db/ac.db');
sqlite_query($db, 'DROP TABLE post');
sqlite_query($db, 'CREATE TABLE post (id INTEGER PRIMARY KEY, 
   kategori VARCHAR(20) NOT NULL, 
titel VARCHAR(75) NOT NULL, referens VARCHAR(75), status VARCHAR(20) not null, 
date varchar(10)not null, synopsis VARCHAR(120), inlaegg varchar(8192))');

  插入一条记录:

$sqldb = sqlite_open("../db/ac.db");
sqlite_query($sqldb, "INSERT INTO isvs VALUES ('$isvurl' , '$isvname', '$comment')");

  并选择数据:

清单 7. 从 SQLite 数据库中选择数据
$sqldb = sqlite_open("www/db/ac.db");
$results = sqlite_query($sqldb, "SELECT * FROM isvs order by isvurl asc ");
   
while (list($isvurl, $isvname) = sqlite_fetch_array($results)) {
  sqlite_close($sqldb);

使用 SQLite 和数据库抽象层

  两个先进的开源数据库抽象层对 SQLite 提供支持:PEAR::DB,它们包含在 PHP V5 中,并且被认为是更轻量级的 ezSQL。通过预先使用 PHP 扩展和应用程序库 (PEAR) 或 ezSQL,可将 SQLite 用于应用程序的快速复原,在以后需要时,可以将其无缝转向更具工业性质的数据库。

清单 8. 使用 ezSQL 和 SQLite
$users = $db->get_results("SELECT name, age FROM table1");
foreach ( $users as $user )
{
            echo $user->name;
            echo $user->age;
}

城中另一个游戏

  SQLite 不是惟一的开源嵌入式数据库引擎。如果 SQLite 不能满足您的要求,请使用 Derby(是 Apache 孵化器项目)和 Cloudscape(IBM 公司的 Derby 商业版本,包括 IBM 支持和服务)。Cloudscape 于 1996 年诞生于 Cloudscape 公司。三年以后,Informix 软件公司并购了 Cloudscape,2001 年,IBM 并购了 Informix 软件公司的数据库资产,其中包括 Cloudscape。去年,IBM 将此代码像 “Derby”一样作为孵化器项目献给了 Apache Software Foundation。

  Derby 是100% 的 Java 编程语言关系数据库,并提供了存储过程和触发器,行级锁定,可以执行事务提交和回退操作,并支持加密。

  最近,Zend 公司为 IBM 发布了 Zend Core,该软件可以看作是基于 PHP V5 的解决方案,其中包括用于 Cloudscape 的 PHP 扩展和绑定的 Cloudscape 数据库服务器。


SQLite 使用注意事项

  在确定是否在应用程序中使用 SQLite 之前,应该考虑以下几种情况:

  • 目前没有可用于 SQLite 的网络服务器。从应用程序运行位于其他计算机上的 SQLite 的惟一方法是从网络共享运行。这样会导致一些问题,像 UNIX® 和 Windows® 网络共享都存在文件锁定问题。还有由于与访问网络共享相关的延迟而带来的性能下降问题。
  • SQLite 只提供数据库级的锁定。虽然有一些增加并发的技巧,但是,如果应用程序需要的是表级别或行级别的锁定,那么 DBMS 能够更好地满足您的需求。
  • 正如前面提到的,SQLite 可以支持每天大约 100,00 次点击率的 Web 站点 —— 并且,在某些情况下,可以处理 10 倍于此的通信量。对于具有高通信量或需要支持庞大浏览人数的 Web 站点来说,应该考虑使用 DBMS。
  • SQLite 没有用户帐户概念,而是根据文件系统确定所有数据库的权限。这会使强制执行存储配额发生困难,强制执行用户许可变得不可能。
  • SQLite 支持多数(但不是全部)的 SQL92 标准。不受支持的一些功能包括完全触发器支持和可写视图。请参阅 unimplemented SQL92 features

  如果您感到其中的任何限制会影响您的应用程序,那么您应该考虑使用完善的 DBMS。如果您可以解除这些限制问题,并且对快速灵活的嵌入式开源数据库引擎很感兴趣,则应重点考虑使用 SQLite。

  一些能够真正表现 SQLite 优越性能的领域是 Web 站点,可以使用 SQLite 管理应用程序数据、快速应用程序原型制造和培训工具。


结束语

  由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,它将为那些以前无法提供用作持久数据的后端的数据库的应用程序提供了高效的性能。现在,没有必要使用文本文件来实现持久存储。SQLite 之类的嵌入式数据库的易于使用性可以加快应用程序的开发,并使得小型应用程序能够完全支持复杂的 SQL。这一点对于对于小型设备空间的应用程序来说尤其重要。

  嵌入式数据库对于加快应用程序开发也很重要,尤其是在用于数据库抽象层(例如 PEAR::DBezSQL)时。最后,SQLite 正在积极开发中,未来一定会有新的功能,会对开源社区更有用。

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • 请访问 SQLite,以下载最新版本的 SQLite、命令行界面、文档和最新消息。
  • 下载 SQLiteManager,使 SQLite 数据库管理更方便。
  • PHP.net下载包括 SQLite 的 PHP V5。
  • 请参阅 developerWorks 上的文章“ 审计 PHP,第 1 部分: 理解 register_globals”,了解开发人员创建 PHP 应用程序时需要牢记的一些基本问题。
  • PHP 简介”是对 PHP 脚本语言的一个简要介绍,并讨论了 PHP 的起源、功能及其使用的平台。
  • PHP 例解,第 1 部分”是系列文章中第一部分,它介绍了 PHP 的一些基础知识。描述了包括作者页和前端的 Webzine,在作者页中,内容提供者可以输入文章的正文,前端用于将这些内容介绍给全世界的读者。
  • 学习 PHP,第 1 部分” 是由三个部分组成的文章列系中的第 1 部分,通过记录文档工作流系统的构建过程,全面介绍 PHP,从文件系统的最基本的 PHP 脚本,到使用数据库和流。
  • 可以从 The PHP Extension and Application Repository获得 PEAR::DB 数据库抽象层。
  • 请访问 jvmultimedia,下载 ezSQL 数据库抽象层。
  • 请购买 Chris Newman 撰写的 SQLite 一书,该书主要介绍了开源的嵌入式数据库。
  • 了解关于 Apache 孵化项目 DerbyIBM Cloudscape的更多信息。
  • 请下载包括 Cloudscape 的 combined PHP V5 binary distribution
  • 请参阅 developerWorks 的 开源专区,了解更多的 how-to 信息、工具和项目更新,帮助您使用开源技术进行开发,并将这些技术用于 IBM 的产品中。
  • 使用 IBM 试用软件改进您的下一个开源开发项目,可以通过下载或从 DVD 中获得这些软件。
  • 通过参与 developerWorks blogs 加入 developerWorks 社区。

关于作者

  Nils-Erik Frantzell 是一名位于圣克鲁斯的加州大学的大学四年级学生。他的兴趣包括数据库(尤其是内部数据库)、信息管理、Web 技术以及一些计算机硬件。他的业余爱好是饲养热带鱼和欣赏电子音乐。

 

本文转自:http://www.ibm.com/developerworks/cn/opensource/os-sqlite/

转载于:https://www.cnblogs.com/renzo/archive/2012/01/07/2315399.html

추천

출처blog.csdn.net/weixin_34161029/article/details/94250105