- 締切済み
【設計】vb.netでファイルを読み込みDB登録を行う
すみません、vb.netで開発を行うにあたり設計に詳しい方が いらっしゃいましたらご教授願います。 開発する機能はタイトルの通り、txtファイルからデータを読み取り 内容をデータベースに登録するというものですが 現在、開発するにあたり二つのロジックを思いついており どちらが適切か迷っております。 (1) あらかじめtxtファイルの内容を全てリードし配列等の一時変数に退避 ファイルリード終了後、配列に格納されたデータを1件ずつ登録 (2) txtファイルの内容を1件リードするごとにデータベースに登録 開発環境は、vb.net、Oracle です。 txtファイルに格納されているデータ量はファイルにより様々ですが 多くても2万件が予想されます。 迷っている理由としては、 (1)は2万件のデータ量を配列に格納したとしてメモリが耐えれるかどうか? (2)は、1件ずつ読込みデータベースに登録するとなると その分ファイル及びデータベースへのアクセス時間が長くなり 負荷がかかるのでは? という、懸念事項が考えられ迷っております。 上記、二つの開発手法の内どちらがベストか または、上記以外にベストなロジックがあればご教授お願い致します。
- mashirushi
- お礼率85% (6/7)
- Visual Basic
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kazuhisa01
- ベストアンサー率32% (158/487)
データ項目数 配列の持ち方 データベースへ登録の仕方 で、どちらでも負荷が掛かります。 項目数が少なく、件数のみ2万件を超えるのであればどちらでもかわらない。 トランザクションをどの単位で切るのか 登録でエラーが発生した場合はどう対処するのか ファイルのアクセスは他からあるのか などを考慮して先に全部読むのか、1件ずつ読んで登録するのか決めるべきです。
- rivoisu
- ベストアンサー率36% (97/264)
>2万件のデータ量をメモリーできるか メモリー量は件数かける1件当たりのメモリー消費量だから耐えられるかなんてあなた以外のだれもわからない >1件ずつ読込みデータベースに登録するとなると その分ファイル及びデータベースへのアクセス時間が長くなり 負荷がかかるのでは? それを軽減するための機構がコンピュータには40年以上前から備わっています。 バッファリング なーーんにも考えずに1件ずつ処理しましょう。 勝手にメモリー内にためて適切なところ実際の読み書きをしてくれます。(まともなOSならば) 2万件の見積もりがいつもっと大きくなるか解りません。 まぁ大量の配列を用意するような場合プログラムの場合はOSが勝手にスワッピングという方法で対処してくれますけど。
お礼
アドバイス有難うございます。 1件ずつ処理を実施して問題ないみたいですね。 ありがとうございました。 アドバイスを参考にさらに考えてみます。
- imogasi
- ベストアンサー率27% (4737/17068)
>設計に詳しい方が といった大げさな話ではないのでは。 実際 http://oshiete1.watch.impress.co.jp/qa3294474.html などを参考に、実際やってみたらどうでしょう。 Googleで「テキスト Oracle 読み込み VB.Net」 などで照会してみてコードを探すとか。 >多くても2万件が予想されます。 この程度(?)の件数で、なぜそんなに心配するのかな。 >データを読み取り内容をデータベースに登録するというものですが ・例えばシステム切り替えなどで、バッチ処理でのことなのかな。 ・処理の最初に読み込んでおけば仕舞いの例かな。 ・多種類の2万件のテキストデータがあるとして、それを検索時などに読み込んでオラクルに入れて検索し、結果を返し、続けて他の場合は他の2万件の別のテキストファイルを読んで、そこから検索し、結果を返すとして、応答時間にいらいらしないか、というようなことかな。 こういう場合は全てのテキストデータでオラクルデータベースを作ってしまえばよいと思う。
お礼
おはようございます。 回答及び御礼が遅くなり 大変申し訳ございませんでした。 教えて頂いたURLを参考にさせて頂きます。
関連するQ&A
- VB.NETでのCSVファイルの読込
VB.NETでCSVファイルを1行ずつ読込んで 取得できた値を格納するロジックが分かりません・・・ 申し訳ありませんが、どなたか教えて頂けないでしょうか???
- 締切済み
- Visual Basic
- VB.NETの配列
こんにちわ。 いまVB.NET2003で開発をしている者です。 たとえば画面で入力された最大400文字(800バイト)の テキストを50文字(100バイト)ずつに区切って, 配列に格納したいのですが, 関数など,効率の良い方法はあるでしょうか? 教えてください。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- DLLの登録をVBで行いたい(VB2005)
いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- CSVデータをDBに移行するには
Perlを使ってCSVデータをDBに移行して格納したい のですが、流れはCSVファイルを開いて、CSVファイルを連想配列に書き込んで、 DBを開いて、連想配列データをデータベースに書き込んで、DBを閉じるという 流れの考えでよろしいのでしょうか?
- ベストアンサー
- CGI
- テキストファイルクリア .net2005 VB
VB初心者です。よろしくお願いたします。 現在 .net2005 VBでPL/SQLの処理結果を「log.txt」に出力しておりますが、処理をするたびに、テキストファイルの下へどんどん追加されます。 そこで、画面上からログクリアボタンを押下すると、「log.txt」の中身が初期化されるようにしたいと考えて降ります。 どうすればよいか、サンプルのロジックを教えて頂けませんでしょうか?
- ベストアンサー
- Visual Basic
- VB.NETで、20バイト程度のデータを5000件ぐらい一時データとして・・
VB.NETで、10バイト程度のデータを5000件下手すればもっと?ぐらい一時データとして・・プログラムで使いたいんですが、今はファイルに保存して読み込みながらやってるんですが、処理速度が遅いので、配列にしようかなーと考えているのですが、データベースから読み込んでいるのでデータ数が不明なのです。 dim abc as(10000) as string とかやれば簡単なのですが、これだとメモリ使いすぎ?な気がして。 何かよい方法ないでしょうかー?
- ベストアンサー
- Visual Basic
- VB2005でDBのレコード件数の取得方法
お世話になります。 VB2005でデータベースに接続して 読み込むテーブルのレコード件数を 取得したいのですが。 内容を配列で戻すため、動的配列を 使いたい為です。 レコード件数なしは、調べて HasRows=Falseでよいのは 分かったのですが。 宜しくお願いいたします。
- 締切済み
- Visual Basic
- VB.netでのPerlのような配列操作
VB.net 2003 を使用してカンマ区切りのテキストファイルから データを読み込み、ソートや検索や絞込みをしたいと思っています。 Perlで記述する場合、SortやGrepでかなり自由な配列操作ができましたが、VB.netではGrepにあたるものが見当たりません。 データは1件ごとに暗号化したいので、XMLを使うのは現実的ではないのかなと考えます。 CSVを読み込み、インデックス的な配列を作成し ソート結果などに応じてテキストファイルから必要なデータを読む という事を行ないたいのですが、何かよい方法はありませんか? そもそも配列を使うこと自体ナンセンスなのでしょうか?
- ベストアンサー
- Visual Basic
- VB.NETの配列とArrayListについて教えてください。
VB.NETで配列にPoint型のデータを入れたいのですが、 ArrayListのAddメソッドのように総数をあらかじめ指定せずに 順次追加するように登録していきたいのですが、 そのようなことは可能でしょうか? 最終的には Dim points As Point() g.DrawLines(Pens.Black, points) の方法で線分を描きたいのですが、 ArrayListですとデータ型が指定できないので Point型のデータを格納できないです。 良い方法がありましたら、ご教示頂けると助かります。
- ベストアンサー
- Visual Basic
- 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
お礼
アドバイス有難うございます。 御礼が遅くなり大変申し訳ございません。 >データ項目数 >配列の持ち方 >データベースへ登録の仕方 >で、どちらでも負荷が掛かります。 ご指摘通りなのですが、お恥ずかしい話 DBのレイアウトがまだ決まってない状況なのです。。。 ですので、2万件のレコードと書きましたが 1レコード当りのデータ量が予測できないため 具体的な数値でお伝えすることができない状況です。 >トランザクションをどの単位で切るのか >登録でエラーが発生した場合はどう対処するのか >ファイルのアクセスは他からあるのか >などを考慮して先に全部読むのか、 >1件ずつ読んで登録するのか決めるべきです。 上記内容を考慮し、また他の皆様の意見を 参考にさせて頂きたいと思います。 有難うございました。