スレ立てるまでもない質問はここで 164匹目

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/04/10(月) 22:13:58.31ID:YMPgGfeQ
この板はプログラムを作る人のための板です。
あらゆる質問はまず
スレ立てるまでもない質問はここで
スレにしてください。

次スレは>>980が立てること

【前スレ
スレ立てるまでもない質問はここで 163匹目
https://mevius.5ch.net/test/read.cgi/tech/1670470167/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/05/16(火) 19:56:23.68ID:2mBUljYc
SQLITEをJavaのJDBCで使ってますが、ほぼ作ったばかりの database で、
中身はテーブルが4つほどで、カラム数は最大で 4 つほどで、
全てのテーブルの全ての行数を合算しても50個もないほどなのですが、思ったより
遅くて驚いてます。
java コマンドから 自分のプログラム名.java を実行すると、database に触れる前に
プログラムの冒頭で Hello の文字列を出すようにしてますが、それは一瞬で
出てきますが、JDBC を使って 簡単な select 文で 10個も無い程度の
情報を取り出して、文字列にいれ、それを、stdout に出力して、
cmd.exe で見ていたのですが、Hello と出た後、1秒くらい経ってから
結果が出ます。文字列は、String ではなく、StringBuilder の append で
連結して、最後に toString を String 化してます。
また、SQLITE との接続のための Connection は、プログラムの
最初に一回しか作成してません。
この位の遅さは正常の範囲内ですか?
また、遅い原因は何が考えられますか。
2023/05/16(火) 20:05:53.60ID:2mBUljYc
>>317
ちなみに、Local に HttpServer を起動して、自作 Java プログラムを cgi として
テストしていて遅かったのですが、cmd.exe から直接、その cgi を BAT
ファイルから起動していても、同様に遅いことが分かりました。
当初は、ブラウザや HttpServer が遅いのだとばかり思っていたのですが、
Java プログラム自体の中でとても時間が経過しています。
BAT を起動すると、Hello の文字列は非常に高速に出てくるので、Java
プログラムの起動の遅さでも無いようです。
Java は起動時にオブジェクト確保が集中してしまうために
遅くなっているのでしょうか。そういえば・・・。
2023/05/16(火) 20:07:23.06ID:2mBUljYc
>>318
ちなみに今回のプログラムはテストプログラムに近くて、実験に不要なオブジェクト
の確保はしていません。
改めて、テストプログラムを書いてみたらいいかも知れませんが。
2023/05/16(火) 20:52:16.77ID:Zr29oUXQ
Javaスレでプロファイリングの仕方を教えてもらったら?
321デフォルトの名無しさん
垢版 |
2023/05/16(火) 21:55:01.31ID:uqMIty2j
>>317
遅いのがJavaのコードなのかDBなのかまず切り分けたほうがいい
2023/05/16(火) 21:56:58.54ID:3cu+jrCu
切り分けも含めてプロファイリングでしょ
323デフォルトの名無しさん
垢版 |
2023/05/16(火) 22:31:22.06ID:4bjXAdLt
>>322
この場合プロファイリングも切り分けの手段なんだけど
問題がありそうな箇所が事前に判明してない場合はより簡単にできてより大きく問題を絞り込めるタスクから先にやるのがセオリー
2023/05/16(火) 22:57:24.62ID:lLY4YiLw
Javaのプロファイラよく知らないけど問題の所在がDB側かJava側かの判別は出来ないの?
2023/05/16(火) 23:19:06.69ID:i9SCRh5Q?2BP(0)

目視できるレベルの遅延なんだから各処理にprintぶち込む
そしたら長々と説明書かんでもこの関数に時間掛かってますって質問できるやろ
2023/05/16(火) 23:58:33.33ID:Uv0DjIn7
>>317
>また、遅い原因は何が考えられますか。
可能性高いのはJDBCドライバのクラスファイルロードあたり
2023/05/17(水) 03:19:08.03ID:H0zdOTL1
>>316
Linux 板で質問してみれば?

