ソース組み込みデータベースのSQLiteを開くためにはじめに

 

  説明:商用アプリケーション数十年前には出てくるので、データベースは、ソフトウェアアプリケーションの主要な構成要素となります。クリティカルなデータベース管理システムであるように、彼らは非常に大きくなり、システムリソースのかなりの量を取り、管理の複雑さを増します。徐々にモジュラーソフトウェア・アプリケーションでは、新しいデータベースには、伝統的な大規模で複雑なデータベース管理システムよりも優れて適しているでしょう。埋め込みデータベースは、アプリケーション・プロセスにおいて直接実行ゼロ設定(ゼロ設定)動作モードを提供し、リソースの消費量は非常に小さいです。この記事では、人気のSQLiteデータベースエンジンを導入し、アプリケーション開発でそれを使用する方法について説明します。

  D.・リチャード・ヒップのSQLiteはCで書かれている、オープンソースは、データベースエンジンを埋め込み。これは、外部依存関係を持たない、完全に独立しています。これは、PHP V5に建てられたPHP V4.3で導入オプションとしてあります。SQLiteは、ほとんどのSQL92標準規格をサポートするすべての主要なオペレーティングシステム上で動作し、ほとんどのコンピュータ言語をサポートしています。また、SQLiteの非常に堅牢。その作成者は、保守的にSQLiteのと推定されるまで100,00回毎日負担がWebサイトを打つまで扱うことができ、時にはSQLiteは上記の数値に10回負荷を処理することができます。

機能

  SQL92標準のSQLiteのサポートは、索引、制約、トリガー、ビューが含まれます。SQLiteは、アトミック一貫独立性と耐久性(ACID)トランザクション(バックはACIDに関するより多くの情報を提供します)のために外部キー制約が、サポートをサポートしていません。

なぜ埋め込みますか?

  操作の独自のモードから組み込みデータベース名。このデータベースは、クライアント - サーバ構成に関連するオーバーヘッドをなくし、アプリケーション・プロセスに埋め込まれます。組み込みデータベースは、実行時に、彼らはより少ないメモリを必要とし、実際に軽量です。彼らはそれが効果がより理想的で、より高速で、組み込みデバイス用に書かれた細いコードを使用しています。Embeddedオペレーティングモードは、組み込みデータベースを簡単にではなく、元のテキストファイルに頼るよりも、SQLを介してアプリケーションデータを管理することができます。一方が有効になっており、スナップショットを実行することができるように、組み込みデータベースはまた、動作のゼロコンフィギュレーションモードを提供します。

  あなただけのユーザーアカウントの概念がない、ファイルシステムに依存し、SQLiteデータベースの権限を知っています。そこのSQLiteデータベースレベルのロック、ないネットワークサーバー、および(すべてではなく)SQL92標準のほとんどを達成することができます。その他の主な機能のSQL92標準は、外部キーであると制約を確認してください。何を学ぶSQL92機能が実装されていません。

  これは、トランザクションがあることを意味原子彼らは、完全にまったく実行したりしていないので、。トランザクションは、一貫性の矛盾した状態で、データベースが予約されていないので、。トランザクションまたは独立したので、同時に同じデータベースに対して操作を実行するには、2つのトランザクションがある場合、二つのトランザクションは非干渉です。そして、トランザクションがある永続的なデータベースは、データや損傷を失うことなく、クラッシュや停電を乗り切ることができるように、。

  排他的およびデータベースレベルのロックの共有を介して独立を達成するために、SQLiteのトランザクション処理。これは、とき、複数のプロセスやスレッドが同時に同じデータベースからデータを読み取ることができますが、一つだけがデータを書き込むことができます。プロセスまたはスレッドのデータベースへの書き込み操作を実行する前に、排他ロックを取得する必要があります。排他ロックを発行した後、他の人は、読み取りまたは書き込み操作が再び起こることはありません。

  SQLiteのサイトの完全な記録セマンティクスをロックSQLiteの


内部構造

  SQLコンパイラ、カーネル、および後端添付ファイル:内部的には、SQLiteは、以下のコンポーネントで構成されています。仮想マシンおよび仮想データベースエンジン(VDBE)を使用してSQLiteの、デバッグ、簡単にSQLiteのカーネルを変更し、拡張します。すべてのSQL文を読みやすいにコンパイルされ、アセンブリは、SQLiteの仮想マシンで実行することができます。

  図の内部構成。1. SQLiteの

  データベースの2 TBサイズまでSQLiteのサポートは、各データベースは、単一のディスクファイルに完全に格納されています。これらのディスクファイルは、異なるバイトオーダーのコンピュータ間で移動させることができます。これらのデータはディスク上のB +木(B +ツリー)データ構造に格納されます。ファイルシステムに基づいて、その許可を得るためにSQLiteデータベース。

