Autore Topic: Database NoSQL  (Letto 1619 volte)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Database NoSQL
« il: 25 Febbraio 2012, 20:25:13 »
Riprendendo idealmente un OT iniziato con Cesare Di Mauro su iksnet (SQLite e FireBird), vorrei chiedervi cosa ne pensate dei database NoSQL...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Database NoSQL
« Risposta #1 il: 25 Febbraio 2012, 20:45:06 »
molto utili per frequenti operazioni di lettura (siti web), ma disastrosi se l'integrità dei dati è un requisito fondamentale.
In alcuni casi mi è capitato di vederli usare come "cache" in sola lettura di DB enterprise, in cui tutta la parte di data entry è effettuata su un DB relazionale robusto (Oracle ovviamente), e periodicamente viene fatto un "sync" dal DB verso la cache (che poi a sua volta è un DB non relazionale, ma molto veloce ad eseguire query semplici).

L'azienda per cui lavoro, una multinazionale della TV, usa questo genere di sistema a due livelli per erogare i contenuti sui propri siti / applicazioni mobile (parliamo di milioni di utenti unici al giorno).

Comunque ci sono altre applicazioni, questa non è l'unica.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Database NoSQL
« Risposta #2 il: 25 Febbraio 2012, 21:05:47 »
Citazione da: "TheKaneB"
molto utili per frequenti operazioni di lettura (siti web), ma disastrosi se l'integrità dei dati è un requisito fondamentale.
Intendi integrità referenziale o integrità "fisica" dei dati?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Database NoSQL
« Risposta #3 il: 25 Febbraio 2012, 21:40:51 »
L'integrità referenziale non esiste nei db NoSQL: esistono soltanto dati "ammassati" (secondo qualche criterio, a seconda della tipologia di architettura implementata) in qualche modo e che sono veloci da ricercare (per fare un paragone, puoi pensare alla ricerca FullText che viene offerta da alcuni database).

Inoltre non è integrità fisica il loro problema, ma l'integrità dei dati a livello di consistenza. Questi database, infatti, non implementano tecnologie come ACID per le transazioni, per cui è facile che due server / istanze che in parallelo servono le richieste si ritrovino disallineati.

Personalmente non posso che condividere quanto già detto da Antonio: meglio un sistema ibrido, che sfrutti il meglio dei due "mondi". Da una parte l'integrità dei dati offerta dai tradizionali engine SQL, e dall'altra l'enorme facilità di scaling dei sistemi NoSQL. E' l'approccio che utilizza anche Spotify (alla scorsa EuroPython ne hanno parlato alcuni loro sviluppatori).

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Database NoSQL
« Risposta #4 il: 25 Febbraio 2012, 21:51:44 »
Citazione da: "cdimauro"
L'integrità referenziale non esiste nei db NoSQL: esistono soltanto dati "ammassati" (secondo qualche criterio, a seconda della tipologia di architettura implementata) in qualche modo e che sono veloci da ricercare (per fare un paragone, puoi pensare alla ricerca FullText che viene offerta da alcuni database).

Inoltre non è integrità fisica il loro problema, ma l'integrità dei dati a livello di consistenza. Questi database, infatti, non implementano tecnologie come ACID per le transazioni, per cui è facile che due server / istanze che in parallelo servono le richieste si ritrovino disallineati.

Personalmente non posso che condividere quanto già detto da Antonio: meglio un sistema ibrido, che sfrutti il meglio dei due "mondi". Da una parte l'integrità dei dati offerta dai tradizionali engine SQL, e dall'altra l'enorme facilità di scaling dei sistemi NoSQL. E' l'approccio che utilizza anche Spotify (alla scorsa EuroPython ne hanno parlato alcuni loro sviluppatori).

Ne stavo implementando uno e cercavo di capire quale fosse il modo migliore. Tra l'altro non ho avuto la possibilità di studiarli all'Uni per cui sinceramente ne so molto poco.

In ogni caso, il sistema che sto realizzando prevede una (ipotetica?) grande scalabilità. Avevo anche pensato ad un server che wrappava il tutto (il sistema è implementato sotto forma di .so o .dll) in modo da consentire l'uso dei normali comandi SQL e anche l'implementazione di alcune caratteristiche tipiche dei DB "normali" come appunto l'integrità referenziale, anche se credo questo appesantisca non poco il tutto.

Cosa ne pensate?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Database NoSQL
« Risposta #5 il: 25 Febbraio 2012, 21:59:45 »
Citazione da: "clros"
Ne stavo implementando uno e cercavo di capire quale fosse il modo migliore. Tra l'altro non ho avuto la possibilità di studiarli all'Uni per cui sinceramente ne so molto poco.
Vorrei capire: è per puro esercizio personale, oppure hai avuto un nuova idea che vuoi sviluppare?
Citazione
In ogni caso, il sistema che sto realizzando prevede una (ipotetica?) grande scalabilità. Avevo anche pensato ad un server che wrappava il tutto (il sistema è implementato sotto forma di .so o .dll) in modo da consentire l'uso dei normali comandi SQL e anche l'implementazione di alcune caratteristiche tipiche dei DB "normali" come appunto l'integrità referenziale, anche se credo questo appesantisca non poco il tutto.

