• 締切済み

【設計】vb.netでファイルを読み込みDB登録を行う

すみません、vb.netで開発を行うにあたり設計に詳しい方が いらっしゃいましたらご教授願います。 開発する機能はタイトルの通り、txtファイルからデータを読み取り 内容をデータベースに登録するというものですが 現在、開発するにあたり二つのロジックを思いついており どちらが適切か迷っております。 (1) あらかじめtxtファイルの内容を全てリードし配列等の一時変数に退避   ファイルリード終了後、配列に格納されたデータを1件ずつ登録 (2) txtファイルの内容を1件リードするごとにデータベースに登録 開発環境は、vb.net、Oracle です。 txtファイルに格納されているデータ量はファイルにより様々ですが 多くても2万件が予想されます。 迷っている理由としては、 (1)は2万件のデータ量を配列に格納したとしてメモリが耐えれるかどうか? (2)は、1件ずつ読込みデータベースに登録するとなると  その分ファイル及びデータベースへのアクセス時間が長くなり  負荷がかかるのでは? という、懸念事項が考えられ迷っております。 上記、二つの開発手法の内どちらがベストか または、上記以外にベストなロジックがあればご教授お願い致します。

みんなの回答

回答No.3

データ項目数 配列の持ち方 データベースへ登録の仕方 で、どちらでも負荷が掛かります。 項目数が少なく、件数のみ2万件を超えるのであればどちらでもかわらない。 トランザクションをどの単位で切るのか 登録でエラーが発生した場合はどう対処するのか ファイルのアクセスは他からあるのか などを考慮して先に全部読むのか、1件ずつ読んで登録するのか決めるべきです。

mashirushi
質問者

お礼

アドバイス有難うございます。 御礼が遅くなり大変申し訳ございません。 >データ項目数 >配列の持ち方 >データベースへ登録の仕方 >で、どちらでも負荷が掛かります。 ご指摘通りなのですが、お恥ずかしい話 DBのレイアウトがまだ決まってない状況なのです。。。 ですので、2万件のレコードと書きましたが 1レコード当りのデータ量が予測できないため 具体的な数値でお伝えすることができない状況です。 >トランザクションをどの単位で切るのか >登録でエラーが発生した場合はどう対処するのか >ファイルのアクセスは他からあるのか >などを考慮して先に全部読むのか、 >1件ずつ読んで登録するのか決めるべきです。 上記内容を考慮し、また他の皆様の意見を 参考にさせて頂きたいと思います。 有難うございました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

>2万件のデータ量をメモリーできるか メモリー量は件数かける1件当たりのメモリー消費量だから耐えられるかなんてあなた以外のだれもわからない >1件ずつ読込みデータベースに登録するとなると  その分ファイル及びデータベースへのアクセス時間が長くなり  負荷がかかるのでは? それを軽減するための機構がコンピュータには40年以上前から備わっています。 バッファリング なーーんにも考えずに1件ずつ処理しましょう。 勝手にメモリー内にためて適切なところ実際の読み書きをしてくれます。(まともなOSならば) 2万件の見積もりがいつもっと大きくなるか解りません。 まぁ大量の配列を用意するような場合プログラムの場合はOSが勝手にスワッピングという方法で対処してくれますけど。

mashirushi
質問者

お礼

アドバイス有難うございます。 1件ずつ処理を実施して問題ないみたいですね。 ありがとうございました。 アドバイスを参考にさらに考えてみます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>設計に詳しい方が といった大げさな話ではないのでは。 実際 http://oshiete1.watch.impress.co.jp/qa3294474.html などを参考に、実際やってみたらどうでしょう。 Googleで「テキスト Oracle 読み込み VB.Net」 などで照会してみてコードを探すとか。 >多くても2万件が予想されます。 この程度(?)の件数で、なぜそんなに心配するのかな。 >データを読み取り内容をデータベースに登録するというものですが ・例えばシステム切り替えなどで、バッチ処理でのことなのかな。 ・処理の最初に読み込んでおけば仕舞いの例かな。 ・多種類の2万件のテキストデータがあるとして、それを検索時などに読み込んでオラクルに入れて検索し、結果を返し、続けて他の場合は他の2万件の別のテキストファイルを読んで、そこから検索し、結果を返すとして、応答時間にいらいらしないか、というようなことかな。 こういう場合は全てのテキストデータでオラクルデータベースを作ってしまえばよいと思う。

mashirushi
質問者

お礼

おはようございます。 回答及び御礼が遅くなり 大変申し訳ございませんでした。 教えて頂いたURLを参考にさせて頂きます。