2

私の Ruby On Rails アプリでは、ドキュメントごとに約 300x300 要素 (float 値、ほとんどが異なる) の (相対的な) 大きな行列を格納する必要があります。ドキュメントを取得するたびに、カスタム計算のために完全なマトリックスをロードする必要があります。マトリックスも頻繁に更新されます (そのため、書き込みパフォーマンスとメモリ キャッシュも問題になります)。

そのような行列を格納する良い方法は何ですか (パフォーマンスに関して)? 私の頭に浮かぶいくつかの選択肢:

  1. rowcolumnおよびの列を含むテーブルvalue。しかし、マトリックス全体 (約 90000 セル) を取得して保存することは、すべての要求に対して行うのは良い考えではないと思います (一部のメモリ キャッシュが役立ちます)。
  2. シリアル化された行列をテキスト フィールド/列に格納します。パフォーマンスの観点から、1. と比較してどう思いますか?
  3. いくつかのドキュメント データベース (Mongo など) を使用し、マトリックス全体をドキュメントの 1 つのフィールド内に格納します (2. と比較して利点がどこにあるかはわかりません)。
4

1 に答える 1

0

あらゆる種類の ACID 準拠ストレージからオンデマンドでの書き込みおよび取得のパフォーマンスが問題になるでしょう。ベスト プラクティスとして、マトリックスをメモリ内に保持するキャッシュを多用する戦略をお勧めします。複数のサーバーでマトリックスが必要な場合は、おそらく memcache を使用します。その後、リクエストサイクルから読み取りと書き込みを取り除くことができ、その後、書き込みパフォーマンスをあまり気にする必要がなくなり、何でも使用できます (MySQL のテキストフィールドなど)。

これを行うには、次のことを行うカスタム マトリックス クラスを作成することをお勧めします。

  • データのコピーがないかどうかキャッシュをチェックし、利用できない場合は、データベースからロードしてキャッシュにデータを取り込みます。
  • キャッシュ コピーが更新されると、データベースに非同期的に書き込みます。
  • コードのデータへの最適化されたインターフェイスを提供します
于 2013-03-27T16:44:24.480 に答える