データの種類

  SQLiteは、静的なデータ型が、列関係の使用をサポートしていません。これは、そのデータ型が記載されているプロパティを持っていないことを意味し、属性データそのものを持っています。データベースに値は、SQLiteは、その種類を確認します。関連する列の種類が一致しない場合、SQLiteはカラム型に値を変換することを試みます。独自のメモリを有するようなタイプの変換されない場合、値。

  SQLiteのサポートNULLINTEGERREALTEXTおよびBLOBデータタイプ。


SQLiteの管理

  SQLiteはのダウンロードに付属しているデータベース管理用のコマンドラインインターフェイスこのプログラムは、コマンドラインのデータベース名を介して起動することができ、あなたは次のように新しいデータベースとテーブルを作成することができます。

リスト1.新しいデータベースとテーブルを作成します。
C:\ minblogg> sqlite3のC:\ minblogg \ WWW \ DB \ alf.db 
SQLiteバージョン3.2.1 
命令のための".help"を入力します
sqliteの> mytableテーブル(名前はvarchar(40)、年齢SMALLINT)を作成します。
SQLiteは> mytableは値(「ニルス-エリック」、23)に挿入します。
SQLiteは> mytableはから*選択します。
ニルス・エリック| 23 
のsqlite>

  あなたは、その後、それはテーブルとアーキテクチャを示しています、データベースを再び開き、値を挿入および削除に進むことができます。

2.リストテーブルとアーキテクチャのリスト
 
C:\ minblogg> sqlite3のC:\ minblogg \ WWW \ DB \ alf.db 
SQLiteバージョン3.2.1は、
命令のための".help"を入力します
sqliteのは> .tables 
mytableは
sqliteのを> SELECT * FROM mytableはから。
ニルス・エリック| 23 
のsqlite>は.schema 
mytableテーブル(名前はvarchar(40)、年齢SMALLINT)を作成します。
sqliteの>

  SQLiteはまた、あなたが任意のSQLiteデータベースの現在のステータスに関する詳細情報を表示することを可能にするコマンドラインデータベースアナライザが付属しています。

3. SQLiteのアナライザリスト
 
C:\ minblogg> sqlite3_analyzer WWW \ DB \ alf.db 
mytableテーブルを分析... 
テーブルsqlite_master ...分析
のwww \デシベル\のalf.db用/ **ディスク容量の使用率レポートを
*** 2005-Apr-のよう24夜06時56分40秒
バイトのページ・サイズ.................... 1024 
全体のファイルのページ(測定)... 2 
全体のファイルのページ( ..)2計算され
たデータを格納ページ................. 2 100.0% ヘッダあたり)フリーリストのページを.... 0 0.0%の
フリーリスト上のページは、(計算します).... 0 0.0%の
オート真空オーバーヘッドのページ......... 0 0.0%の
データベース内のテーブルの数...... 2 
インデックスの数........ ............. 0 
という名前のインデックスの数............... 0
自動的に生成されたインデックス....... 0 
バイト単位のファイルサイズ............. 2048 
記憶されたユーザペイロードのバイト.......... 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 
消費ストレージのバイト............. 1024 
ペイロードのバイト...... ................ 13 1.3%
エントリーあたりの平均ペイロード............. 13.00 
エントリ当たり最大ペイロード......... .... 13 
オーバーフローを使用エントリ............. 0 0.0%
使用される主要なページ......... ........... 1 
オーバーフローページが................... 0使用
使用総ページ数を............ .......... 1 
プライマリーページ上の未使用のバイト......... 999 97.6%で
オーバーフローページ上の未使用のバイト........ 0 
すべてのページ上の未使用のバイト... .......... 999 97.6パーセント

  それは、データベース管理者にとって大きな利便性をもたらすことができるように、データベースを管理するためのコマンドラインインターフェイスを使用して、完全にできるので。多くの優れたWebベースのSQLiteデータベース管理システムがあります。PHPベースがあるたSQLiteManagerは


バックアップ

  2つの方法で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