پنجشنبه, ۹ اسفند, ۱۴۰۳ / 27 February, 2025
مروری بر دیتابیس SQLite

وقتی صحبت از دیتابیسهای رابطهای میشود، توسعهدهندگان نرمافزار و مدیران سیستم بهیاد MySQL و POstgreSQL میافتند. ایندودیتابیس، هر چند بسیار قدرتمند هستند، اما در محیطهای کوچکتر، وقتی نیاز به یک دیتابیس سبک و سریع داریم، کارا نیستند. بنابراین اینجاست که SQLite خودش را نشان میدهد. بسیاری از محصولات منبعباز و تجاری از این دیتابیس در نرمافزار خود استفاده کردهاند و احتمال میرود محبوبترین دیتابیس پیادهسازی شده در نرمافزارها و اسکریپتهای فعلی دنیا باشد.
نیازمندیهای این دیتابیس جمع و جور بسیار اندک است، دستگاههایی مثل تلفن همراه، بازیهای رایانهای و پخشکنندههای قابل حمل صدا و تصویر میتوانند کتابخانههای بزرگ داده خود را در SQLite قرار دهند. با وجود حجم کمی که این دیتابیس اشغال میکند، بیشتر قابلیتهای استاندارد SQL-۹۲ را پیادهسازی کرده است و اگر با دیگر دیتابیسها کار کرده باشیم، کار کردن با آن ابدا دشوار نخواهد بود. سادگی آن باعث میشود کارکردن با دیتابیس برای کسی که تازه وارد دنیای SQL شده است نیز دشوار نباشد.
آخرین نسخه SQLite، نسخه ۳ آن است که میتوان بستههای نصب آن را برای ویندوز، BSD و لینوکس دریافت کرد. در CentOS، Mac OS X و Open BSD بهصورت پیشفرض نصب شده است و نیازی به نصب مجدد آن نیست.
کتابخانه SQLite مستقیما میتواند در برنامههای C و ++C قرار بگیرد. پایتون نیز از نسخه ۲.۵ و پیاچپی به صورت خودکار از آن پشتیبانی میکنند. برای استفاده از طریق Perl باید DBI و DBD::SQLite را نصب کرد.
از آنجا که هیچ سروری در این دیتابیس وجود ندارد، میتوان مستقیما و از طریق خط فرمان، مسیر فایل اجرایی را وارد و دیتابیس مورد نظر را ساخت:
$ sqlite۳ servers.sqlite۳
SQLite version ۳.۷.۱۴.۱ ۲۰۱۲-۱۰-۰۴ ۱۹:۳۷:۱۲
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.sqlite۳"
printf "Hostname: "
read _HOSTNAME
printf "۰۳۹;s IP Address: "
read _IP
printf "۰۳۹;s role: "
read _ROLE
sqlite۳ "INSERT INTO Servers(Hostname, IPAddress, Role)
VALUES(۰۳۹;۰۳۹;, ۰۳۹;۰۳۹;, ۰۳۹;۰۳۹;)"
اگر این اسکریپت را اجرا کنیم، یکی دو رکورد در دیتابیسمان ذخیره خواهد شد.
$ ./server_add.sh
Hostname: mx۱
mx۱۰۳۹;s IP Address: ۱.۲.۳.۴
mx۱۰۳۹;s role: Mail
$ ./server_add.sh
Hostname: www۱
www۱۰۳۹;s IP Address: ۲.۳.۴.۵
www۱۰۳۹;s role: Web
دستور sqlite۳ میتواند یک عبارت SQL را با اجرای آرگومان سومی بعد از نام فایل اجرا کند. انتهای دستور دوباره نقطه ویرگول قرار داده میشود.
$ sqlite۳ servers.sqlite۳ "SELECT * FROM Servers"
mx۱|۱.۲.۳.۴|Mail||
www۱|۲.۳.۴.۵|Web||
اسکریپتهای شلی را به همین ترتیب میتوان ایجاد کرد که کارهای مختلف مدیریت سیستم را انجام دهد و حتی برنامههایی بسیار ساده با قابلیت ذخیره گزارش داشته باشیم.
در مثال بعدی، بهطور گستردهتری از دیتابیسی که ساختهایم استفاده خواهیم کرد. اسکریپت ساخته شده را به کمک Cron در فواصل زمانی مختلف اجرا میکنیم. این اسکریپت سرورهای شبکه را چک و ستون Status و Timestamp هر سرور را در دیتابیس بهروز میکند.
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;
my = "servers.sqlite۳";
my = DBI-»connect(
"DBI:SQLite:",
undef, undef,
{ RaiseError =» ۱ }
) or die "Can۰۳۹;t connect to database: ::errstr";
sub server_check {
my (, , ) = @_;
print "Add check logic based on hostname, ip and server role
";
return ۱;
}
my = -»selectall_arrayref("SELECT * FROM Servers");
foreach my (@) {
variables
my (, , , , ) = @;
my = server_check(, , );
if( » ۰) {
= ۰۳۹;good۰۳۹;;
} else {
= ۰۳۹;bad۰۳۹;;
}
current
my = -»prepare(
"UPDATE Servers SET Status = ?, Timestamp = ?" );
-»execute(, time());
}
-»disconnect();
این برنامه منطق کافی برای تشخیص مقدار صحیح را ندارد و همواره True را قرار میدهد. با استفاده از Curl، LWP یا ابزارهای دیگر میتوان سابروتین مربوط را ایجاد کرد.
مثال بعدی، نرمافزار کوچکی است که با استفاده از PHP نوشته شده است. از طریق افزونه PDO میتوان از SQLite استفاده کرد. PDO شباهت زیادی به ماژول DBI در پرل دارد که در مثال قبلی از آن استفاده شد. قطعه کد زیر را ببینید:
«?php
try {
= ۰۳۹;servers.sqlite۳۰۳۹;;
= new PDO("sqlite:");
= -»prepare( "SELECT * FROM Servers" );
-»execute();
} catch (Exception ) { die (); }
?»
نرمافزارها و برنامههای تحت وب زیادی وجود دارد که مدیریت دیتابیسهای SQLite را بسرعت و بسادگی انجام میدهد. یکی از برنامههای تحت وب مدیریت SQL، Adminer است که MySQL، PostgreSQL، MSSQL، Oracle و SQLite را در فهرست پشتیبانی خودش دارد.
از SQLite میتوان در پروژههای بزرگی مثل نرمافزارهای تحت وب استفاده کرد تا در مصرف منابع سیستمی صرفهجویی شود. هر چند باید محدودیتهای استفاده از SQLite را شناخت و آنها را بدرستی استفاده کرد. SQLite امکان دسترسی از طریق چند پروسس همزمان را میدهد و مکانیزم قفل کردن خاص خودش را دارد، اما دقت دیگر موتورهای دیتابیس از جمله PostgreSQL بالاتر است. ایندیتابیسها همچنین پدیدهای بهنام سطوح دسترسی و احراز هویت را ندارند و این یکی از نقصهای فایلهای SQLite بهشمار میرود.
محمدرضا قربانی
ایران مسعود پزشکیان دولت چهاردهم پزشکیان مجلس شورای اسلامی محمدرضا عارف دولت مجلس کابینه دولت چهاردهم اسماعیل هنیه کابینه پزشکیان محمدجواد ظریف
پیاده روی اربعین تهران عراق پلیس تصادف هواشناسی شهرداری تهران سرقت بازنشستگان قتل آموزش و پرورش دستگیری
ایران خودرو خودرو وام قیمت طلا قیمت دلار قیمت خودرو بانک مرکزی برق بازار خودرو بورس بازار سرمایه قیمت سکه
میراث فرهنگی میدان آزادی سینما رهبر انقلاب بیتا فرهی وزارت فرهنگ و ارشاد اسلامی سینمای ایران تلویزیون کتاب تئاتر موسیقی
وزارت علوم تحقیقات و فناوری آزمون
رژیم صهیونیستی غزه روسیه حماس آمریکا فلسطین جنگ غزه اوکراین حزب الله لبنان دونالد ترامپ طوفان الاقصی ترکیه
پرسپولیس فوتبال ذوب آهن لیگ برتر استقلال لیگ برتر ایران المپیک المپیک 2024 پاریس رئال مادرید لیگ برتر فوتبال ایران مهدی تاج باشگاه پرسپولیس
هوش مصنوعی فناوری سامسونگ ایلان ماسک گوگل تلگرام گوشی ستار هاشمی مریخ روزنامه
فشار خون آلزایمر رژیم غذایی مغز دیابت چاقی افسردگی سلامت پوست