سفارش تبلیغ
صبا ویژن

مرکز فرهنگی توحید (مسجد امیر المومنین زازران )شهرستان فلاورجان

وقتی صحبت از دیتابیس‌های رابطه‌ای می‌شود، توسعه‌دهندگان نرم‌افزار و مدیران سیستم به‌یاد MySQL و POstgreSQL می‌افتند. این‌دو‌دیتابیس، هر چند بسیار قدرتمند هستند، اما در محیط‌های کوچک‌تر، وقتی نیاز به یک دیتابیس سبک و سریع داریم، کارا نیستند. بنابراین اینجاست که SQLite خودش را نشان می‌دهد. بسیاری از محصولات منبع‌باز و تجاری از این دیتابیس در نرم‌افزار خود استفاده کرده‌اند و احتمال می‌رود محبوب‌ترین دیتابیس پیاده‌سازی شده در نرم‌افزارها و اسکریپت‌های فعلی دنیا باشد.

نیازمندی‌های این دیتابیس جمع‌ و جور بسیار اندک است، دستگاه‌هایی مثل تلفن‌ همراه، بازی‌های‌ رایانه‌ای و پخش‌کننده‌های قابل حمل صدا و تصویر می‌توانند کتابخانه‌های بزرگ داده خود را در SQLite قرار دهند. با وجود حجم کمی که این دیتابیس اشغال می‌کند، بیشتر قابلیت‌های استاندارد

آخرین نسخه SQLite، نسخه 3 آن است که می‌توان بسته‌های نصب آن را برای ویندوز، BSD و لینوکس دریافت کرد. در CentOS، Mac OS X و Open BSD به‌صورت پیش‌فرض نصب شده است و نیازی به نصب مجدد آن نیست.

کتابخانه‌ SQLite مستقیما می‌تواند در برنامه‌های C و ++C قرار بگیرد. پایتون نیز از نسخه 2.5 و پی‌اچ‌پی به صورت خودکار از آن پشتیبانی می‌کنند. برای استفاده از طریق Perl باید DBI و DBD::SQLite را نصب کرد.

از آنجا که هیچ سروری در این دیتابیس وجود ندارد، می‌توان مستقیما و از طریق خط فرمان، مسیر فایل اجرایی را وارد و دیتابیس مورد نظر را ساخت:

SQL-92 را پیاده‌سازی کرده است و اگر با دیگر دیتابیس‌ها کار کرده باشیم، کار کردن با آن ابدا دشوار نخواهد بود. سادگی آن باعث می‌شود کارکردن با دیتابیس برای کسی که تازه وارد دنیای SQL شده است نیز دشوار نباشد.

$ sqlite3 servers.sqlite3

SQLite version 3.7.14.1 2012-10-04 19:37:12

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite»

اگر نام فایل قبلا وجود نداشته باشد، دیتابیس جدیدی ایجاد می‌شود. می‌توان هر پسوندی را برای نام فایل انتخاب کرد. نام‌هایی چونdb. از متداول‌ترین پسوندها برای SQLite است. دستورهای SQL را می‌توان مستقیما وارد سیستم کرد، همچنین می‌توان به پیکربندی دیتابیس و انجام کارهای مدیریتی پرداخت. با تایپhelp. فهرستی از متادستورهای پشتیبانی شده نشان داده می‌شود.

بیایید جدول کوچکی ایجاد کنیم تا اطلاعاتی در مورد سرورهای موجود در شبکه‌مان ذخیره کنیم.

sqlite» CREATE TABLE Servers( Hostname TEXT PRIMARY KEY, IPAddress TEXT, Role TEXT, Status TEXT, Timestamp INT );

sqlite» .tables

Servers

این دستور، همان دستور آشنا و استاندارد SQL است که با نقطه‌ویرگول به پایان رسیده است. SQLite از چند دیتاتایپ پشتیبانی می‌کند: NULL برای خالی بودن، INTEGER و REAL برای اعداد علامت‌دار و ممیز‌دار، TEXT برای متون و BLOB برای فایل‌های باینری.

برخلاف دیگر دیتابیس‌های SQL، SQLite از تایپ دینامیک استفاده می‌کند و دیتاتایپ یک مقدار با خود مقدار تعیین می‌شود و ارتباطی به ظرفش ندارد. در نتیجه می‌توان هر مقداری را در هر ستون قرار داد و کاری به نوع ذخیره شده نداشت.

دستورtable. فهرستی از جداول موجود در دیتابیس را نشان می‌دهد.

حالا می‌توان تعدادی رکورد در جدول‌مان ذخیره کنیم یا این کار را از طریق یک اسکریپت پوسته انجام دهیم.

#!/bin/sh

 

_DB="servers.sqlite3"

 

