2012-04-27 5 views
6

私は2つのコレクションを使用するためにリーダーボードの例を修正:どのようにデータをMeteorクライアントのキャッシュに同期させるかを管理できますか?

Players = new Meteor.Collection("players"); 
Tasks = new Meteor.Collection("tasks"); 

プレイヤーのコレクションは一例で定義された6つの文書を持っています。

> db.players.count() 
6 

タスクコレクションには48,000個のドキュメントがあります。

> db.tasks.count() 
48000 

ブラウザを開くと、ノードは100%CPUにジャンプし、クライアントはタスクレコードのいずれも見ることができません。

Players.find().count() 
6 
Tasks.find().count() 
0 

私はクエリ基準を定義しようとしましたが、これはサーバー上でのみ動作し、クライアントでは役に立ちません。

私は48,000のドキュメントが同期するにはあまりにも多いと推測しています。これはNodeが100%CPUでペグを引き起こし、クライアントはhttp://i.imgur.com/zPcHO.pngのようなエラーを投げます。

すべての同期を防止し、特定のドキュメントのみをコレクションから取得するにはどうすればよいですか?

+1

パート:

$流星はあなたが必要な制御を提供している、マニュアルを使用する公開と機能をサブスクライブすることを学ぶ、その後autopublish

を削除:パッケージを削除し、この動作をオフにするにはautopublish機能を無効にするように見えます。オートパブリッシュは、少数のドキュメントを使って単純な例を「うまくいく」ようにしますが、それ以上のデータではうまく機能しません。プロジェクトディレクトリで、 'meteor remove autopublish'を使用します。次に、独自のパブリッシュおよびサブスクライブ関数を記述します。 –

答えて

18

すべてのコレクションをクライアントに公開するMeteorの自動公開は非常に印象的であり、物事は速くなりますが、実際のアプリケーションではそれほど有用ではないRailsの足取り機能のようなものです - 学習とプロトタイプ作成用です。

デフォルトでは、Meteorはコレクション内のすべてのドキュメントを、接続されている各クライアントに自動的に公開します。答えのhttp://docs.meteor.com/#publishandsubscribe

+1

も削除してください:meteor remove insecure – radtek

+0

@radtek:安全のために '安全でない'パッケージを削除することは重要ですが、削除すると元の質問には全く答えられないことに注意してください。 – Clawsy

+0

@ Clawsy私のコメントは、現在の答えに加えて、完全な答えではありません。 – radtek

関連する問題