2012-05-29 30 views
19

Quiero usar Meteor para conectar a nuestra base de datos relacional (PostgreSQL). ¿Hay alguna experiencia en conectar Meteor a otras bases de datos?Usando meteoro con postgresql

Supongo que tenemos que escribir nuestro propio conector para usar las bonitas funciones de Meteor con PostgreSQL.

Actualización: Consulte la respuesta a continuación. Dado que esta pregunta todavía está recibiendo atención aquí, está el enlace a la solución.

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

Respuesta

5

sí, usted tiene que escribir su propio conector. También estoy buscando algo así para mysql, pero no creo que nadie haya empezado ningún esfuerzo en este frente. Me encantaría saber, cualquier esfuerzo en curso en esta dirección.

Eche un vistazo a la pregunta similar para mysql. Meteor with mysql

+1

Alguien acaba de hacer :) https://github.com/drorm/meteor-sql –

2

Lo más parecido a lo que está pidiendo disponible ahora es el Meteor SQL project, aunque actualmente solo es compatible con MySQL.

¿Quizás consideras contribuir con el proyecto para apoyar a Postgres?

4

Si eres como yo, te encanta Meteor pero odias a Mongo. En Meteor's Trello Roadmap (https://trello.com/b/hjBDflxp/meteor-roadmap), la característica más votada es la compatibilidad con SQL, ya sea PostgreSQL o MySQL.

Como no hay fecha para eso en Meteor, aquí resumo las soluciones parciales que he encontrado.

1.- Use SQL solo para las consultas del lado del cliente.

** ACTUALIZACIÓN: alasql es ahora un paquete de meteoritos:

Puede instalar alaSQL con

meteor add agershun:alasql 

AlaSQL y Meteor Mongo colecciones

Ahora puede utilizar colecciones de meteoritos como argumentos. Aplicar SQL para Meteor Colecciones:

Template.body.helpers({ 
    tasks: function() { 
    return alasql('SELECT * FROM ?',[Tasks]); 
    } 
}); 

O puede utilizar con find() opciones con METEOR especial() de función:

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]); 

Seamos realistas, Mongo aspira en operaciones de datos comunes, por lo tener la capacidad de usar SQL para consultar datos (con JOINS, GRUP BY, etc.) aliviaría mucho dolor.Hay paquetes que le permiten usar SQL en el cliente, al menos para las querys: la más simple es una utilidad antigua (2010), SqlLike (http://www.thomasfrank.se/sqlike.html). El nuevo jugador en la ciudad es alaSQL, que está desarrollado activamente por @agershun (https://github.com/agershun/alasql). La ventaja de SqlLike es que solo tiene 10k. AlaSQL, es mucho más potente, por supuesto, pero para usar SQL para reemplazar mongo sintax en uniones y agregaciones, SqlLike está bien.

Con ambos se puede hacer algo como esto en su ayudante:

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.- Experimento con el apoyo directo de SQL.

Algunos paquetes intentan reemplazar a Mongo (y minimongo) con MySql o PostgreSQL. El paquete MySql de @ numtel es Meteor-MySql https://github.com/numtel/meteor-mysql, y PostgreSQL es Meteor-pg (https://github.com/numtel/meteor-pg). Ambos son buenos intentos de resolver el problema, pero aún tienen algunos problemas y de alguna manera son engorrosos de adaptar.

Un equipo de Hack Reactor ha formado Meteor Stream, y su primer producto es una integración de PostgreSql con Meteor, meteor-postgres (https://github.com/meteor-stream/meteor-postgres). Se ve muy bien y utiliza alaSql en el cliente para reemplazar minimongo.

Ambos enfoques son buenos, pero tienen algunos problemas:

y partiendo el despliegue de meteoritos. Son muy, muy jóvenes y no están listos para la producción AFAIK Todavía requieren ajustes al pub-sub sintax habitual al que estamos acostumbrados, lo que podría generar problemas de compatibilidad con otros paquetes de meteoritos. 3.- Sigue usando Mongo, pero como un simple repositorio para tu base de datos MySql.

Esta opción mantiene todas las características de Meteor y utiliza Mongo como un repositorio temporal para sus bases de datos MySql o PostgreSql.

Un intento brillante de que sea mysql-shadow por @perak (https://github.com/perak/mysql-shadow). Hace lo que dice, mantiene a Mongo sincronizado en ambos sentidos con MySql y le permite trabajar sus datos en MySql.

La mala noticia es que el desarrollador no continuará manteniéndola, pero lo que se hace es suficiente para trabajar con escenarios simples donde no tiene activadores complejos que actualizan otras tablas o cosas por el estilo.

Para una sincronización de todas las funciones, puede usar SymmetricsDS (http://www.symmetricds.org), un replicador de bases de datos muy bien probado. Esto implica configurar un nuevo servidor de Java, por supuesto, pero es de lejos la mejor manera de asegurarse de que podrá convertir su base de datos de Mongo en un repositorio simple de su base de datos MySql, PostgreSQL, SQL Server, Informix real. Tengo que verificarlo yo mismo todavía.

Por ahora MySQL Shadow parece ser una buena solución.

Una de las ventajas de este enfoque es que todavía puede usar todas las características, paquetes, implementación de meteoritos, etc. de Meteor. No tienes que hacer nada más que configurar el mecanismo de sincronización, y no estás rompiendo nada.

Además, si algún día el equipo de Meteor utiliza algunos de los dólares recaudados en la integración de SQL, es más probable que su aplicación funcione como está.

+0

¿Por qué odias a Mongodb? –

+0

Porque odio las bases de datos desnormalizadas y el lenguaje de consulta Mongo usa –

+0

¿Por qué odias las bases de datos desnormalizadas y el lenguaje de consulta de Mongos? Estoy tratando de aclarar la experiencia de las personas con dbs sin sql y realmente apreciaría escuchar tu experiencia. –

Cuestiones relacionadas