printf "Hostname: "

read _HOSTNAME

 

printf "${_HOSTNAME}"s IP Address: "

read _IP

 

printf "${_HOSTNAME}"s role: "

read _ROLE

 

sqlite3 $_DB "INSERT INTO Servers(Hostname, IPAddress, Role)

VALUES("${_HOSTNAME}", "${_IP}", "${_ROLE}")"

اگر این اسکریپت را اجرا کنیم، یکی دو رکورد در دیتابیس‌مان ذخیره خواهد شد.

$ ./server_add.sh

Hostname: mx1

mx1"s IP Address: 1.2.3.4

mx1"s role: Mail

 


$ ./server_add.sh

Hostname: www1

www1"s IP Address: 2.3.4.5

www1"s role: Web

دستور sqlite3 می‌تواند یک عبارت SQL را با اجرای آرگومان سومی بعد از نام فایل اجرا کند. انتهای دستور دوباره نقطه ویرگول قرار داده می‌شود.

$ sqlite3 servers.sqlite3 "SELECT * FROM Servers"

mx1|1.2.3.4|Mail||

www1|2.3.4.5|Web||

اسکریپت‌های شلی را به همین ترتیب می‌توان ایجاد کرد که کارهای مختلف مدیریت سیستم را انجام دهد و حتی برنامه‌هایی بسیار ساده با قابلیت ذخیره گزارش داشته باشیم.

در مثال بعدی، به‌طور گسترده‌تری از دیتابیسی که ساخته‌ایم استفاده خواهیم کرد. اسکریپت ساخته شده را به کمک Cron در فواصل زمانی مختلف اجرا می‌کنیم. این اسکریپت سرورهای شبکه را چک و ستون Status و Timestamp هر سرور را در دیتابیس به‌روز می‌کند.

#!/usr/bin/env perl

 


use strict;

use warnings;

use DBI;

my $db = "servers.sqlite3";

my $dbh = DBI-»connect(

"DBI:SQLite:${db}",

undef, undef,

{ RaiseError =» 1 }

) or die "Can"t connect to database: $DBI::errstr";

sub server_check {

my ($hostname, $ip, $role) = @_;

print "Add check logic based on hostname, ip and server role\n";

return 1;

}

my $servers = $dbh-»selectall_arrayref("SELECT * FROM Servers");

foreach my $server (@$servers) {

variables

my ($hostname, $ip, $role, $status, $timestamp) = @$server;

my $rc = server_check($hostname, $ip, $role);

if($rc » 0) {

$status = "good";

} else {

$status = "bad";

}

current

my $sth = $dbh-»prepare(

"UPDATE Servers SET Status = ?, Timestamp = ?" );

$sth-»execute($status, time());

}

$dbh-»disconnect();

این برنامه منطق کافی برای تشخیص مقدار صحیح را ندارد و همواره True را قرار می‌دهد. با استفاده از Curl، LWP یا ابزارهای دیگر می‌توان سابروتین مربوط را ایجاد کرد.

مثال بعدی، نرم‌افزار کوچکی است که با استفاده از PHP نوشته شده است. از طریق افزونه PDO می‌توان از SQLite استفاده کرد. PDO شباهت زیادی به ماژول DBI در پرل دارد که در مثال قبلی از آن استفاده شد. قطعه کد زیر را ببینید:

«?php

try {

$db = "servers.sqlite3";

$dbh = new PDO("sqlite:$db");

 

$servers = $dbh-»prepare( "SELECT * FROM Servers" );

$servers-»execute();

} catch (Exception $e) { die ($e); }

نرم‌افزارها و برنامه‌های تحت وب زیادی وجود دارد که مدیریت دیتابیس‌های SQLite را بسرعت و بسادگی انجام می‌دهد. یکی از برنامه‌های تحت وب مدیریت SQL، Adminer است که MySQL، PostgreSQL، MSSQL، Oracle و SQLite را در فهرست پشتیبانی خودش دارد.

از SQLite می‌توان در پروژه‌های بزرگی مثل نرم‌افزارهای تحت وب استفاده کرد تا در مصرف منابع سیستمی صرفه‌جویی شود. هر چند باید محدودیت‌های استفاده از SQLite را شناخت و آنها را بدرستی استفاده کرد. SQLite امکان دسترسی از طریق چند پروسس همزمان را می‌دهد و مکانیزم قفل کردن خاص خودش را دارد، اما دقت دیگر موتورهای دیتابیس از جمله PostgreSQL بالاتر است. این‌دیتابیس‌ها همچنین پدیده‌ای به‌نام سطوح دسترسی و احراز هویت را ندارند و این یکی از نقص‌های فایل‌های SQLite به‌شمار می‌رود