Forum: Italian Ruby user group mongodb.

B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2012-05-08 17:33
(Received via mailing list)
Salve.
Qualcuno ha felicemente lasciato definitivamente i classici db
relazionali come postgres per lanciarsi nel mondo del NOSQL
utilizzando db come mondodb?
Devo sviluppare un'app di gestione ditte:
ciascuna ditta ha un'attivita' commerciale in varie forme: negozio,
ecommerce, corrispondenza, ecc. e di ciascuna di queste attivita'
commerciali devo tenere un history, sapere quando sono state attivate,
quando e se sono state cessate, i vari passaggi volture, subingressi,
ecc.
Stavo iniziando il progetto con postgresql che uso sempre ma noto, da
letture in rete, che i db detti NOSQL, stanno prendendo sempre piu'
piede.
Che ne pensate?
9daa9b4739a6e95078cbcfb624d7bb8e?d=identicon&s=25 David Welton (Guest)
on 2012-05-08 17:41
(Received via mailing list)
> Che ne pensate?

Penso che buttare via un signor database come Postgres, che va
benissimo per dei dati strutturati, dove sicuramente hai bisogno di
tracciare i rapporti fra le varie componenti (join!) per un database
sperimentale non sia il massimo.

Il bello dell'informatica e` che ci sono sempre cose nuove e
interessanti da imparare, ma per quanto riguarda i nosql, punterei di
piu` su qualcosa come redis come sostegno/appoggio nel momento quando
ti rendi conto che Postgres ha bisogno di qualcosa in piu`.

http://www.mongodb-is-web-scale.com/

Io ho avuto a che fare con MongoDB lo scorso anno, e non mi e`
piaciuto molto: dovendo fare dei query un po' piu` "complessi",
diventava molto lento.  E i numeri nel DB (migliaia di record) erano
numeri che Postgres gestisce senza fatica.  Hanno usato Mongo per
provare una cosa nuova...

--
David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/
Ff2c5ef7c7d38d18c3cd39d951cc5a07?d=identicon&s=25 Stefano Pigozzi (Guest)
on 2012-05-08 17:44
(Received via mailing list)
Qui, imho, uscir un flame. Io sono della opinione di David, che mi ha
preceduto di pochi minuti.

"does /dev/null support sharding? :-)"

2012/5/8 David Welton <davidnwelton@gmail.com>
5ffafe70176a99f175d16192fd5be69e?d=identicon&s=25 Luca P. (luca_p)
on 2012-05-08 17:46
(Received via mailing list)
Non si "lascia" nessuno strumento, si usa quello giusto.
I database NoSQL non sono "i nuovi database", ma DEI nuovi database con
delle caratteristiche precise.

NoSQL is not the same thing as no SQL :-)

2012/5/8 Stefano Pigozzi <stefano.pigozzi@gmail.com>
A1bc8563b294df7078d1ce3d634f5d17?d=identicon&s=25 Luigi Maselli - grigio.org (grigio)
on 2012-05-08 17:50
Qui ci sono delle slide e se cerchi c'é anche un video che parla di
perché hanno migrato Diaspora da MongoDB a Mysql.
http://www.slideshare.net/sarahmei/taking-diaspora...

Il problema in generale è che molte tecnologie "moderne" servono per
gestire meglio dei casi di nicchia specifici piuttosto che per
rimpiazzare a 360 un db classico.

Luigi
6dbddfda34303f8d83620f7293612671?d=identicon&s=25 Tommaso Visconti (Guest)
on 2012-05-08 17:54
(Received via mailing list)
Il 08/05/12 17:44, Stefano Pigozzi ha scritto:
> Qui, imho, uscir un flame.

Supporto la nascita del flame, cos  la volta buona che capisco quando
usare noSQL! :)
9daa9b4739a6e95078cbcfb624d7bb8e?d=identicon&s=25 David Welton (Guest)
on 2012-05-08 17:59
(Received via mailing list)
> Supporto la nascita del flame, cos  la volta buona che capisco quando
> usare noSQL! :)

