- PR -

パフォーマンスを求めるならCを使わなければいけないのか

投稿者投稿内容
MID
会議室デビュー日: 2002/01/10
投稿数: 7
投稿日時: 2004-08-26 12:32
こちらには初めて投稿します。

現在、基幹システムのリプレイスを検討しているのですが、その打ち合わせの中で、
「(オフコンでCOBOLやRPGで開発するのでなく)DB2やOracleなどを使うのなら、C言語(C++?)でレコードレベルアクセス(一件ずつREAD、WRITEするやり方)をしないとオフコン並のパフォーマンスは得られない。SQL文では話にならない」というような趣旨のことを云われました。

データベースへのアクセスはSQLが基本、と考えていたのですが、それが根底から否定され、とまどっています。

実際、開発現場では、パフォーマンスを追求する必要があるときは、SQL(、もっと広い意味で言えば、JDBCやEJBなども含んで考えています)は使わないものなのでしょうか?

みなさんのご意見をお聞かせください。
未記入
大ベテラン
会議室デビュー日: 2003/11/24
投稿数: 121
投稿日時: 2004-08-26 12:46
C/S モデルでしょ?
レコードレベルアクセスなんてしてたら遅すぎて、オペレーターが死んじゃうよ?
たぶん、旧システム(オフコン)は、クライアント端末は単なるコンソール(telnet)として
機能して、すべてのプロセスがサーバーで動作していたんだと思う。
だから、レコードレベルアクセスに耐えられるのよ。C/S で LAN 越しに
レコードレベルアクセスなんてやっちゃあいけません。

きっと、その話をした人は何も分かっていないよ。無視したほうがいい。

PCベースで C/S モデルを組むなら、レコードレベルアクセスなんて言語道断。
SQLを使用して必要範囲のデータをクライアントに一括取得するのが常識です。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-08-26 12:49
はにまるです。

DBに対して情報アクセスする以上 SQL文は必要ですよね。(少なくともOracleでは)
とすると、極力Cで処理すると云う事は
「Oracle上でのデータ操作」、「C言語上でのデータ操作」と2重処理になる訳です。
また、Oracleでは事前にメモリの確保や事前取得データのメモリ保持
インデックス検索等、パフォーマンス向上の為の技術が盛り込まれています。

それを自作のC言語で超えさせるのでしょうか?
シーケンシャルアクセスで全件操作のならばC言語だよな。
と、私個人の知識では思っています。

基礎技術的な知識は疎いので逆に
SQLよりCが早いって、どういう構想での発言か逆に伺いたいです。
m.ku
大ベテラン
会議室デビュー日: 2002/09/15
投稿数: 184
投稿日時: 2004-08-26 13:04
リプレースの話だよね?
その想定しているオフコンの性能と今度予定しているマシンの性能差も加味して、
更にチューニングした性能向上あたりも視野に入れないと意味が無いと思うのだが?
昔の機械でがりがりに作ったものより今の機械で安易に作ったほうが何倍も早いと
いうのはありがちだし、最近だとメモリどっさり積んでハード性能に任せた性能向上
というのもある話だから局所的なプログラミングだけで判断しない方がいいと思いますね。
がうしぇ
大ベテラン
会議室デビュー日: 2002/02/26
投稿数: 110
お住まい・勤務地: 住:神社の裏山 勤:天神さんの裏手
投稿日時: 2004-08-26 13:25
ウチも来年辺り基幹システム入れ替えです。

で、オフコン並みのパフォーマンス出すのにファイルをレコード単位で読み書き...って
なんか、RPGべったりじゃなくて、CにSQL組み込んでプログラム書けってことじゃろか?

でも、皆さん仰るように今日日のPCというかIAサーバならJavaで書いても大丈夫な気もします。
また、Javaで書いてもSQLチューニングするとかやることは一杯あると思います(をい、勝手にJavaに決めるな

でもも、レコード単位でファイル読み書きするCプログラムでトランザクションとか大丈夫なんかなぁ。
そっちの方が心配だ。
_________________
がうしぇ
人生のデザインパターン....
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-08-26 13:36
文面どおり受け止めて返信します。

引用:

MIDさんの書き込み (2004-08-26 12:32) より:
現在、基幹システムのリプレイスを検討しているのですが、その打ち合わせの中で、
「(オフコンでCOBOLやRPGで開発するのでなく)DB2やOracleなどを使うのなら、C言語(C++?)でレコードレベルアクセス(一件ずつREAD、WRITEするやり方)をしないとオフコン並のパフォーマンスは得られない。SQL文では話にならない」というような趣旨のことを云われました。



オープンシステムではSQLを使わずにDB2やOracleにアクセスしないとパフォーマンスが出ない、ということですか?
そんなのは不可能だし(敢えて言い切ります)、DB2やOracleを使う意味がないじゃないですか。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-08-26 13:45
unibon です。こんにちわ。

引用:

MIDさんの書き込み (2004-08-26 12:32) より:
現在、基幹システムのリプレイスを検討しているのですが、その打ち合わせの中で、
「(オフコンでCOBOLやRPGで開発するのでなく)DB2やOracleなどを使うのなら、C言語(C++?)でレコードレベルアクセス(一件ずつREAD、WRITEするやり方)をしないとオフコン並のパフォーマンスは得られない。SQL文では話にならない」というような趣旨のことを云われました。


COBOL や RPG は分からないのですが、
for (int i = 0; i < 1000; i++) {
hoge.execute("SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = " + i);
}
みたいな SQL をレコードごとに発行するのはやめて、レコードセットを一度だけ取得して、レコードごとにフェッチしてくれ、ということではないのでしょうか。
あるいは、DBMS を使わずに ISAM 等でレコードブロック単位でファイルを読み書きしてくれ、なのでしょうか。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-08-26 13:53
引用:

がうしぇさんの書き込み (2004-08-26 13:25) より:
でもも、レコード単位でファイル読み書きするCプログラムでトランザクションとか大丈夫なんかなぁ。
そっちの方が心配だ。


はい、一票いれさせていただきます^^
安定性や信頼性のテストを考えたらエライコトになりそうな気がします。
(いや、それは一切考えないで、という要求でしたら別です。)
もし、SQLを使わないとしたら、DBは捨ててファイルアクセスにしたほうがいいかも、
と考えてしまいました
#一部被りました。

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2004-08-26 13:56 ]

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