ただし、あの板は荒らし対策で規制が強いから、書き込めないかも
2023/05/17(水) 07:56:09.37ID:PsbDwPcr
だいたいDB接続が遅いイメージ
329デフォルトの名無しさん
垢版 |
2023/05/17(水) 09:46:44.89ID:JiQOYoO1
>>324
判別できない可能性もあるけど問題はそこじゃない
例えばsqliteのシェルからSQLだけ実行して時間を計測すれば高い確率で切り分けできるわけだが
それと同程度の労力でプロファイリングして原因箇所を判別できるかどうか(特にそれだけの知識や能力があるか)が問題
2023/05/17(水) 10:28:00.67ID:oza9WAtC
プロファイリング提案されてだよなぁとならないのが謎やわ
2023/05/17(水) 10:58:23.94ID:/4erUzJ5
切り分けしてDB問題なしとなったら結局プロファイリングしないといけないわけだし
初手からプロファイリングでええやんな
知識がー能力がーとかそんなの理由にならんわ
332デフォルトの名無しさん
垢版 |
2023/05/17(水) 11:07:50.06ID:4qZNdnz/
>>154
3.42のバグ修正で再現しないようになってた
2023/05/17(水) 12:37:11.65ID:71aWNbTU
>>326, 328
その通りでした。以下に経緯を書いておきますが、解決策は有りますでしょうか?

java(JVM) は、起動時に 以下のオプションを付けました。

1. -cp で、sqlite-jdbc-3.41.2.1.jar の圧縮を展開したフォルダを指定して
  高速化を図りました。
  しかし、時間計測する限り、効果は全く現れなかったようです。
  jarを指定してもメモリー中に展開されるため、SSDから個別のファイルを
  読み込むより、読み込み時間が速くなるからだそうです。

2. -Xms800M -Xmx2G オプションをしてして GC の STOP THE WORLD が
 発生しないようにしておきました。

$ java -Xms800M -Xmx2G -cp "./;../JDBC/sqlite-jdbc-3.41.2.1" MyAppName

自分の java のソースコード内で、System.currentTimeMillis() を使って
時間計測したところ、
・トータルで 546(ms) でした。
・最初の以下の部分に 421(ms) も掛かっていることが分かりました。

String url = "jdbc:sqlite:C:/sqlite3/xxx.db";
DriverManager.getConnection( url );

つまり、データベースの接続に大量の時間がかかっています。

時間計測時は、MyAppName の stdout を java ・・・ MyAppName >a のようにして
ファイルにリダイレクトして端末への表示によって遅くなることを防ぎました。
2023/05/17(水) 13:02:58.99ID:jajfXzYD
ここまで分かったならあとはJavaスレ行った方が早いでしょ
ここは病院の外来総合受付みたいなもん
335デフォルトの名無しさん
垢版 |
2023/05/17(水) 14:02:05.41ID:uFqNdu7t
>>333
先にドライバロードしてる?
してなければ接続に時間がかかってるのかドライバのロードに時間がかかってるのかわからない
2023/05/17(水) 14:19:11.53ID:xh2FOm6Y
>>335
やってみました。行末の数値は起動時を 0 とした時間で、単位は [ms]です。
cur_time, before call Class.forName( 'org.sqlite.JDBC' ) : 62
cur_time, after call Class.forName( 'org.sqlite.JDBC' ) : 94
cur_time, before call this.connectB() : 94
cur_time, after call this.connectB() : 437

