SQLite - RiminiLUG

Transcript

SQLite - RiminiLUG
L in ux
D a y
20 05
SQLite:
il DataBase tascabile
Alessandro Carichini
[email protected]
Rimini 27 Novembre
Linux Day 2005
L in ux
D a y
20 05
SQL è uno standard
●
Ogni RDBMS moderno contiene SQL
●
Esistono diverse versioni (ISO)
●
–
SQL 1992
–
SQL 1999
–
SQL 2003
Conoscerne la sintassi ci permette
l'interrogazione di qualsiasi RDBMS che lo
implementa
SQLite: una panoramica
●
Libreria C
Motore SQL (SQL-92*)
●
Singolo File
●
No Server, No Client
●
No Account
●
OpenSource (Public Domain)
●
Crossplatform
●
Nessuna Configurazione da effettuare
L in ux
●
20 05
sviluppata nel 2000 da Richard Hipp
D a y
–
SQLite: SQL-92*
ALTER TABLE
–
GRANT e REVOKE
–
RIGHT OUTER JOIN
–
Transazioni Nidificate
–
TRIGGER con alcune limitazioni
–
VISTE (VIEW) in sola Lettura
L in ux
–
20 05
Caratteristiche SQL NON Implementate:
D a y
●
L in ux
D a y
20 05
Lo scopo del Dr Hipp
●
Semplice da Amministrare
●
Semplice da Operare
●
Semplice da usare nei programmi
●
Semplice da mantenere e personalizzare
SMALL, FAST & RELIABLE
(piccolo, veloce e affidabile)
L in ux
D a y
20 05
SQLite: Linguaggi supportati
●
C / C++
●
Perl
●
PHP
●
TCL
●
JAVA
●
FreePascal / Delphi
●
Basic / Gambas
●
Python
●
Ruby
●
.NET
SQLite: quale versione?
L in ux
D a y
20 05
●
●
Versione 2.x
–
“Stable”
–
Non è compatibile con la 3.0
–
Maggiormente implementata
Versione 3.x
–
“Testing” fino a poco tempo fa
–
Più potente con maggiori features
–
Non è compatibile con la 2.0
–
Ancora giovane e poco implementata
SQLite 2: Caratteristiche
●
Versione attuale: 2.8.x
●
Typeless
–
Ogni campo è TEXT tranne PRIMARY KEY
L in ux
D a y
20 05
●
–
Attenzione all'operatore + su campi che vengono
considerati ALFANUMERICI meglio usare ||
La Tipizzazione è facoltativa
●
PRIMARY KEY è INTEGER (32 bit)
●
Lock in Lettura/Scrittura sul File
SQLite 3: Caratteristiche
Versione attuale: 3.2.x
●
Typeness
L in ux
D a y
20 05
●
–
NULL
–
INTEGER
–
REAL
–
TEXT
●
–
(encoding UTF-8, UTF-16BE, UTF-16LE)
BLOB
●
PRIMARY KEY a 64 bit
●
Lock del File in sola Scrittura
SQLite vs Tutti
Caratteristiche
Versione
SQLite
3,2
Firebird
1,5
Public Domain
S.O.
IPL OpenSource
Pentium
Piattaforma
Unix/ Win32 /
OsX / FreeBSD
Linux/Win32/
Solaris/ OsX /
FreeBSD
Linguaggio
Store Procedure
Triggers
Views
Transactions
SMP / 64Bit
SQL92 Entry*
SI
SI
SI (lettura)
ACID
SI*
SQL92
SI
SI
SI
ACID
SI*
L in ux
D a y
20 05
Licenza
Hardware
MySQL
4,1
GPL OpenSouce /
Commerciale
S.O.
Linux / Win32
SQL92
Intermedio
NO
NO
SI*
NO
PostgreSQL
8,1
BSD OpenSource
S.O.
Unix / Win32
SQL 99
SI
SI
SI
ACID
SI / SI
...e le performance?
25.000 “INSERT INTO” ecco la classifica:
SQLite 2.7
0,91 sec.
–
MySQL 3.2
2,18 sec.
–
PostgreSQL 7,1
4,90 sec.
L in ux
D a y
20 05
–
Fonte: http://www.sqlite.org/speed.html
SQLite: Quando Usarlo
●
Embedded Devices
–
●
Siti Web
L in ux
D a y
20 05
–
●
●
Palmari (PalmOS), LinuxBox, etc..
Soprattuto se in PHP5
Alternativa ai Text-Based
–
XML
–
Berkeley DB
Applicazioni Ad-Hoc che utilizzino un DB
SQLite: Quando NON Usarlo
●
L in ux
D a y
20 05
●
Applicazioni Client/Server
–
Manca Gestione Account
–
Locking poco flessibile
Siti Web con molto traffico
–
●
Continui R/W sul file
Su File System con limitazioni di dimensione
del singolo file (Fat32)
SQLite: Installazione
●
Binario/Sorgente SQLite (www.sqlite.org)
–
●
Libreria Dinamica (API)
L in ux
D a y
20 05
–
●
sqlite
libsqlite.so
Eventuale installazione del modulo che
aggangia la libreria in C per il proprio
linguaggio preferito
SQLite: Amministrazione
●
Command-Line
sqlite e sqlite3
www.sqlite.org
●
SQLite Browser (Supporta solo la Versione 3.0)
20 05
D a y
L in ux
GUI (QT)
sqlitebrowser.sourceforge.net
●
WEB
SQLiteManager
www.sqlitemanager.org
SQLite Command-Line
●
Come tutte le command-line dei DBServer
–
L in ux
D a y
20 05
●
mysql, isql e psql
Amministrazione completa:
–
Comandi SQL
–
Import / Export di un DB
●
Esempio: Conversione dalla Versione 2.x alla 3.x
sqlite OLD.DB .dump | sqlite3 NEW.DB
●
Integrabile in script bash come comando Unix
–
pipe, redirect, etc..
L in ux
D a y
20 05
SQLiteBrowser
L in ux
D a y
20 05
SQLiteManager
Programming: PERL
●
Modulo driver DBI
–
Modulo CPAN
DBD::SQLite2
#!/usr/bin/perl
L in ux
D a y
20 05
use DBI;
$myFileDB = “addressbook.db”;
$dbh = DBI->Connect(“DBI:SQLite2:dbname=$myFileDB”,””,””) or
die(“$DBI::errstr”);
$sth = $dbh->Prepare(“INSERT INTO MYTABLE (NOME) VALUES('ALESSANDRO')”);
if ($sth->Execute() < 0);
{
print “ERROR EXECUTE $DBI::errstr”;
}
$dbh->disconnect();
Programming: PHP
●
PHP5
–
L in ux
D a y
20 05
●
Incluso (se non compilato con –without-sqlite)
PHP4
–
Se compilato con –with-sqlite
–
Libreria PEAR (API)
–
php.ini
extension=”sqlite.so”
–
Da sorgente .php con la funzione dl()
dl(“sqlite.so”)
Esempio in PHP4
<?php
if (!extension_loaded("sqlite")) {
dl("sqlite.so");
}
$hdl = sqlite_open("addressbook.db", 0666, $err);
$res = sqlite_query("select * from MYTABLE", $hdl);
20 05
while ($row = sqlite_fetch_array($res, SQLITE_ASSOC)){
L in ux
D a y
printf("%s",$row{'NOMINATIVO'});
printf("%s",$row{'TELEFONO'});
}
sqlite_close($hdl);
?>
SQLite Extensions
●
SQLiteSecure
Encryption Extension for SQLite
www.voidbrain.com/sqlitesec.html
●
Client/Server extension
20 05
D a y
L in ux
SQLite_on_Sockets
www.it77.de/sqlite/sqlite_sockets.htm
●
uSQLiteServer
SQLite network wrapper
users.libero.it/irwin/
SQLite Based
●
AmaROK: KDE Music Player
amarok.kde.org
●
GNUnet: Ambiente P2P Anonimo
www.gnunet.org
20 05
●
www.bacula.org
D a y
●
L in ux
BACULA: Backup/Restore di PC in LAN
Sql-Scripts: Database di script SQL
www.sql-scripts.com
●
...e molti altri ancora vedere su
www.sqlite.org/cvstrac/wiki?p=SqliteUsers
L in ux
D a y
20 05
Domande ?
L in ux
D a y
20 05
Grazie per l'attenzione
Alessandro Carichini
[email protected]