• 締切済み

【設計】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/17068)
回答No.1

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

mashirushi
質問者

お礼

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

関連するQ&A

  • VB.NETでのCSVファイルの読込

    VB.NETでCSVファイルを1行ずつ読込んで 取得できた値を格納するロジックが分かりません・・・ 申し訳ありませんが、どなたか教えて頂けないでしょうか???

  • VB.NETの配列

    こんにちわ。 いまVB.NET2003で開発をしている者です。 たとえば画面で入力された最大400文字(800バイト)の テキストを50文字(100バイト)ずつに区切って, 配列に格納したいのですが, 関数など,効率の良い方法はあるでしょうか? 教えてください。よろしくお願いします。

  • DLLの登録をVBで行いたい(VB2005)

    いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。

  • CSVデータをDBに移行するには

    Perlを使ってCSVデータをDBに移行して格納したい のですが、流れはCSVファイルを開いて、CSVファイルを連想配列に書き込んで、 DBを開いて、連想配列データをデータベースに書き込んで、DBを閉じるという 流れの考えでよろしいのでしょうか?

    • ベストアンサー
    • CGI
  • テキストファイルクリア .net2005 VB

    VB初心者です。よろしくお願いたします。 現在 .net2005 VBでPL/SQLの処理結果を「log.txt」に出力しておりますが、処理をするたびに、テキストファイルの下へどんどん追加されます。 そこで、画面上からログクリアボタンを押下すると、「log.txt」の中身が初期化されるようにしたいと考えて降ります。 どうすればよいか、サンプルのロジックを教えて頂けませんでしょうか?

  • VB.NETで、20バイト程度のデータを5000件ぐらい一時データとして・・

    VB.NETで、10バイト程度のデータを5000件下手すればもっと?ぐらい一時データとして・・プログラムで使いたいんですが、今はファイルに保存して読み込みながらやってるんですが、処理速度が遅いので、配列にしようかなーと考えているのですが、データベースから読み込んでいるのでデータ数が不明なのです。 dim abc as(10000) as string とかやれば簡単なのですが、これだとメモリ使いすぎ?な気がして。 何かよい方法ないでしょうかー?

  • VB2005でDBのレコード件数の取得方法

    お世話になります。 VB2005でデータベースに接続して 読み込むテーブルのレコード件数を 取得したいのですが。 内容を配列で戻すため、動的配列を 使いたい為です。 レコード件数なしは、調べて HasRows=Falseでよいのは 分かったのですが。 宜しくお願いいたします。

  • VB.netでのPerlのような配列操作

    VB.net 2003 を使用してカンマ区切りのテキストファイルから データを読み込み、ソートや検索や絞込みをしたいと思っています。 Perlで記述する場合、SortやGrepでかなり自由な配列操作ができましたが、VB.netではGrepにあたるものが見当たりません。 データは1件ごとに暗号化したいので、XMLを使うのは現実的ではないのかなと考えます。 CSVを読み込み、インデックス的な配列を作成し ソート結果などに応じてテキストファイルから必要なデータを読む という事を行ないたいのですが、何かよい方法はありませんか? そもそも配列を使うこと自体ナンセンスなのでしょうか?

  • VB.NETの配列とArrayListについて教えてください。

    VB.NETで配列にPoint型のデータを入れたいのですが、 ArrayListのAddメソッドのように総数をあらかじめ指定せずに 順次追加するように登録していきたいのですが、 そのようなことは可能でしょうか? 最終的には Dim points As Point() g.DrawLines(Pens.Black, points) の方法で線分を描きたいのですが、 ArrayListですとデータ型が指定できないので Point型のデータを格納できないです。 良い方法がありましたら、ご教示頂けると助かります。

  • CSVファイルを読み込み、ファイル名を変更。

    CSVファイルを読み込み、ファイル名を変更。 使用言語はperlです。perlは初心者です。 アルゴリズムが、 CSVファイルを読み込み→2次元配列に格納→ファイル名変更 という流れになっているプログラムを作成中です。 CSVファイルの中身は あ.txt , a.txt い.txt , b.txt う.txt , c.txt です。 CSVファイルを読み込み2次元配列に格納するプログラムは以下のようにしました。 ----------------------------------- $i= 0; open IN, "sample.csv"; while (<IN>) { my @data = (); @data = split (/,/); for (0..@data) {$jdata[$i][$_] = "$data[$_]";} $i++; } close IN; ---------------------------------------- 「あ.txt」を「a.txt」に変更しようとして、この中に rename $jdata[0][0] , $jdata[0][1] ; と書いてみましたが、変換されません。 どう書けばよいのでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう