2012-05-29 36 views
19

Tôi muốn sử dụng Meteor để kết nối với cơ sở dữ liệu quan hệ của chúng tôi (PostgreSQL). Có kinh nghiệm nào trong việc kết nối Meteor với các cơ sở dữ liệu khác không?Sử dụng thiên thạch với postgresql

Tôi đoán chúng ta phải viết trình kết nối của riêng mình để sử dụng các tính năng tuyệt vời của Meteor với PostgreSQL.

Cập nhật: Xem câu trả lời bên dưới. Vì câu hỏi này vẫn đang được chú ý ở đây là liên kết đến giải pháp.

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

Trả lời

5

có, bạn phải viết trình kết nối của riêng bạn. Tôi cũng đang tìm kiếm những điều như vậy cho mysql, nhưng tôi không nghĩ, bất cứ ai đã bắt đầu bất kỳ nỗ lực trên mặt trận này. Tôi rất muốn biết, mọi nỗ lực liên tục theo hướng này.

Hãy xem câu hỏi tương tự cho mysql. Meteor with mysql

+1

Ai đó vừa làm :) https://github.com/drorm/meteor-sql –

2

Điều gần nhất với những gì bạn đang yêu cầu hiện có là Meteor SQL project, mặc dù hiện tại nó chỉ hỗ trợ MySQL.

Có lẽ bạn sẽ cân nhắc việc đóng góp cho dự án để hỗ trợ Postgres?

4

Nếu bạn giống tôi, bạn yêu Meteor nhưng ghét Mongo. Trong Lộ trình Trello của Meteor (https://trello.com/b/hjBDflxp/meteor-roadmap), tính năng được bình chọn nhiều nhất là Hỗ trợ SQL, PostgreSQL hoặc MySQL.

Vì không có ngày cho điều đó trong Meteor, ở đây tôi tóm tắt các giải pháp từng phần mà tôi đã tìm thấy.

1.- Chỉ sử dụng SQL cho truy vấn phía máy khách.

** UPDATE: alasql tại là một gói phần mềm sao băng:

Bạn có thể cài đặt alaSQL với

meteor add agershun:alasql 

AlaSQL và Meteor Mongo bộ sưu tập

Bây giờ bạn có thể sử dụng bộ sưu tập Meteor như các đối số. Áp dụng SQL để Meteor Bộ sưu tập:

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

Hoặc bạn có thể sử dụng với find() tùy chọn với METEOR đặc biệt() từ chức năng:

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

Hãy đối mặt với nó, Mongo sucks trên hoạt động dữ liệu chung, vì vậy có khả năng sử dụng SQL để truy vấn dữ liệu (với JOINS, GRUP BY và vv) sẽ giúp giảm đau.Có các gói cho phép bạn sử dụng SQL trong máy khách, ít nhất là đối với các truy vấn: Cách đơn giản nhất là một tiện ích cũ (2010), SqlLike (http://www.thomasfrank.se/sqlike.html). Người chơi mới trong thị trấn là alaSQL, được phát triển bởi @agershun (https://github.com/agershun/alasql). Lợi thế SqlLike là nó chỉ có 10k. AlaSQL, mạnh hơn rất nhiều, tất nhiên, nhưng để sử dụng SQL để thay thế mongo sintax trong các công đoàn và tập hợp, SqlLike là OK.

Với cả hai bạn có thể làm một cái gì đó như thế này trong helper của bạn:

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.- Thử nghiệm với sự hỗ trợ SQL trực tiếp.

Một số gói cố gắng thay thế Mongo (và minimongo) bằng MySql hoặc PostgreSQL. Gói mySql của @ numtel là Meteor-MySql https://github.com/numtel/meteor-mysql và PostgreSQL là Meteor-pg (https://github.com/numtel/meteor-pg). Cả hai đều là những nỗ lực tốt để giải quyết vấn đề, nhưng có một số vấn đề được nêu ra và bằng cách nào đó cồng kềnh để thích nghi.

Một nhóm từ lò phản ứng Hack đã hình thành luồng Meteor, và sản phẩm đầu tiên của nó là tích hợp PostgreSql với Meteor, sao băng (https://github.com/meteor-stream/meteor-postgres). Nó trông rất tốt và sử dụng alaSql trên máy khách để thay thế minimongo.

Cả hai cách tiếp cận đều tốt, nhưng chúng có một số vấn đề:

Chúng đã phá vỡ triển khai sao băng. Họ rất, rất trẻ và chưa sẵn sàng sản xuất AFAIK Họ vẫn yêu cầu tinh chỉnh cho sintax pub-sub thông thường mà chúng tôi đang sử dụng, có thể tăng vấn đề tương thích với các gói thiên thạch khác. 3.- Vẫn sử dụng Mongo, nhưng là kho lưu trữ đơn giản cho cơ sở dữ liệu MySql của bạn.

Tùy chọn này duy trì tất cả các đặc tính của Meteor và sử dụng Mongo như một kho lưu trữ thời gian cho cơ sở dữ liệu MySql hoặc PostgreSql của bạn.

Một nỗ lực tuyệt vời cho điều đó là mysql-shadow bởi @perak (https://github.com/perak/mysql-shadow). Nó làm những gì nó nói, giữ Mongo đồng bộ cả hai cách với MySql và cho phép bạn làm việc dữ liệu của bạn trong MySql.

Tin xấu là nhà phát triển sẽ không tiếp tục duy trì nó, nhưng những gì được thực hiện là đủ để làm việc với các tình huống đơn giản mà bạn không có trình kích hoạt phức tạp cập nhật các bảng hoặc nội dung khác như vậy.

Để có đồng bộ hóa đầy đủ tính năng, bạn có thể sử dụng SymmetricsDS (http://www.symmetricds.org), trình sao chép cơ sở dữ liệu được kiểm tra rất tốt. Điều này bao gồm việc thiết lập một máy chủ java mới, tất nhiên, nhưng đến nay là cách tốt nhất để chắc chắn rằng bạn sẽ có thể chuyển đổi cơ sở dữ liệu Mongo của bạn trong một kho lưu trữ đơn giản của cơ sở dữ liệu MySql, PostgreSQL, SQL Server, Informix. Tôi phải tự kiểm tra nó.

Hiện tại, MySQL Shadow có vẻ như là một giải pháp đủ tốt.

Một ưu điểm của phương pháp này là bạn vẫn có thể sử dụng tất cả các tính năng, gói, triển khai sao băng và vân vân. Bạn không phải làm bất cứ điều gì nhưng thiết lập cơ chế đồng bộ, và bạn không phá vỡ bất cứ điều gì.

Ngoài ra, nếu một ngày nào đó nhóm Meteor sử dụng một số đô la được tăng trong tích hợp SQL, ứng dụng của bạn có nhiều khả năng hoạt động như cũ.

+0

Tại sao bạn ghét Mongodb? –

+0

Vì tôi ghét cơ sở dữ liệu không chuẩn hóa và ngôn ngữ truy vấn Mongo sử dụng –

+0

Tại sao bạn ghét cơ sở dữ liệu không chuẩn hóa và ngôn ngữ truy vấn Mongos? Tôi đang cố gắng để có được một số rõ ràng về kinh nghiệm của người dân với dbs không sql và sẽ thực sự đánh giá cao nghe kinh nghiệm của bạn. –

Các vấn đề liên quan