###前提
現在、
C++を使用してサービスを作成し、
対象機器よりXMLデータを受信して、
整形後にPostgreSQLへ書き込む処理になっています。
収集は1分サイクルとなっており、
都度最新データを受信します。
※XMLデータ受信 -> DB書込 と一連の流れは同期処理となっています。
ですが、
DBの負荷がネックになっており、
DB書込時に時間がかかり応答が帰ってくるまでに
周期である1分を過ぎてしまい欠落が発生しています。
そこで、
DB書込部分を指定ディレクトリにファイル出力するようにして、
別サービスを作成し、別サービスでファイル読込後にDBへ書込む処理に変更したいと考えています。
SQL形式に整形したテキストデータだけでも、
1日で約2GBぐらいの量になります。
データ量が多すぎるので、
30分毎に区切ったファイルでDB書込を行いたいと考えています。
質問内容
① C++にてファイル書込と読込部分の最適な書き方。(fopen等)
Insertの場合、valuesに纏めて書きたいのですが、
とりあえず段階を踏んで1文1文で書き込もうとしています。
また、デカイSQL文で5万文字ぐらいになります。
※トランザクション
ファイルの1行の最大文字数は限られているのでしょうか。
また、SQLの1文ずつ取り出せるでしょうか。
② ファイル形式について
.txtで考えているので、タイプ分けが難しいと思い、下記の形にパーティショニングしようと考えています。
速さを重視していますが、できればjson形式みたいにキーを持ち、1ファイルで完結したいとも考えています。
[DIR]20160101 - [DIR]part1 - [FILE]aaa.txt - [FILE]bbb.txt - [FILE]ccc.txt - [DIR]part2 - ...
長文になりましたが、
上記で問題が解決するのではないかと考えていますが、
他にいい案や指摘等ございましたらご教授頂ければと思います。
###2016/11/09 13:17追記
InsertやUpdate時にWhere文等で条件を追加しているため、
COPYコマンドは使用できません。。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/09 04:05
2016/11/09 04:40
2016/11/09 05:08
2016/11/09 05:44
2016/11/10 01:10