2012-05-29 2 views
19

Desidero utilizzare Meteor per connettersi al nostro database relazionale (PostgreSQL). C'è qualche esperienza nel collegare Meteor ad altri database?Utilizzo di meteora con postgresql

Suppongo che dobbiamo scrivere il nostro connettore per utilizzare le funzioni di Meteor con PostgreSQL.

Aggiornamento: Vedere la risposta seguente. Poiché questa domanda sta ancora attirando l'attenzione, ecco il link alla soluzione.

https://github.com/meteor-stream/meteor-postgres

risposta

5

Sì, è necessario scrivere il proprio connettore. Anche io sto cercando una cosa del genere per mysql, ma non penso, nessuno ha iniziato a fare sforzi su questo fronte. Mi piacerebbe sapere, qualsiasi sforzo in corso in questa direzione.

Dai un'occhiata alla domanda simile per mysql. Meteor with mysql

+1

Qualcuno ha appena fatto :) https://github.com/drorm/meteor-sql –

2

La cosa più vicina a ciò che stai chiedendo disponibile in questo momento è il Meteor SQL project, anche se attualmente supporta solo MySQL.

Forse dovresti considerare di contribuire al progetto per supportare Postgres?

4

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'è.

+0

Perché odiate Mongodb? –

+0

Perché odio i database denormalizzati e il linguaggio di query che Mongo usa –

+0

Perché odiate i database denormalizzati e il linguaggio di query Mongo? Sto cercando di ottenere un po 'di chiarezza sull'esperienza della gente con dbs no-sql e apprezzerei davvero la tua esperienza. –