Quando devi fare qualcosa che un DB tradizionale non fa molto bene.

--
David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/
C3d3b41d28306e6d3db4aabcdf3642c1?d=identicon&s=25 Roberto De Ioris (Guest)
on 2012-05-08 18:00
(Received via mailing list)
Il giorno 08/mag/2012, alle ore 17:33, Mauro ha scritto:

> Stavo iniziando il progetto con postgresql che uso sempre ma noto, da
> letture in rete, che i db detti NOSQL, stanno prendendo sempre piu'
> piede.
> Che ne pensate?
>

Che hai un classico caso di progetto dove e' richiesto (per vari motivi)
il modello
 "relazionale" (o qualcosa che ci si avvicini molto). Qui NOSQL ci
azzecca poco, ma di sicuro
tieni d'occhio questo mondo, alcuni prodotti risolvono problemi ben
specifici (che magari il tuo applicativo potrebbe avere).

Personalmente uso molto mongodb e redis.
Il primo quando ho bisogno di gestire dati schema-free (il cms
locomotive e' secondo me l'esempio migliore di questo utilizzo),
il secondo per le code e la gestione di liste e set.

--
Roberto De Ioris
http://unbit.it
JID: roberto@jabber.unbit.it
C2caeb674966c3ea54dd4ef18ee621d2?d=identicon&s=25 franz. lunelli (Guest)
on 2012-05-08 18:04
(Received via mailing list)
In realt i motivi per cui hanno migrato non sono insiti nel db, ma
nella loro scarsa esperienza con mongoDb, nella poca documentazione e
poco supporto dalla comunit.
Dopo di che o non avrei scelto mysql, ma piuttosto postgresql quindi
avrei da ridire anche sulla loro migrazione. Ci sono molti ambiti in cui
sia un db sql che uno NoSql possono risolvere la situazione, il problema
 capire quale lo fa meglio.

Francesco

Il 08/05/2012 17:50, Luigi Maselli - grigio.org ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2012-05-08 18:20
(Received via mailing list)
Complemento citando l'approccio della "polyglot persistence"
http://martinfowler.com/bliki/PolyglotPersistence.html
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (Guest)
on 2012-05-08 21:42
(Received via mailing list)
Per l'applicazione che hai descritto io sceglierei un database Postgres.
Ho scelto mongodb in almeno un paio di progetti, ma c'erano presupposti
diversi.

Nella mia esperienza, l'euforia nell'uso di un database noSQL come
mongodb  presto mitigata
dal dover fare i conti proprio con la struttura mancante. Voglio dire
che con un database SQL ci sono pochi
modi per sbagliare il disegno della base dati. E' tutto molto
comprovato, e con ActiveRecord
viaggi veramente sui binari.

Non  la stessa cosa con un noSQL. Paradossalmente  molto pi importante
pensare prima alla
struttura dei tuoi dati di quanto non lo sia con database SQL, almeno
per quanto riguarda mongodb, in
cui hai le 'collection' e l'atomciti negli update dei singoli documenti
delle collection.

Altra nota importante sono le transazioni, che se non sbaglio non sono
ancora implementate con la
stessa atomicit in nessun noSQL.

Per concludere, non userei mai un nosql per un gestionale. Scegli lo
strumento giusto per il lavoro giusto.

Tra l'altro considera che se volessi sperimentare schemaless alcune
parti della tua applicazione, in postgres
hai almeno due modi per farlo, il data type XML e il pi recente HStore:

http://www.postgresql.org/docs/current/static/data...
http://www.postgresql.org/docs/current/static/hstore.html

Ho usato il datatype XML con gran soddisfazione di recente.
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2012-05-09 09:02
(Received via mailing list)
> Per concludere, non userei mai un nosql per un gestionale. Scegli lo strumento
giusto per il lavoro giusto.

Grazie, questo thread e' stato ....salutare :-)
666b4ee5c26c5f60f0448ad0ab7777f3?d=identicon&s=25 Riccardo Tacconi (rtacconi)
on 2012-05-09 12:55
Ho poco da aggiungere ma se serve una soluzione per persistere dati con
struttura variabile:

