giovedì 1 dicembre 2011

MongoDB : Doctrine ODM vs. Mandango

MongoDB Doctine ODM:

pro:
  • semplice e intuitivo
  • i field di tipo array si dichiarano in modo semplice
  • possibilità di _id autogenerati negli embed 
  • Nessun problema con Embed dentro embed e Reference dentro ad embed etc.
  • Id generati anche negli embed in modo semplice

contro:
  • definisco gli indici negli object ma questi non vengono effettivamente creati
  • è lento rispetto a Mandango altri ODM
  • E' in Beta
  • E' difficile trovare documentazione.
da capire:

  • Devo capire se la velocità aumenta configurando gli object in xml.
Mandango

pro:

  • Molta velocità rispetto a Doctine
  • con Mandator crea automaticamente i modelli partendo da un array().
  • i modelli base vengono rigenerati quelli che devono essere estesi da noi no. (ottima cosa)
  • una volta presa la mano con le conf degli object diventa molto veloce.
  • molto utile la funzionalità references/relations
contro:
  • ReferenceOne non molto chiara in db.
  • E' difficile trovare documentazione.
  • Per definire un tipo di dato array bisogna definirlo di tipo 'raw'.
  • Per la definizione dei campi sulle reference bisogna definire un polymorphic per comodità (vedi sotto l'esempio)
  • Non sono riuscito a trovare il metodo per configurare un campo Data a default now().
  • Comportamento strano con gli embed, es : creo un embed di tipo indirizzo e lo salvo in una collection nel field via1, riuso sempre nello codice qualche riga sotto  l'embed salvandolo sempre nella collection indirizzo ma nel campo via2. l'Embed non viene salvato, come se fosse flushato quando è stato agganciato al primo campo.
  • Problemi segnalati con il GridFS
  • Poco supporto sul gruppo 
  • Ho riscontrato un problema nelle reference contenuti negli embed.



ReferenceOne:

Doctrine : definizione molto completa nella collection.



 Mandango: definizione meno accurata.



a mio avviso è meglio usare il field di tipo polymorphic in modo da avere la definizione esatta della classe collegata per facilitare l'eventuale consultazione del db:


è ridondante ma più comprensibile.



altri..

Morph : mancano diversi parti (embed, etc.)
Shanty-Mongo: da verificare sembra valido ad una prima occhiata.

Questo post sarà in aggiornamento continuo.