public static Connection connectB() throws SQLException {
 String url = "jdbc:sqlite:C:/sqlite3/xxx.db";
 return DriverManager.getConnection( url );
}
2023/05/17(水) 17:56:02.41ID:mscdOYdU
DataSource経由で接続は試してみた?
変わらんかもしれないけど
2023/05/17(水) 18:00:09.24ID:yPEfv0d2
結局データベース接続は遅いでFAでいいんじゃないかね
乱数の為の環境ノイズ収集だとかいろいろ原因はあるらしいけど
339デフォルトの名無しさん
垢版 |
2023/05/17(水) 18:50:12.67ID:a3AQdQcX
いくらなんでも遅すぎない?
JavaでSQLite使ったことないけど350msって
リモートのDBからデータ取得してもお釣りが来る
ローカルのSQLiteへの接続ならPythonですら遅くても数ミリ秒
2023/05/17(水) 19:33:06.66ID:CplANjy6
ちなみに、全く同じ環境(マシン、OS)でもsqlite3.exeのコマンドラインから
だと物凄く高速です。
また、今、C言語から処理することも試してみたところ、やはり、物凄く
高速でした。
2023/05/17(水) 19:59:17.26ID:Z2qpt4tw
>>340
どうもSQLiteJDBCドライバがよろしくないという情報もちらほら
>>337は試してみた?
2023/05/17(水) 20:08:05.71ID:CplANjy6
DataSource経由は試してません。
勘では多分速くならないと思います。
なぜなら最も簡単な方法や最も標準的な方法が最も最適になっていることが多いからです。
それは、ライブラリを作っている人が最適な方法を一番良く知っているためです。
2023/05/17(水) 20:22:37.20ID:Z2qpt4tw
>>342
勘も大事だけど人の話を素直に聞くのも大事な
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/DriverManager.html
>注: JDBC 2.0 APIで新しく追加されたDataSourceインタフェースを使用してデータ・ソースに接続することも可能です。
>データ・ソースへの接続時にはDataSourceオブジェクトの使用をお薦めします。
2023/05/17(水) 20:25:45.03ID:Z2qpt4tw
あと、仮に効果がなかったとしても実際に試してその結果を得ることに価値があるんだよ
2023/05/17(水) 21:24:19.24ID:6Z2WPb/3
なんでプロファイリングしないん?
なんだかんだ理由をつけて新しいことを覚えようとしない人と、面白そうだと挑戦する人
これ実際数年後にかなり差がつくよ
2023/05/18(木) 01:57:33.41ID:iVuaVjKY
もう、Javaは使わないことに決定しましたので、実験はしません。
お騒がせしました。
2023/05/18(木) 02:13:43.33ID:o6F/mK5k
データベース接続が遅いってだけで?
2023/05/18(木) 02:27:07.46ID:iVuaVjKY
>>347
はい。C++で書くことにしました。
2023/05/18(木) 02:28:09.74ID:iVuaVjKY
理由は、私が想定した用途では使い物にならないと判断しましたので。
2023/05/18(木) 02:31:09.36ID:o6F/mK5k
どういう用途?
2023/05/18(木) 03:27:41.92ID:iVuaVjKY
cgi です。
起動さえ速ければ Rails サーバーや mod PHP の様な常駐方式でなくても
良いと考えました。
そうすると、格安レンタルサーバーでも使用できます。
2023/05/18(木) 10:13:06.22ID:ZSmJ7kE/
言葉だけは丁寧、謎の理屈による決めつけ、自分の間違いを認めない、都合の悪いレスは無視
こないだのID:NDGne9Urか
2023/05/18(木) 10:18:46.05ID:4KlPbS1t
アスペ君というネームドだよ
354デフォルトの名無しさん
垢版 |
2023/05/18(木) 10:29:51.20ID:3hAjoQCO
根本原因を理解してないのはアホな指摘してる人と同じだけど
アスペ君の方が要点おさえてるから笑えない
2023/05/18(木) 13:06:04.27ID:nzXYqesT
自分の勘を絶対視してほんの数行書き換えれば試せることすらやらずに切って捨てる
常人には理解できん感覚だ
356デフォルトの名無しさん
垢版 |
2023/05/18(木) 13:14:07.60ID:eVp0PU5P
DataSourceにしたところで変わらんよ
JDBCやめてsqlite4javaのような薄いラッパー使えば数十ミリ秒になる
さらにそれをネイティブコンパイルすれば数ミリ秒以下にはなる
でもサーバー用途で初回の起動速度・実行速度をが最重要ならJavaはいい選択ではない
2023/05/18(木) 13:36:42.82ID:nzXYqesT
実際に変わるかどうかじゃなくて姿勢の話
2023/05/18(木) 13:49:14.30ID:Ir4oA68o
サーバ用途なら事前に接続しとくから逆に気にならんが
2023/05/18(木) 14:31:59.84ID:nzXYqesT
sqlite4java試してみたらJDBCで1000msかかってたDB接続が200ms程度まで改善した
これくらいだと遅いという感覚はないな
360デフォルトの名無しさん
垢版 |
2023/05/18(木) 15:10:52.58ID:slkZO2TO
>>358
サーバーといっても旧来のずっと起動状態で待機させるサーバーじゃなくFaaSでWebアプリを運用するイメージ
>>351が言うcgiと同じイメージかどうかは知らんけど
361デフォルトの名無しさん
垢版 |
2023/05/18(木) 15:18:38.28ID:54thrNHK
あとsqliteの場合はずっと接続してたら困る
同時実行制御のモデルがサーバー型のデータベースとは違うので
2023/05/18(木) 16:11:57.82ID:wz6179+R
Javaでお手軽なDBだったらApacheDerby使えばDBサーバのインストール不要だがね
(接続時間の問題は引き続きある)
2023/05/18(木) 16:24:40.66ID:MymoCgbT
接続じゃなくクラスファイルのロードが遅いんじゃねぇの?
まぁ、別口でやるようだし、もうどうでもいいか
2023/05/18(木) 16:40:21.60ID:A6PyJVVw
この速さなら言える。
最近アイマスがコナミじゃなくてナムコだって知った。
2023/05/18(木) 19:57:16.42ID:4rcvRPf1
変数名を後から他人にもわかるようにと考えながら付けて書いてるけど
長くなってもいいからと3つぐらい単語を繋いで書いてみたけど
非常に局所的にでてくる雑用フラグなんかも名前つけて書いて
しかし客観的に見てもこれだけでは他人が見てもやっぱりなんの変数なのかわからないと気がついた
変数名だけで用途を理解できるように書くのはやっぱり無理なのか
そう割り切りながらもそれっぽく名付けていくしかないんだろうか?…
2023/05/18(木) 20:03:30.92ID:Z6jck6wF
関数を短く切り分けたら変数名なんて一文字でいいんだよ
ローカル変数を長くしなきゃ読みにくくなるとすればそれは構造化が不十分
引数やインスタンス変数は長い名前をつけろ
2023/05/18(木) 20:28:50.94ID:QGYnHLAs
主に旧世代のプログラマや初心者がときどき珍妙なフラグを使うことがあって
役割が整理されてないからいい名前も付けようがないというケースもある
難しいときは無理せずコメントを添えりゃええとも思う
2023/05/18(木) 20:57:47.22ID:C/0SMFUB
そういうのこそChatGPTに相談とかすれば、とか思うけどこのスレの意義が無くなるか
2023/05/18(木) 21:02:32.56ID:MHJwn3W1
ChatGPTに自分のコード貼るのあぶなくないですか?
370デフォルトの名無しさん
垢版 |
2023/05/18(木) 21:30:11.38ID:efWpxgk+
>>365
この文章を見る限り
君には分かりやすい命名は無理なんじゃないかと
思わなくもなくはないかもしれないような気がしないでもないような
2023/05/18(木) 21:39:04.78ID:kyhdrXZE
Wordpressのphpファイルにデータベースの接続情報を直接記入しても大丈夫なのでしょうか。
2023/05/18(木) 23:17:41.86ID:bwphGA3U
関数名や切り出し方が適切なら変数名には迷わないという理想論
そのはずだけど中々上手くいかない
2023/05/19(金) 00:57:35.59ID:uf4wYYis
sqlite が遅いと言うか、

