すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

DB素人です。30メガのデータを参照するWebアプリ(ASP.NET、C#)を作りたいのですが、C#だけで高速に検索、参照することは可能でしょうか?別途DBMS等が必要なのでしょうか?

  • 質問者:questioner
  • 質問日時:2008-12-26 15:30:34
  • 1

用途や運用や目的や予算やユーザの回線速度やサーバのスペック等で様々なソリューションが考えられるので一概には言えないと思われます。要件を絞り込む必要があるでしょう。

例えば一見さんが頻繁に来る様なショッピングサイトみたいなものを考えているのならば、データはサーバ上に置いておいて、ユーザは通常のフォームなどで入力し、サーバで検索参照した結果をクライアントに返すのが良いと思われます。 その場合はサーバの開発言語の自由度は高く、またDBMSにこだわる必要も無いと思います。

また、データ更新頻度が少なく、且つ登録ユーザ制にしたユーザだけがサービスを受けられるようにするのでしたら、クライアント側にデータをダウンロードさせて、データの差分をリアルタイムにクライアントに送る方法も有るかと思います。

その場合の処理はクライアント側にC#等で簡単なコードを作れば、今時のPCをターゲットに考えれば30MB程度だったらOnメモリでも高速に処理が出来ると思います。ただし、この場合は汎用性を考えるとC#よりもJava等を使った方が良いのですが、クライアントPCが限定されているのであればクライアント側で動作するのならC#でも何でもOKでしょう。

同じく登録ユーザ制でも、ユーザ側から更新されるデータの更新頻度が高い場合やリアルタイム性を要求される場合は排他的に処理をする必要があるのでデータはサーバ上で一元管理しないと整合性を取るのに難しくなる場合も有ります。DBMSを使えば、その仕組みは既に組み込まれているので楽です。

確かにDBMSを使えば高度で本格的な組み込み処理(例えばマトリクスとか)が出来ますが、そんな必要は無いと言うのなら自力でアプリを作っても可能ですね。検索参照程度の高速化だったら簡単なハッシュを使えば良さそうだし。 ただし、データ更新時の整合性を保つ為に排他処理等は自力で組み込む必要がありますので若干面倒です。

と言う事で、ご質問の『C#のみで高速に検索参照が可能か?』と言う回答としては、上記の条件から…複雑な検索や処理を行わないのであれば

1.データの更新頻度が少なくて、且つ登録ユーザ制等の理由で利用するユーザやPCが限定されている場合はクライアント側にデータをダウンロードする方式で十分に可能です。特に読み取り専用のデータの場合は分散処理の威力を効率良く発揮すると思います。

2.ショッピングサイトの様な場合は、サーバ側にデータを置いておいてサーバ側で処理しますが、言語やDBMS等には特にこだわる必要はありません。サーバで動作する自由な言語で処理し、結果をアプレットやフォームに送る(或いは受け取る)だけです。

3.それ以外の場合は条件等を検討する必要があると思います。

この回答の満足度
  
参考になりました。回答ありがとうございました。

並び替え:

C#でしか答えられませんが、30メガというのはデータとして非常に小さいので、最初に全てメモリ常駐させてしまえばどんなアクセス方法でも高速になると思います。

サーバアプリならば、起動時に全データを読み込んで動的にインデックスを作成すれば後はより高速なアクセスが可能になるはずです。

どのようなDBを使うかはデータ構造次第ですが、独自にVSAMを構築することはできますし、アクセスメソッドもそれほど複雑にならないと思います。
後にデータ項目追加や属性偏向などが楽にできるようにある程度汎用性は必要ですが。

  • 回答者:ふみ (質問から6時間後)
  • 0
この回答の満足度
  
やや参考になりました。回答ありがとうございました。

データを参照する「だけ」なら、C#で参照のアルゴリズム組んで
スピードを出すことも可能ですが、自分なら素直にDB使います。

エラー処理、メモリの最適化、処理速度、メンテナンスなど考えたら
既存のDBを使うのをためらう理由がみつかりません。

この回答の満足度
  
やや参考になりました。回答ありがとうございました。

30MBのことですかねぇ?それならちょっと工夫すればC#だけで十分でしょうね.
30MBのデータは30MBのメモリでは済みませんけど,まぁ,それほど肥大化することもないでしょ…毎度毎度先頭からナメる…なんてのはよろしくないです(件数が不明ですが,場所によって結構な時間差になるのはよくないなぁ…と思いますんで).

DB云々の場合は件数で話すのが一般的なので,普通に解釈すると3000万件のデータって意味になっちゃいます.(;´ω`)
仮に,3000万件なら当方は迷わずDBMSを頼るでしょう.

こういう質問のときは単位の省略は望ましくないと思いますよ.

この回答の満足度
  
参考になりました。回答ありがとうございました。

30M程度であれば、高速性を考えると、全てメモリに載せて検索してしまったほうがいいので、初期化時にファイルまたはデータベースから読み込んで、後はメモリ内で参照する形がいいと思います。DBMSはそれだけのためなら利用せずに、ファイルから読んだ方がすっきりすると思いますね。
DBは、トランザクション(データの整合性)や、メモリに収まり切らないほどのデータ量でファイルにすると煩雑な場合などに利用しますね。一般的には。

この回答の満足度
  
参考になりました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る