2016-03-19 5 views
1

ディープストリームのrecord.getListを使用して、電子メールや他の一意の識別子など、多くのユニークな値を格納するのは良いか悪いのかと思います。主な目的は、例えば、そのような電子メール(使用中の電子メール)を持っているユーザーや特定の固有のフィールドによる別のレコードを既に持っているかどうかを迅速に質問に答えることです。私は数千の値を持つリストを移入しようとしたとき、私は ディープストリームリストを使用して数万のユニークな値

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory 

を持って、私のdeepstreamサーバが消えた 1):

私は今日、いくつかの実験を行い、二つの問題を得ました。私は、このフラグ

--max-old-space-size=5120 

それは罰金を見ていないと、サーバノードプロセスに多くのメモリを追加することによって、それを修正することができましたが、私は5000の以上の項目にリストを作成することができました。

2)私は50000個の項目でリストを事前に作成し、テーブルをrethinkdbに直接データを入れて、リストを取得するか、それを・修正の上に別の問題を得たので、それは私のテストのために十分ではありませんでした:

RangeError: Maximum call stack size exceeded 

I別のフラグを付けて、それを修正することができました:

--stack-size=20000 

それは役立ちますが、私はそれがリストのサイズが適正値に達したときに、それらのいずれかのエラーが生産に表示される時間の問題だと考えています。私は本当にそれがnodejs、javascript、deepstream、rethinkdbのいずれの問題であるかはわかりません。それは一般的に私がディープストリームリストを間違った方法で使用しようと思うようにしていました。私にお知らせください。前もって感謝します!

答えて

2

リストを使用して文字列の配列を格納することはできますが、実際にはレコード名のコレクションとして意図されています。実際のデータはレコード自体に格納され、リストはレコードの順序のみを管理します。

sending more efficient deltasによるといえメモリに関しては introducing a pagination option

興味深い結果、より優雅に処理する必要が間違いなく何かすることにより、非常に長いリストのパフォーマンスを改善するには、2つのオープンGithubの問題がある、と述べました。一方で、あなたは大幅一つにアップデートを組み合わせることにより、パフォーマンスを向上させることができます:

var myList = ds.record.getList('super-long-list'); 

// Sends 10.000 messages 
for(var i = 0; i < 10000; i++) { 
    myList.addEntry('something-' + i); 
} 

// Sends 1 message 
var entries = []; 
for(var i = 0; i < 10000; i++) { 
    entries.push('something-' + i); 
} 

myList.setEntries(entries); 
+0

私の場合は、たとえば、ユーザーが1つずつにサインアップしますので、私は新しいでしょう、と私は一括更新を行うことができないということです登録ごとにリストのメール。ユニークな電子メールの例でサインアップしてみましょう。明白ですが、重複しないように気をつける必要のある固有の値を持つエントリがあります。リストがこのビジネスロジックを処理する正しいアーキテクチャーな決定ではないかと思います。 deepstream.io-provider-search-rethinkdbという2つの他のソリューションがあります。フィルタまたはセカンダリインデックスで検索するためにrethinkdbを直接参照してください。他のアイデア? –

+1

ユーザー名と電子メールは変更できません。実際には変更されません。 RPCを使って伝統的なリクエスト/レスポンスベースのアプローチを使用してDBに格納するのは意味があると思います。 deepstream.io(およびそれに関する他のリアルタイムフレームワーク)の課題は、リアルタイムデータの使用において効率的であることです。つまり、現在のビューに表示されている のデータを特定することです。 b)ユーザーの名前に必ずしも当てはまらない の変更が必要です。だからこそ、deepstreamはRPC、イベント、そしてレコードの混合を提供しています – wolframhempel

+0

ええ、あなたの返信ありがとうございます。私はユーザー名やその他のフィールドを私がユニークにすることは頻繁に変更されませんので、私はデータベースに直接ルックアップに固執することに同意します。 –

関連する問題