Se siete come me, amate Meteor ma odiate Mongo. In Meteor's Trello Roadmap (https://trello.com/b/hjBDflxp/meteor-roadmap), la funzione più votata è il supporto SQL, PostgreSQL o MySQL.
Poiché non c'è una data per quella in Meteor, qui riassumo le soluzioni parziali che ho trovato.
1.- Utilizzare SQL solo per le query sul lato client.
** AGGIORNAMENTO: alasql è ora un pacchetto di meteoriti:
È possibile installare alaSQL con
meteor add agershun:alasql
AlaSQL e Meteor Mongo collezioni
Ora è possibile utilizzare le collezioni Meteor come argomenti. Applicare SQL per Meteor Collezioni:
Template.body.helpers({
tasks: function() {
return alasql('SELECT * FROM ?',[Tasks]);
}
});
Oppure si può usare con find() opzioni con METEOR speciale() dalla funzione:
return alasql('SELECT * FROM ?',[Tasks]);
return alasql('SELECT * FROM METEOR(?)',[Tasks]);
return alasql('SELECT * FROM METEOR(?,?)',[Tasks,{text:"Hello world!"}]);
return alasql('SELECT * FROM METEOR(?,{text:"Hello world!"})',[Tasks]);
Ammettiamolo, Mongo succhia sulle operazioni di dati comuni, in modo da avere la capacità di usare SQL per interrogare i dati (con JOINS, GRUP BY e così via) solleverebbe molto dolore.Esistono pacchetti che consentono di utilizzare SQL nel client, almeno per le query: la più semplice è una vecchia utility (2010), SqlLike (http://www.thomasfrank.se/sqlike.html). Il nuovo player in città è alaSQL, che è attivamente sviluppato da @agershun (https://github.com/agershun/alasql). Il vantaggio di SqlLike è che ha solo 10k. AlaSQL, ovviamente, è molto più potente, ma per usare SQL per sostituire mongo sintax nei sindacati e nelle aggregazioni, SqlLike è OK.
Con ciascuno di essi si può fare qualcosa di simile in vostro aiuto:
productsSold:function(){
var customerSalesHistory=salesHistory.find({cutomerId:Session.get('currentCustomer')}).fetch();
var items=products.find().fetch();
return alasql("select item.name, sales.ordered as sumaVentas from ? sales, ? items
where items.Id=sales.itemId",[customerSalesHistory,items]);
}
2.- Esperimento con il supporto SQL diretto.
Alcuni pacchetti provano a sostituire Mongo (e minimongo) con MySql o PostgreSQL. Il pacchetto MySql di @ numtel è Meteor-MySql https://github.com/numtel/meteor-mysql e PostgreSQL è Meteor-pg (https://github.com/numtel/meteor-pg). Entrambi sono buoni tentativi per risolvere il problema, ma hanno ancora alcuni problemi e sono in qualche modo ingombranti da adattare.
Un team di Hack Reactor ha formato Meteor Stream e il suo primo prodotto è un'integrazione di PostgreSql con Meteor, post-meteor-mete (https://github.com/meteor-stream/meteor-postgres). Sembra molto buono e usa alaSql sul client per sostituire minimongo.
Entrambi gli approcci sono buoni, ma hanno alcuni problemi:
Hanno rotto la distribuzione su meteora. Sono molto, molto giovani e non vicini alla produzione AFAIK Richiedono ancora delle modifiche alla consueta sintassi pub-sub a cui siamo abituati, che potrebbe sollevare problemi di compatibilità con altri pacchetti di meteoriti. 3.- Usa ancora Mongo, ma come semplice repository per il tuo database MySql.
Questa opzione mantiene tutte le caratteristiche di Meteor e utilizza Mongo come repository temporale per i database MySql o PostgreSql.
Un brillante tentativo è mysql-shadow di @perak (https://github.com/perak/mysql-shadow). Fa quello che dice, mantiene Mongo sincronizzato in entrambi i modi con MySql e ti permette di lavorare i tuoi dati in MySql.
La cattiva notizia è che lo sviluppatore non continuerà a mantenerlo, ma ciò che è fatto è sufficiente per lavorare con semplici scenari in cui non si hanno trigger complessi che aggiornano altre tabelle o cose del genere.
Per una sincronizzazione completa è possibile utilizzare SymmetricsDS (http://www.symmetricds.org), un replicatore di database molto ben testato. Ciò comporta ovviamente la creazione di un nuovo server java, ma è di gran lunga il modo migliore per essere sicuri di poter convertire il tuo database Mongo in un semplice repository del tuo vero database MySql, PostgreSQL, SQL Server, Informix. Devo controllarlo ancora
Per ora MySQL Shadow sembra una buona soluzione.
Un vantaggio di questo approccio è che è ancora possibile utilizzare tutte le funzioni, i pacchetti, la distribuzione di meteore e così via. Non devi fare altro che impostare il meccanismo di sincronizzazione, e non stai rompere nulla.
Inoltre, se un giorno il team Meteor utilizza alcuni dei dollari generati nell'integrazione SQL, è più probabile che la tua app funzioni così com'è.
Qualcuno ha appena fatto :) https://github.com/drorm/meteor-sql –