全てのデータベースが接続プールを使うのは、初期化が遅いから
2023/05/19(金) 01:02:06.99ID:uf4wYYis
>>371
Ruby on Rails では、環境変数は暗号化されたcredential ファイルに書く
2023/05/19(金) 01:43:50.43ID:Gmj5KBEl
ソースコードの特許侵害しないためには何を気をつけたらいいですか?
ググって出てきたやつにフリー素材ですとか商用不可とか書いてないけどどうなってるの?
2023/05/19(金) 01:55:09.54ID:iSJAQTOS
知らんがな
ググって見つけたサイトの管理人に聞け
377デフォルトの名無しさん
垢版 |
2023/05/19(金) 02:17:07.06ID:yGaK6N7d
まずは特許と著作権の違いから学ぼうなw
2023/05/19(金) 02:33:12.25ID:rO74badk
>>373
sqlite3はC言語で使うと接続時間は 0 です。
2023/05/19(金) 02:50:57.04ID:6AG/SXdp
ほんとにゼロ?測ってみたの?
2023/05/19(金) 03:13:24.05ID:rO74badk
すみません。0というのは言い過ぎだったかも知れません。
厳密には分かりませんが、感覚的に 0 に近いと感じる、ということだけです。
2023/05/19(金) 03:25:45.84ID:qHMqwaHR
おおかた数十~数百ミリ秒程度なんじゃないの?
Javaより速くなったと感じるから大げさに言ってるだけで
2023/05/19(金) 03:40:52.03ID:yl46Wrbm
オープンだけならバージョンと排他制御の確認くらいで
DB情報まで読んでない可能性あんじゃね
しらんけど
383デフォルトの名無しさん
垢版 |
2023/05/19(金) 03:59:52.41ID:HdUsA7j0
>>373
一般的なデータベースの接続が時間がかかる理由を知ってたらそれがSQLiteに当てはまらないことくらいはわかるだろ