Cosa ne pensate?
Penso che, come già detto, integrità referenziale e NoSQL cozzino violentemente, e mi pare anche normale: la prima è nata ed è stata pensata per i db relazionale, mentre i secondi nascono per motivazioni esattamente opposte (NON relazionale i dati; intendo che non offrono alcun meccanismo per farlo, ed eventualmente deve pensarci il programmatore a manina).

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Database NoSQL
« Risposta #6 il: 25 Febbraio 2012, 22:23:30 »
Citazione da: "cdimauro"
Citazione da: "clros"
Ne stavo implementando uno e cercavo di capire quale fosse il modo migliore. Tra l'altro non ho avuto la possibilità di studiarli all'Uni per cui sinceramente ne so molto poco.
Vorrei capire: è per puro esercizio personale, oppure hai avuto un nuova idea che vuoi sviluppare?

Diciamo che è il tutto è nato come esercizio; volevo "clonare" un DB NoSQL (non ricordo il nome, avevo letto qualcosa in merito su "ioProgrammo"). Poi l'idea si è evoluta (in senso positivo o negativo) in un progetto totalmente nuovo.
Qui: http://www.fjmsoftware.altervista.org trovi l'ultima versione della libreria. Credo cmq che ti possano interessare di più le funzioni che mette a disposizione : http://www.fjmsoftware.altervista.org/P ... 3/doc.html

 
Citazione
Penso che, come già detto, integrità referenziale e NoSQL cozzino violentemente, e mi pare anche normale: la prima è nata ed è stata pensata per i db relazionale, mentre i secondi nascono per motivazioni esattamente opposte (NON relazionale i dati; intendo che non offrono alcun meccanismo per farlo, ed eventualmente deve pensarci il programmatore a manina).
Infatti era questo che volevo fare, avere una "base" non relazionale (per la scalabilità in termini di grandezza e per l'eventuale velocità di accesso ai dati) e uno strato che offra alcune caratteristiche tipiche dei RDBMS.

Anche questa parte avevo iniziato a farla, avevo un server che si basava sulla mia libreria che implementava solo alcuni comandi SQL e un client grafico, realizzato in Java (ma in realtà non faceva altro che visualizzare una interfaccia testuale all'interno di una finestra di Java).
Questa parte però (Server e client) per ora non la sto più distribuendo perchè mi sto concentrando sul "core" (sulla libreria).
Su Facebook avevo anche messo degli screenshot:
https://www.facebook.com/pages/FJM-Soft ... 5282306453
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Database NoSQL
« Risposta #7 il: 25 Febbraio 2012, 22:26:06 »
Secondo me così ottieni solo il peggio dei due mondi.

La forza dei noSQL sta nel lasciare al codice client la gestione delle relazioni, per questo sono veloci. :-)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Database NoSQL
« Risposta #8 il: 25 Febbraio 2012, 22:38:05 »
Concordo.

Claudio, se vuoi aggiungere la possibilità di eseguire comandi SQL a un database NoSQL non credo ci siano problemi. Va benissimo.

Ma implementare roba come l'integrità referenziale o, peggio ancora, le transazioni sarebbe... overkill. Non è un caso che ci sia alcuna soluzione NoSQL a implementarli.

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Database NoSQL
« Risposta #9 il: 25 Febbraio 2012, 22:50:34 »
Citazione da: "cdimauro"
Concordo.

Claudio, se vuoi aggiungere la possibilità di eseguire comandi SQL a un database NoSQL non credo ci siano problemi. Va benissimo.

Ma implementare roba come l'integrità referenziale o, peggio ancora, le transazioni sarebbe... overkill. Non è un caso che ci sia alcuna soluzione NoSQL a implementarli.

Bene! Finalmente qualcuno che mi dice come procedere! Io andavo un po' alla cieca e non sapevo cosa esattamente implementare...
Grazie per le dritte ragazzi! ;)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline lollo anto

  • Byte Addicted
  • ****
  • Post: 37
  • Karma: +0/-0
  • http://www.ituoiappunti.org
    • Mostra profilo
Re:Database NoSQL
« Risposta #10 il: 22 Giugno 2013, 23:53:17 »
io non conosco bene noSQL, da quello che vedo nelle precedenti risposte non è molto utile se bisogna usarlo per grandi progetti, a parere mio è meglio o SQLlite (che ti memorizza tutti i dati in un unico file su locale) oppure mysql  che memorizza i dati dentro il server  :)

Tags: