- PR -

大量のデータをCSV保存するソリューション

1
投稿者投稿内容
ken
常連さん
会議室デビュー日: 2004/04/06
投稿数: 34
投稿日時: 2004-12-02 20:49
いつもお世話になっております。
現在SQLServerを使って、履歴を表示するアプリケーションを作っています。
お客さんの要望により、今まで数ヶ月しか保存していなかった履歴を、CSVに1年間保存する機能を作ることになりました。
ただデータ量やテーブル量が多いのと、DBにこれ以上の負荷をかけたくないので、一ヶ月に一回、テーブルのデータをCSVに保存しておき、新しく作るCSV保存機能を実行すると保存しようとしたグループデータ(保存する場合はグループごとに保存するので、このグループに保存しているポイントの全データなどというケースがあります)を結合してお客さんが指定した場所に1年間分のCSVを作ろうと考えています。
DBに1年間分のデータを保存しないが、1年間分のCSVデータが欲しいという場合に他にも方法があるのでしょうか?
もし分かるかたがいらっしゃいましたらご教授ください。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-02 21:49
何をしたいのかよくわかりませんが、要は
・データは1年分だけ参照したい
・その他のデータは1ヶ月単位でCSV化して1年単位でまとめたい
ということでしょうか?

どういう経緯・目的でこのような処理をしたいのかわからないので、
適切なアドバイスは無理だと思いますが、
せっかく商用DBを使っているのですから
その機能を使うべきだと思いますね。

データ量が多いということですが、
具体的にどの程度の量があるのでしょうか?

ちなみにSQLServerを使用されているのでしたら、
スケジュール機能とDTS機能を使えば、
楽に実装可能だと思いますよ。

[ メッセージ編集済み 編集者: かつのり 編集日時 2004-12-02 21:50 ]
ken
常連さん
会議室デビュー日: 2004/04/06
投稿数: 34
投稿日時: 2004-12-03 18:04
引用:

かつのりさんの書き込み (2004-12-02 21:49) より:
何をしたいのかよくわかりませんが、要は
・データは1年分だけ参照したい
・その他のデータは1ヶ月単位でCSV化して1年単位でまとめたい
ということでしょうか?


説明が足りなくてすみません。
・1年分のCSVのデータを保存する機能を実装したい
・しかし、DBには2ヶ月分のデータしか保存したくない
・データ量は1年間分だと何千万レコード以上できる
なぜこのような機能を実装したいかというと、データ量が多いので、DBにデータを保存することにより、SQLServerへの負荷が増えて、他のDBを参照している機能が遅くなるのは避けたいからです。
この件に関しては、教えていただいたスケジュール機能とDTS機能を調べてみて、もう一度検討してみます。ありがとうございました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-03 23:09
なんとなくわかりました。

何百万という月ごとのレコードをCSVに落とすというのは、
CSVじゃなきゃいけないものなのでしょうか?
何百万とあれば、当然EXCELでは見れないですし、
あまり意味がないような気がします。。。

ちなみに、参照したいテーブルのレコード数が多くなれば、
それなりに速度の問題が出てくるとは思いますが、
参照しないテーブル(バックアップ用)にレコードが増えたからって、
システムの速度に影響を与えることはないですよ。

参考までに私なら、

1・メインのデータベースの他にバックアップ用のデータベースを作る
2・月次処理でテーブルから2ヶ月前のデータをすべてバックアップに移動する

どうしてもバックアップデータを外部化したいのであれば、

3・SQLServerのバックアップ機能で、バックアップデータベースをバックアップする
4・バックアップデータベースのデータを全削除する

作られたバックアップファイルはEnterpriceManagerでもSQL文でも復元が可能です。
そんなに容量もありませんし、復元も高速です。



#余計なお世話だって感じでしたらゴメンナサイ。。。
ken
常連さん
会議室デビュー日: 2004/04/06
投稿数: 34
投稿日時: 2004-12-05 22:48
引用:

かつのりさんの書き込み (2004-12-03 23:09) より:
何百万という月ごとのレコードをCSVに落とすというのは、
CSVじゃなきゃいけないものなのでしょうか?
何百万とあれば、当然EXCELでは見れないですし、
あまり意味がないような気がします。。。


かつのりさんの言うとおり月ごとのデータはバイナリファイルでもなんでもいいのですが、保存した結果はCSVファイルとして欲しいというのがお客さんの要望です。
引用:

ちなみに、参照したいテーブルのレコード数が多くなれば、
それなりに速度の問題が出てくるとは思いますが、
参照しないテーブル(バックアップ用)にレコードが増えたからって、
システムの速度に影響を与えることはないですよ。


確かにそうですね。今回はお客さんがDBにたくさんデータ保存したくないということもあって、別ファイルに保存しようとしたのですが、保存できるなら一番バックアップDBを作ってそこにバックアップが一番よさそうですね。
かつのりさんの方法もいいのですが、今回CSV保存するにあたり、保存処理を行っているときにDBに負荷をかけたくないのですが、バックアップ機能で作成したファイルからデータを取得して、CSVデータの形式に変換ということは可能でしょうか?
後余計なお世話なんてことはありません。色々知らないことが多いので教えていただけて嬉しいです。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-05 23:53
DTS機能を使えばCSVが高速で作成できます。
他にもEXCELファイルの作成とか色々できて、とにかく早いですよ。
プログラムを書く必要もないですし、
逆にプログラムをウィザードで生成して、
起動プログラムを作ることもできます。

CSV作成はそれなりに負荷はかかります。
年中パフォーマンスが要求されるシステムなら我慢が必要かと思いますが、
運用状況で負荷の少ない時間帯を把握して
その時間にバッチを起動するというようなことも可能ですよね。
ただしマシンスペック・負荷状況・レコードの大きさ・抽出条件にもよりますが、
数百万件のレコードをCSVにするといっても何時間もかかることはありません。

まずはバックアップ対象と同様のダミーのレコードを作ってみて、
実際にバックアップ処理を走らせて時間計測してみてはいかがですか?
1

スキルアップ/キャリアアップ(JOB@IT)