http://www.postgresql.org/docs/9.1/static/hstore.html

ma credo che anche questo sia stato citato. Per chi e` stanco di usare
le migrazioni, potrebbe passare a Datamapper, non c'e' bisogno di
cambiare DB. Credo che mongodb riesca a gestire meglio piu` nodi,
rispetto a postgres e mysql, anche se usa comunque il paradigma
master-slave. Riak usa un circular buffer e` scala molto meglio.

Comunque ci sono anche delle soluzioni per la replicazione su Mysql e
soprattutto per Postgres. Per MySql uso Xeround DB ma e` su EC2 ed e` un
PaaS. Un progetto di replicazione semplice e` http://www.rubyrep.org/ ma
usa il metodo dei trigger, quindi non proponibile su piattaforme di
hosting, ma utile se la app usa una sua infrastruttura.

Ho letto un post contro mongodb, parlava della perdita di dati ed altri
problemi derivati ad una grossa mole di dati da gestire, purtroppo non
ricordo il link.
E60c9fb0c06138b1d6b349f6fb2769f0?d=identicon&s=25 Gian Carlo Pace (Guest)
on 2012-05-10 11:27
(Received via mailing list)
a chi non l'avesse letto segnalo anche l'articolo molto interessante

http://martinfowler.com/bliki/OrmHate.html

Ciao,
--
gk
Dfa0e5f195b6f312006b465809b76b0b?d=identicon&s=25 Emanuele DelBono (Guest)
on 2012-05-10 12:04
(Received via mailing list)
Infatti, l'articolo di Martin Fowler porta all'attenzione il mito del
fatto che gli ORM ti fanno dimenticare l'esistenza del DB. Purtroppo
questo mito ha fatto danni, visto che astrarre il db non  cosi
semplice e nemmeno gli ORM sofisticati ci riescono.

Il punto  capire se database come MongoDb riescono a risolvere il
problema e al momento sembra che qualcosa riescono a risolvere, ma
forse  presto per cantare vittoria.