SQLiteのローカルのデータベースファイルをオープンするだけ
システムコールだから単純な関数呼び出しに比べれば遅いけど1msもはかからない
2023/05/19(金) 08:41:46.01ID:abPE0AgY
じゃあJDBCでSQLiteに接続すると何に時間かかってんの?
推測じゃなしに説明してみてよ
2023/05/19(金) 10:01:45.63ID:tkhwYRFE
乱数生成とか?
2023/05/19(金) 10:09:49.12ID:OlTXL1at
いろいろ制約があって標準的なライブラリの制限版擬きみたなモノを自作したりすることがあるのだけど、そういう自作ライブラリの命名ってどうするのがいいんだろう?
my~っていうのはすべての機能が揃ってないのでなんか違う気がするし・・・?
2023/05/19(金) 11:20:44.10ID:dqJ5A/du
libname.yourname.lite
2023/05/19(金) 12:14:18.55ID:7RGIs9uQ
>>379
限りなくゼロだよ。だってSQLiteの接続とはファイルを開く時間でしかないから。
2023/05/19(金) 12:14:48.64ID:7RGIs9uQ
>>381
> おおかた数十~数百ミリ秒程度なんじゃないの?

そんなにかかるわけがない。
テキストファイルのオープンと同じ
2023/05/19(金) 12:15:55.84ID:7RGIs9uQ
>>384
JDBC以外なら速いのだから、JDBC、つまりJava部分に問題がある。
2023/05/19(金) 13:04:36.29ID:qLhDxE42
>>388-389
で、計測値は?

>>390
同じJavaでもsqlite4javaは速いのはなんで?
Javaが原因ならこっちも遅いはずでしょ?
2023/05/19(金) 13:27:32.18ID:kppkuqau
>>391
>同じJavaでもsqlite4javaは速いのはなんで?
>Javaが原因ならこっちも遅いはずでしょ?
Java自体の問題ではなく、JDBCの実装の問題だからでしょう。
つまり、プログラミングの腕の差なのです。
2023/05/19(金) 13:27:54.98ID:7RGIs9uQ
>>391
JDBCが遅いって言った人がデマじゃないから書くやろw


$ time for i in $(seq 1000); do sqlite3 db 'select 1'; done > /dev/null

real 0m2.784s
user 0m1.556s
sys 0m1.323s

