3

サーバー側で公開されたコレクションで一括変更を行う流星の方法はありますか?...個々のレコードをすべてのサブスクライバーに1つずつ送信せずに、数百または数千のレコードを更新/挿入するなど?

私は定期的にサード パーティのデータを取得しており、すべての更新または挿入を 1 つのバッチ更新として 1 回の取得で収集して、すべてのクライアントが数千のミニ更新ではなく 1 つの変更パッケージとして受信できるようにしたいだけです。1 つずつ行うと、アプリの ATM に大きなボトルネックが生じます。

この atm が meteor でサポートされていない場合は、mongo に直接更新を行い、次の mongo 投票で meteor がそれを取得できるようにする必要がありますか?

// imagine myChanges array with 1000 items
myChanges.forEach(function(change){
    // this will trigger the sync with clients immediately... 1000 times
    // currently this will practically hang my server
    // i want to gather the changes here instead
    MyCollection.update({_id: change.docId}, change);
});

// and trigger the sync here instead

ありがとう、レイオ

4

1 に答える 1

0

アプリケーションの複雑さ、または発行呼び出しの数によっては、独自の発行関数をローリングすることでこれを達成できます。

すなわち代わりに

Meteor.publish("myCollection", function() {
    return myCollection.find(); } );

独自の Publish / Cursor を作成し、それにフックを追加します。

Meteor.publish("myCollection", function() {
    globalObserver = myCollection.find().observe({
        added: function(item) {
            publication.added(item);
        }
        // And So on
     });

バッチ更新は、何らかの方法でこの発行関数とやり取りする必要があり、更新が完了するとオブザーバーを停止して再初期化します。

于 2015-06-20T19:29:20.933 に答える