Per la mia seppur breve esperienza, i db nosql (parlo di mongo perch
un po' lo conosco) risolvono il problema del salvare i dati in modo
semplice: prendo un grafo di oggetti e lo sparo in una collezione. Il
problema nasce quando devo ricaricare i dati e andare "in join" per
prendere altre informazioni.
Ho capito che la cosa pi difficile quando si lavora con i nosql
disegnare bene quelli che in DDD sono gli aggregati, se davvero si
disegnano bene gli aggregati il 95% dei problemi scompare creando una
collezione per aggregato.
Siccome l'aggregato  un'unita consistente posso salvarla e caricarla
in autonomia senza che mi servano altre informazioni da altre
collezioni.
Questo vuol dire denormalizzare i dati (e a volte duplicare)....ma
credete davvero che la normalizzazione completa sia cos importante?
Per me non lo .

Quindi io uno sguardo ai nosql lo darei e li terrei in considerazione
in molti contesti...

bye
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2012-05-15 12:11
Io non ho esperienza diretta anche se mi piacerebbe approfondire. Quali
sono le differenze tra i relazionali ed i nosql? Queste quelle che mi
vengono in mente:
- scalabilità
- prestazioni
- ridondanza
- sicurezza
- integrità
- utilizzo

La questione cruciale è analizzare il contesto. Io non ho mai creato un
gestionale che avesse bisogno di tanta scalabilità orizzontale e se mai
mi capiterà mi chiederò, prima di scegliere il database, come farò a
gestirla e presentarla.
C'è anche la questione sicurezza o forse si tratta ormai solo di
fiducia. Mi chiedo poi come venga gestita la ridondanza dei dati, nei
relazionali ci pensano le join, se pur col peso che hanno. Infine
l'utilizzo: devono essere accoppiati ad un orm altrimenti l'integrità
dei dati può diventare un grosso problema. Activerecord però è nato sui
relazionali e forse è meglio aspettare qualcosa creato ad hoc?

@Emanuele DelBono
Non ho capito la questione dei danni a proposito degli orm, a cosa ti
riferisci?
E555a767a33427bfee0bb0878566293c?d=identicon&s=25 gabriele renzi (Guest)
on 2012-05-15 14:33
(Received via mailing list)
2012/5/15 Marco Mastrodonato <m.mastrodonato@gmail.com>:
> Io non ho esperienza diretta anche se mi piacerebbe approfondire. Quali
> sono le differenze tra i relazionali ed i nosql? Queste quelle che mi
> vengono in mente:
> - scalabilit
> - prestazioni
> - ridondanza
> - sicurezza
> - integrit
> - utilizzo

FWIW, se intendevi che queste sono possibili "dimensioni" per
differenziare relazionali o no, direi che non funzionano (posso dare
esempi di sql o non sql con si/no per tutti i casi).

Come dimensioni per cui valutare invece chiaramente si.
Per non direi che ci voglia un ORM se non si  relazionali (beh a
parte che sarebbe un O*M :)

Io in passato ho lavorato con cassandra  avendo fatto un layer DAO
abbastanza classico a mano mi son trovato bene.
Oltretutto activerecord+migration di default  praticamente uguale a
usare un database documentale: ogni tabella  un lista di hash, la
validazione  applicativa e i riferimenti tra tabelle vengono generati
senza foreign key/integrit referenziale.
O  cambiato qualcosa ultimamente e me lo sono perso?





--
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2012-05-15 15:49
> FWIW, se intendevi che queste sono possibili "dimensioni" per
> differenziare relazionali o no, direi che non funzionano (posso dare
> esempi di sql o non sql con si/no per tutti i casi).

ho fatto di tutta l'erba un fascio per non perderci nei dettagli,
secondo te non sono elementi che differiscono la macro categoria "nosql"
dai relazionali?

> Per non direi che ci voglia un ORM se non si  relazionali (beh a
> parte che sarebbe un O*M :)

Chiedo scusa, in realtà mi stavo riferendo all'intero pacchetto rails,
si è trattato di un lapsus. Senza un framework come rails che gestisce
cose che normalmente si gestisce un database sarebbe difficoltoso:
validazioni, dipendenze, observer (trigger) ecc.

> Io in passato ho lavorato con cassandra  avendo fatto un layer DAO
> abbastanza classico a mano mi son trovato bene.

Interessante

> Oltretutto activerecord+migration di default  praticamente uguale a
> usare un database documentale: ogni tabella  un lista di hash, la
> validazione  applicativa e i riferimenti tra tabelle vengono generati
> senza foreign key/integrit referenziale.
> O  cambiato qualcosa ultimamente e me lo sono perso?

All'atto pratico dici? Perchè i primi hanno struttura fissa. Io da
quando uso rails non sfrutto più le caratteristiche per l'integrità sul
db, ho tanti vantaggi tra cui il diretto controllo mentre se li usassi
sul db devo sempre passare da un sistemista. Ovviamente però bisogna
utilizzare rake per le operazioni batch altrimenti si avrebbero i
problemi di cui accennavo prima. Le prestazioni però sono ben diverse e
mi fermo quà che gli argomenti da discutere sarebbero tantissimi.
8bc38b2e4e00c4df2a7f1dcdc46802f9?d=identicon&s=25 Riccardo Lucatuorto (riccardo_l)
on 2012-05-15 15:56
(Received via mailing list)
2012/5/15 Marco Mastrodonato <m.mastrodonato@gmail.com>

>
> All'atto pratico dici? Perch i primi hanno struttura fissa. Io da
> quando uso rails non sfrutto pi le caratteristiche per l'integrit sul
> db, ho tanti vantaggi tra cui il diretto controllo mentre se li usassi
> sul db devo sempre passare da un sistemista. Ovviamente per bisogna
> utilizzare rake per le operazioni batch altrimenti si avrebbero i
> problemi di cui accennavo prima. Le prestazioni per sono ben diverse e
> mi fermo qu che gli argomenti da discutere sarebbero tantissimi.
>
>
beh, in quest'ultimo caso ci sarebbe DataMapper, di cui dovrebbe uscire
la
versione 2.0, se la scelta  un DB Sql relazionale mi pare una scelta
molto
adatta.

--
Riccardo
--
L'esperienza  quello che ottieni quando, non ottieni quello che
desideri.
Dfa0e5f195b6f312006b465809b76b0b?d=identicon&s=25 Emanuele DelBono (Guest)
on 2012-05-15 18:46
(Received via mailing list)
Danni forse  una parola spropositata, ma la mia sensazione  che gli
ORM sono nati con l'idea di colmare il gap tra il mondo relazionale e
il mondo ad oggetti e non ci sono riusciti fino in fondo. La soluzione
al problema non  certo banale e l'introduzione di un ORM semplifica
alcune cose e ne complica altre (performance, mapping difficili,
dominio dipendentende dallo schema, compromessi).
Invece i DB no-sql (sembra) che risolvano bene questo problema: ho un
grafo lo "butto" nello store. Fine. Il problema  disegnare bene i
grafi (aggregati) per questo DDD ci aiuta molto.


ema


2012/5/15 Marco Mastrodonato <m.mastrodonato@gmail.com>:
E555a767a33427bfee0bb0878566293c?d=identicon&s=25 gabriele renzi (Guest)
on 2012-05-16 00:30
(Received via mailing list)
2012/5/15 Marco Mastrodonato <m.mastrodonato@gmail.com>:
>> FWIW, se intendevi che queste sono possibili "dimensioni" per
>> differenziare relazionali o no, direi che non funzionano (posso dare
>> esempi di sql o non sql con si/no per tutti i casi).
>
> ho fatto di tutta l'erba un fascio per non perderci nei dettagli,
> secondo te non sono elementi che differiscono la macro categoria "nosql"
> dai relazionali?

ni, per esempio:

> - scalabilit

Penso intenda scalabilit multi-macchina (senn il buon vecchio
exadata con 80 core e 2T di ram fa sempre la sua figura :)
Nel caso:
riak, cassandra, hbase: si
couchdb, redis (almeno finch non si materializza redis cluster): no
(o sharding che si fa anche con mysql).


> - prestazioni

dipende da cosa fai: se non usi join applicative o a seconda di come
configuri un db relazionale o no e dipendentemente se  ram-based o no
(e.g.  "mongodb tutto in ram senza ACK" vs voltdb).
Come contro esempio, Amazon SimpleDB  ha prestazioni abbastanza scarse.

> - ridondanza

ancora, dipende, per esempio neo4j e redis (da quel che mi ricordo)
supportano hot/cold spare come molti db sql "classici" ma non cose
fighe tipo dynamo.
Anche HBase da quel che mi ricordo poteva andare gi completamente se
moriva un region master, rispetto a riak che rimane allegro finch non
muoiono N(configurabile) nodi.

> - sicurezza

questa non son sicuro: sicurezza del server in se?
Autorizzazioni pi o meno fine grained? Forse si, nei db relazionali
sono comuni rispetto ai vari nosql.

> - integrit

vedi il discorso che facevo sul fatto che spesso i db relazionali non
vengono usati con vincoli di integrit.
O in casi (senza voler trollare) anche la definizione di "integrit"
abbastanza vaga, tipo mysql che mette maiuscole e minuscole insieme
negli indici, o fa truncate di nascosto invece di dare errore sui
varchar troppo lunghi etc etc

> - utilizzo

beh  chiaro :)


Insomma, se "nosql" significa "non un database sql" ce ne sono
talmente tanti che  difficile generalizzare.
Anche lucene e bdb alla fine sono dei database  nosql :)


>> Per non direi che ci voglia un ORM se non si relazionali (beh a
>> parte che sarebbe un O*M :)
>
> Chiedo scusa, in realt mi stavo riferendo all'intero pacchetto rails,
> si  trattato di un lapsus. Senza un framework come rails che gestisce
> cose che normalmente si gestisce un database sarebbe difficoltoso:
> validazioni, dipendenze, observer (trigger) ecc.

Ah, capito, grazie.





--
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.