3ミリ秒。これにはsqlite3コマンドの起動時間が大半なのでほぼゼロ
2023/05/19(金) 13:51:37.98ID:zDYfbcst
>>392
JDBCはプログラマの腕が悪くて使い物にならない
sqlite4javaはプログラマの腕がいいから使えるってこと?
2023/05/19(金) 13:55:39.24ID:kppkuqau
>>394
基本、そういうことです。
但し、JDBCの親玉(?)のOracleが、MySQLやOracleDatabase(?)推しなので、
偶然を装ってwait を入れているのかもしれませんが。
アメリカ企業では有る有るです。
2023/05/19(金) 14:00:52.58ID:zDYfbcst
>>395
>アメリカ企業では有る有るです。
あるあるなら実例の1つでも挙げてみてよ
そうでなきゃただの言いがかりじゃん
2023/05/19(金) 14:03:05.03ID:kppkuqau
>>396
twitterが、イーロンマスク氏が継いだ跡、過去の人気動画が再生不良に
陥ったりしてます。
2023/05/19(金) 14:16:36.87ID:zDYfbcst
>>397
ありがとう、ただの言いがかりだということが良く分かった
2023/05/19(金) 14:19:06.58ID:zDYfbcst
>>393
>>378よく読んで
2023/05/19(金) 14:23:16.61ID:kppkuqau
>>398
複数の報告が上がってるのに直されません。
2023/05/19(金) 14:29:33.76ID:zDYfbcst
>>400
うん、その話は関係ないから余所でやって
2023/05/19(金) 14:32:14.57ID:kppkuqau
言論弾圧みたいですね。
2023/05/19(金) 14:37:01.63ID:b73Y2h/K
スレ違いは言論の自由に含まれません
2023/05/19(金) 14:39:25.00ID:zDYfbcst
ここはこじつけ陰謀論を開陳する場所じゃないからね
2023/05/19(金) 15:50:29.84ID:D4FjAhID
JDBCって接続コスト高いからコネクションプールにして使い回すもんじゃないのかね

性質が自分の用途に合ってないなら止めて他のにしたらいいんじゃね、しらんけど
2023/05/19(金) 16:22:35.68ID:dCS2/eSz
>>405
そのやり方はSQLiteでは不可能ではないですか。
それにそもそも、C言語だと一種運で接続できますので、全く的外れな指摘かも知れません。
407デフォルトの名無しさん
垢版 |
2023/05/19(金) 16:38:43.84ID:wl4NO1f3
コネクションプーリングwww
ほんとアホすぎるわ
2023/05/19(金) 16:41:20.62ID:OVBfn76a
>>406
自分の的外れ発言を全部棚に上げておけるの感服する
409デフォルトの名無しさん
垢版 |
2023/05/19(金) 17:09:20.74ID:VOHIivvz
>>391
sqlite4javaでも十分遅い
どちらも接続自体は1ms前後だけど初回接続時に200msとか1000msとかかかるのはネイティブドライバのロードと各種クラスの初期化に時間がかかってるから
sqlite4javaに比べてJDBCドライバが遅いのは余分な処理を山盛りやってるのが理由
2023/05/19(金) 17:10:39.11ID:D4FjAhID
>>406
不可能ならJDBCでSQLiteのは尚更筋が悪いってことじゃね?
素直に他のやり方にすればいいんじゃね?
あとなんでCでJDBC使おうともしてるのかも分からんけど、ひねくれたいの?JDBCを貶めたいの?
まあそういう界隈があるのかもしんけど

じゃね?じゃね?
411デフォルトの名無しさん
垢版 |
2023/05/19(金) 17:12:12.39ID:chfTuR6K
>>395
sqlite-jdbcのメンテナは残念ながら日本人
412デフォルトの名無しさん
垢版 |
2023/05/19(金) 17:13:38.36ID:chfTuR6K
>>410
Cで使おうとしてるのはSQLiteだろ
そのくらいの文脈はよんでやれよ
2023/05/19(金) 17:34:49.26ID:D4FjAhID
>>412
いやあ、それは普通に早いだろうから比較にならんのは本人も分かってると思ってたわ
ここで意味があるとしたらC->JDBC->SQLiteとの比較だろうし
そんなことしたいやつがいるのかはしらんけど

しかしJDBCとかってコネクションプールとかインターフェースの共通化目当てにやるようなもんじゃないん?
イメージ的にその時点でSQLiteと相性悪そうに思えるけど、組み合わせたことないからなあ
2023/05/19(金) 17:39:25.41ID:dCS2/eSz
>>411
Oracleが会社としてMySQLより接続速度が同じか遅くなる様に命じている可能性が高い。
415デフォルトの名無しさん
垢版 |
2023/05/19(金) 18:10:28.16ID:W/EkxpUj
>>413
JDBC使うのはDBMS変えてもコードの変更が最小限で済むからだよ
sqlite4javaだとJava側にSQLite専用のコードをたくさん書くわけで

SQLiteのJDBCドライバが遅いのは
そういう共通化とは関係ないけどね
2023/05/19(金) 18:22:19.08ID:0Wfs1Z7z
>>414
何を根拠にそんなデタラメを可能性が高いとまで言えるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況