2012-12-25 31 views
10

cảm ơn tất cả mọi người! thời gian gần đây tôi muốn xây dựng một cms nhỏ trên thiên thạch, nhưng có một số câu hỏiLàm cách nào để lưu dữ liệu trong Meteor?

1, bộ nhớ cache, bộ nhớ cache trang, bộ nhớ cache dữ liệu, vv ..

Ví dụ, khi mọi người tìm kiếm một số bài viết

trong phía máy chủ:

Meteor.publist('articles',function(keyword){ 
    return Articles.find({keyword:keyword}); 
}); 

trong ứng dụng:

Meteor.subscribe('articles',keyword); 

đó là ok, nhưng ...... câu hỏi là, mọi người làm như vậy, nó gọi một truy vấn mongo, và giảm hiệu suất, trong khuôn khổ khác sử dụng phổ biến http hoặc https, mọi người có thể phụ thuộc vào một cái gì đó như mực hoặc véc ni để lưu trữ trang hoặc dữ liệu, vì vậy mỗi khi bạn định tuyến đến một url, bạn đọc dữ liệu từ máy chủ cache, nhưng Meteor được xây dựng trên socket.js hoặc websocket, và tôi không biết làm thế nào để cache qua socket .... ... Tôi trám véc ni, nhưng không thấy hiệu quả. như vậy, có thể nó bỏ qua các websocket? Là có một số phương pháp để lưu trữ dữ liệu, trong mongodb, trong máy chủ, tôi có thể thêm một số máy chủ bộ nhớ cache?

2, chat

Tôi thấy ví dụ chatroom trong https://github.com/zquestz/simplechat Nhưng không giống như implyment sử dụng socket.js, ví dụ này lưu các tin nhắn trò chuyện trong MongoDB, vì vậy các luồng dữ liệu là thông điệp -> mongo-> query- > mọi người, điều này gọi truy vấn mongo quá! và trong socket.js, chỉ cần lưu socket trong bối cảnh (hoặc cache phía máy chủ), vì vậy dữ liệu không đi qua db. Câu hỏi của tôi là, có giao diện socket trong Meteor, vì vậy tôi có thể nhắn tin-> socket-> mọi người? và nếu không thể, biểu diễn như thế nào trong môi trường sản xuất như ví dụ về phòng chat (tôi thấy nó chạy chậm ...)

Trả lời

10

Với Meteor, bạn không phải lo lắng về việc lưu vào bộ nhớ truy vấn Mongodb. Meteor làm điều đó cho bạn. Per the docs on data and security:

Mỗi khách hàng Meteor đều có bộ đệm cơ sở dữ liệu trong bộ nhớ. Để quản lý bộ đệm máy khách, máy chủ xuất bản bộ các tài liệu JSON và khách hàng đăng ký các bộ đó. Là tài liệu trong một thay đổi thiết lập, máy chủ vá lỗi bộ nhớ cache của từng khách hàng.

[...]

Sau khi đăng ký, khách hàng sử dụng bộ nhớ cache của nó như là một cơ sở dữ liệu địa phương nhanh chóng, đơn giản hóa đáng kể mã khách hàng. Đọc không bao giờ yêu cầu một chuyến đi khứ hồi tốn kém đến máy chủ. Và chúng được giới hạn trong nội dung của bộ nhớ cache: truy vấn cho mọi tài liệu trong một bộ sưu tập trên máy khách sẽ chỉ trả lại tài liệu mà máy chủ đang xuất bản cho ứng dụng đó.

Vì Meteor thường xuyên thăm dò ý kiến ​​của máy chủ để xem bộ nhớ cache của khách hàng có cần vá hay không, có thể bạn sẽ thấy những cuộc thăm dò đó xảy ra ngay bây giờ. Nhưng chúng có lẽ không phải là những yêu cầu rất lớn. Ngoài ra, do một tính năng của Meteor được gọi là độ trễ bù, khi bạn cập nhật một nguồn dữ liệu, máy khách sẽ ngay lập tức phản ánh thay đổi mà không phải chờ đợi đầu tiên trên máy chủ. Điều này làm giảm sự xuất hiện của giảm hiệu suất cho người dùng.

Nếu bạn có nhiều tài liệu trong mongo, bạn cũng có thể thấy tất cả các tài liệu được tải xuống nếu bạn vẫn bật gói tự động phát hành.Bạn có thể khắc phục điều đó bằng cách xóa nó bằng meteor remove autopublish và viết mã để chỉ xuất bản dữ liệu có liên quan thay vì toàn bộ cơ sở dữ liệu.

Nếu bạn thực sự cần phải quản lý bộ nhớ đệm bằng tay, các tài liệu cũng đi vào đó:

khách hàng tinh vi có thể biến đăng ký và tắt để kiểm soát bao nhiêu dữ liệu được lưu giữ trong bộ nhớ cache và quản lý lưu lượng mạng. Khi một đăng ký bị tắt, tất cả tài liệu của nó sẽ bị xóa khỏi bộ nhớ cache trừ khi cùng một tài liệu cũng được cung cấp bởi một đăng ký đang hoạt động khác.

Cải tiến hiệu suất bổ sung cho Meteor hiện đang được thực hiện, bao gồm proxy cấp DDP hỗ trợ "số lượng lớn ứng dụng khách". Bạn có thể xem thêm chi tiết về điều này tại the Meteor roadmap.

+0

rất cảm ơn !!!! – user1208300

+0

Nhưng câu hỏi là, ví dụ, tôi có một trang web và mọi người đến trang chủ, họ phải tải tất cả dữ liệu từ máy chủ sao băng! Nhưng nếu bạn sử dụng ngôn ngữ hoặc khung công tác khác, bạn có thể sử dụng véc ni hoặc mực để lưu vào bộ nhớ cache trang chủ, tải dữ liệu từ máy chủ bộ nhớ cache. Ý tôi là, tôi có thể có véc ni hoặc mực hoặc nginx trước khi sao băng của tôi lưu vào bộ nhớ cache thứ gì đó, máy chủ cache có thể hiểu DDP (hoặc websocket) của Meteor không? – user1208300

+0

Hiện tại là không thể nhưng nó đang được phát triển, vì vậy hãy kiểm tra lại sau vài tháng và theo dõi lộ trình Meteor. – Rahul

0

tôi đã tạo ra một ứng dụng di động và bộ nhớ cache của cơ sở dữ liệu đã không làm việc vì vậy tôi đã sử dụng GroundDB gói của thiên thạch https://github.com/raix/Meteor-GroundDB nay là cơ sở dữ liệu luôn luôn là ở địa phương mỗi khi tôi khởi động lại ứng dụng, Ngoài ra, bạn cần phải xem xét trong appcache gói với một thiên thạch để cache toàn bộ ứng dụng cục bộ.

3

Nếu bạn vấp phải câu hỏi này không phải vì thiếu hiểu biết về minimongo của thiên thạch và thay vào đó, hãy quan tâm đến cách đăng ký bộ nhớ cache sau khi chúng không còn cần thiết nữa (nhưng có thể trong tương lai và không muốn để giữ thêm DDP overhead của họ trên máy chủ của khách hàng) có hai tùy chọn gói:

https://github.com/ccorcos/meteor-subs-cache

https://github.com/kadirahq/subs-manager

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