Italian community of Lazarus and Free Pascal
Programmazione => Databases => Topic aperto da: SB - Giugno 14, 2019, 05:59:32 pm
-
Sto migrando dei vecchi progetti scritti in Delphi e vorrei fare qualcosa che vada bene anche su Linux
Mi servirebbe un DBMS stand-alone (da includere nelle applicazioni, senza necessità del server) multipiattaforma (almeno Windows Linux)
Da utilizzare via SQL (che sia più standard possibile), multiutente, transazionale, indicizzato
Vedendo un po' cosa è supportato dal FreePascal, mi starei orientando su Firebird (che eventualmente avrebbe anche la versione con server)
Mi confermate che è un buon prodotto con le caratteristiche suddette?
Avete altri suggerimenti?
Si usa la libreria SqlDB o mi consigliate altro?
-
Firebird è sicuramente una buona scelta, non ci sono dubbi.
Per librerie accesso SqlDB o Zeos sono tutte e 2 stabili.
Edit:
sulla conformità ansi ho trovato questo
https://www.firebirdsql.org/en/sql-conformance/
-
Io ti consiglio il connubio firebird / zeos (lo uso con successo da almeno 6/7 anni e non tornerei indietro)
-
ok grazie :D
Inizio a provare Firebird
-
Purtroppo sembra che Firebird non gestisca l'accesso contemporaneo al database. Da quel che capisco la versione embedded prevede l'utilizzo da parte di un singolo utente.
A me servirebbe qualcosa che gestisca la multiutenza, da poter usare anche nei casi in cui non posso installare nulla sul server, come ad esempio una applicazione web
Una alternativa sembra essere Sqlite che gestisce la multiutenza rendendo sequenziali le scritture mettendo un lock al file del database.
Non è il massimo, ma non dovendo gestire grandi numeri (altrimenti mi orienterei diversamente) mi sembra accettabile
Sqlite sembra essere un po' limitato nelle funzionalità
Sembra che php gestisca nativamente l'accesso a Sqlite
Cosa pensate di Sqlite?
-
Una alternativa sembra essere Sqlite che gestisce la multiutenza rendendo sequenziali le scritture mettendo un lock al file del database.
Non è il massimo, ma non dovendo gestire grandi numeri (altrimenti mi orienterei diversamente) mi sembra accettabile
mettere il lock al database quando si scrive non è cosa da poco...
potrebbe accadere che se un client va in crash (o loop particolarmente lungo) mentre c'è il lock, si piantano tutte le altre applicazioni degli altri utenti
potresti vedere se riesci ad identificare un pc client che possa fare da server per firebird, noi di solito facciamo in questo modo
firebird in fondo non richiede molte risorse e, se un giorno l'applicazione dovesse crescere, beh... si tratta di acquistare un i7 e metterlo da qualche parte a fare da server :)
-
Se non puoi installare nulla allora forse conviene orientarsi su sqlite, diversamente sono concorde su tutto quello che ti ha detto nomorelogic
-
mettere il lock al database quando si scrive non è cosa da poco...
potrebbe accadere che se un client va in crash (o loop particolarmente lungo) mentre c'è il lock, si piantano tutte le altre applicazioni degli altri utenti
Hai ragione, il crash di un client potrebbe tenere bloccato tutto.
Dopo la tua osservazione ho letto qualcosa a tale proposito. Sembra che nelle ultime versioni di sqlite abbiano curato questo aspetto cercando di gestire meglio i lock per aumentare la concorrenza.
Però servirebbe qualche prova per vedere cosa succede in caso di problemi.
L'unica soluzione è provare ad usarlo.
Se i componenti Lazarus sono sufficientemente generici per adattarsi ai vari database, spero di non avere grossi problemi a passare da sqlite a firebird o vicerversa
Non ho grandi esigenze. Mi basta un DBMS per piccole applicazioni desktop e per siti web poco frequentati dove non si voglia pagare un mysql.
-
visto che sei nella fase di prova volevo segnalarti questo link
https://wiki.lazarus.freepascal.org/ZMSQL
si tratta di un "DB" che memorizza i dati su file CSV e li gestisce con un TBufDataset dove è stato implementato un SQL abbastanza primitivo
PS:
l'ho provato ma non ci ho mai fatto una vera applicazione
-
visto che sei nella fase di prova volevo segnalarti questo link
https://wiki.lazarus.freepascal.org/ZMSQL
si tratta di un "DB" che memorizza i dati su file CSV e li gestisce con un TBufDataset dove è stato implementato un SQL abbastanza primitivo
PS:
l'ho provato ma non ci ho mai fatto una vera applicazione
Tempo fa me ne interessai, sai se è mantenuto oppure è un progetto abbandonato?
-
https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/
qualcuno a marzo ha fatto una fix per lazarus 1.8.4 (quindi credo per FPC 3.0.x)
-
Valuterò anche questo. Grazie
-
https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/
qualcuno a marzo ha fatto una fix per lazarus 1.8.4 (quindi credo per FPC 3.0.x)
Capito grazie mille ;)
-
Ora mi uccidono ....MariaDb?Non lo hai considerato?
-
Mi era passato per la testa, ma avevo trovato commenti nei forum che ne sconsigliavano l'utilizzo.
Purtroppo sembra che la versione embedded non sia più distribuita. Probabilmente è troppo oneroso adattare il sistema client/server
-
Perdonate, perchè non usare PostgreSQL?
Dice wikipedia: "PostgreSQL è una reale alternativa sia rispetto ad altri prodotti liberi come MySQL, Firebird SQL e MaxDB che a quelli a codice chiuso come Oracle, IBM Informix o DB2 ed offre caratteristiche uniche nel suo genere che lo pongono per alcuni aspetti all'avanguardia nel settore dei database."
Tra l'atro è anche presente da sempre nell' IDE di Lazarus.
-
Credo che il problema sia che PostgreSQL non ha una versione embedded
-
Non mi sono mai cimentato con PostgreSQL, quindi ovvimente parlo da profano ma uso un' applicazione scientifica abbastanza complessa , ovviamente comprata, che si poggia proprio su questo db, non devo configuare nulla, il progamma "gira" e il data base sottostante nemmeno "si vede", mi si passi il termine .
-
Di PostgreSQL se ne parla bene anche se è poco conosciuto (o forse se ne parla bene perchè è poco conosciuto :-\ )
Purtroppo, che io sappia, non ha una versione embedded e quindi per le mie esigenze l'ho dovuto scartare a priori.
Sto provando l'accoppiata Zeos/SQLite per una applicazione web e sembra rispondere abbastanza bene. Non l'ho ancora testato a fondo e sotto carico.
-
L'accoppiata Zeos/SQLite, mi si passi il termine, la sto usando da qualche tempo per dei sw di office automation e finora non mi ha mai dato problemi - in passato avevo fatto delle prove con i file dbf ma c'era un problema di lentezza esasperante quando i dati erano tanti - .
Il bello è la "portabilità: si mettono dati ed eseguibile su una pennetta usb e tutto girà su qualsiasi pc.
-
Un'alternativa è usare i file .dbf, sono implementati su lazarus* e l'applicativo non necessita di procedure di installazione fuori dall'ordinario .
Purtuttavia la semplicità d'uso poi va cozzare con la velocità: quando il numero di record supera le migliaia le performances crollano e se poi lì'applicativo deve girare in un ambiente condiviso le cose non migliorano.
Ho provato ad usare i file di acces ma da una certa versione di lazarus in poi, ora non ricordo quale, la connessione non funzionava piu' anche se mi pare che le ultime versioni abbiamo sanato questo problema.
*
https://wiki.freepascal.org/Lazarus_Tdbf_Tutorial
-
Un'alternativa è usare i file .dbf, sono implementati su lazarus* e l'applicativo non necessita di procedure di installazione fuori dall'ordinario .
Purtuttavia la semplicità d'uso poi va cozzare con la velocità: quando il numero di record supera le migliaia le performances crollano e se poi lì'applicativo deve girare in un ambiente condiviso le cose non migliorano.
Ho provato ad usare i file di acces ma da una certa versione di lazarus in poi, ora non ricordo quale, la connessione non funzionava piu' anche se mi pare che le ultime versioni abbiamo sanato questo problema.
*
https://wiki.freepascal.org/Lazarus_Tdbf_Tutorial
Sconsiglio l'uso dei DBF per una questione di semplicità d'implementazione, è molto più semplice da implementare e mantenere l'uso di un qualsiasi DBMS.
Sconsiglio access per questione di portabilità sui vari sistemi operativi.
Mi sa che per le necessità elencate possano andare bene solo SQLite e Firebird.