2011-10-18 5 views
0

私は約1500行×1500列のスプレッドシートを持っています。上部および側面に沿ったラベルは同じであり、セル内のデータは2つの入力に対する定量化された類似性スコアである。私は行と列の値を入力し、類似性スコアを取得するユーザーを許可するRailsアプリケーションを作りたいと思います。類似性スコアは実験的に導き出され、コントローラによって数学的に生成することはできない。静的データの大きなスプレッドシート:リレーショナルデータベースまたはフラットファイル?

いくつかの考慮事項:すべてのセルがいっぱいになると、データの半分以上が冗長です。例えば(行34、列985)は(行985、列34)と同じ値を保持する。行xは常に列xと完全に似ています。データは静的であり、何年も変化しません。

これは1つのdbテーブルで行うことができますか?より良い方法がありますか?リレーショナルデータベースを完全にスキップして何らかの形でファイルを直接照会することはできますか?

すべてのサポートとアドバイスは大歓迎です!

答えて

1

データベースは、常に安全な場所に保管してください。リレーショナルデータベースは簡単で良いアイデアです。しかしながら、考慮すべき選択肢がある。このデータはどのくらいの頻度でアクセスされますか?それはまれに、または非常に頻繁にアクセスされていますか?非常にまれにしかアクセスされていない場合は、データベースに格納し、コードで検索とプレゼンテーションを行います。データベース索引などで最適化します。

フラットファイルは良いアイデアですが、実行時にすべての要求に対して読み取りと検索が遅すぎます。

サーバの起動時にすべてのデータ(db/fileから)を読み込み、メモリに保存してサーバが頻繁に再起動しないようにすることができます。これは、サーバーのそれぞれがメモリ内のグリッド全体に座っていることを意味しますが、計算は非常に高速になります。 REEを使用してガベージコレクションの設定を調整する場合は、サーバーの起動時間を大幅に短縮することもできます。

ここに私の最後の提案があります。あなたが知っている最も簡単な方法であなたのアプリを構築するだけです。アプリの使用頻度と使用量を把握したら、最適化を開始します。基本的に1125000セルで作業しています。これは、処理するデータベースにとって不当に大きなデータセットではありません。しかし、あなたのデータセットは変更されないので、従来のキャッシング技術によって遠くに行くことができます。

関連する問題