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]