ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java DB / Apache Derbyコミュの質問トピック

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コメント(9)

質問です

Derby以外のJavaで書かれたDBにHSQLDBというのがあります。
このDBではレコードの保存を実行したSQL文を保存し、レコードはメモリ上に展開するという方法を取っているらしいです。
そこで質問なのですが、Java DBではレコードの永続化はどういうふうにしているのでしょうか?
ソースコードをたどったのですが、SQLを実行するStatementクラスは複数を継承していて、何がなんだか分からなくなり、途中で諦めてしまいました。
ご存知の方がいらっしゃれば教えていてだけないでしょうか?
もしくは実際にファイル書き込みを行うクラスを教えていただいても結構で。

よろしくお願いします。
これはどの製品でもそうですけど、データを更新するSQLを実行するたびに、ファイルシステムにデータを永続してますよ。

Derbyでは、作成されたデータベースをフォルダー単位で管理しています。
例えば、データのバックアップを取りたい場合は、そのフォルダーをZIP等でアーカイブ操作するだけなので非常に簡単です。

一方、HSQLDBは、今まで実行されたSQLのログファイルを作成して永続化しているので、大量のデータの取り扱いには基本的に適していません。個人的には、たとえ学習や評価目的でも使いたくないですね。
回答ありがとうございます

HSQLDBの方法はやはり効率が悪いのですね
しかしSQLのログファイルの作成となると実装はかなり簡単そうですね
もう少し詳しく知りたいのですが、文字や数字(バイナリ以外)を格納した表の保存形式はどうなっているんでしょうか?
単純にテキストファイルにCSVファイルのように書き出しているのか、XMLのように構造化してあるのか、単純にプリミティブ型を保持したオブジェクトファイルとして保存しているのか、どうなんでしょうか?

それともう一つ質問です。
SQL文を実行するStatementクラスでは実際の実行のどこまでをサポートするのでしょうか?
簡単に分けると
SQL文の実行、SQL文のコンパイル、SQLのデータベースへの引き渡し、SQLのコミット
になると思うのですが、StatementはJDBCの一部であることを考えるとやはりSQLの実行とデータベースへの引渡しですかね?
Javaでデータベースを記述するとなるとJDBCもデータベースの一部にすることができるので実際どのようになっているのか疑問です

貴重なお時間をいただき恐縮ですが、回答頂けると幸いです
> HSQLDBの方法はやはり効率が悪いのですね
> しかしSQLのログファイルの作成となると実装はかなり簡単そうですね
> もう少し詳しく知りたいのですが、文字や数字(バイナリ以外)を格納した表の保存形式はどうなっているんでしょうか?
>
実行したSQLステートメントの文字列を、確か*.scriptファイルにそのままロギングしているはずです。CSVやXML形式で保管していなかったと思います。試しに使ってみたらどうですか?

> SQL文を実行するStatementクラスでは実際の実行のどこまでをサポートするのでしょうか?
>
これはJDBCの仕様に対するDerbyのサポート範囲に関する質問ですか?
>実行したSQLステートメントの文字列を、確か*.scriptファイルにそのままロギングしているはずです。CSV
>やXML形式で保管していなかったと思います。試しに使ってみたらどうですか?
いえ、知りたいのはHSQLDBでなくDerbyの形式なのですが…

>これはJDBCの仕様に対するDerbyのサポート範囲に関する質問ですか?
そうです
Statementのexecute〜メソッド等、Derby付属のJDBCはJDBCの仕様どおりなのか、JDBCで定められたDriverやStatementインタフェースを実装したものを渡すだけで、実際はDerby内で処理しているのかどちらなのかって、ことです。

よろしくお願いします
> いえ、知りたいのはHSQLDBでなくDerbyの形式なのですが…
>
Derbyの場合はバイナリー形式です。そのメタデータのフォーマット仕様までは私も知りません。

> Statementのexecute〜メソッド等、Derby付属のJDBCはJDBCの仕様どおりなのか、JDBCで定められたDriverやStatementインタフェースを実装したものを渡すだけで、実際はDerby内で処理しているのかどちらなのかって、ことです。
>
Derbyは専用のJDBCドライバーを提供しています。
JDBCの仕様にはもちろん準拠していますし、Derby内部の振る舞いを意識することなく、JDBC APIを使ってDBを操作できます。

(ちょっと話は逸れますが...)
私は、Apache GeronimoというJava EEアプリケーション・サーバーを普段使用しています。
Geronimoには、Derbyが同梱されていますので、ぜひ使ってみてください。Derbyを使ったJava EEアプリケーションの開発には最適な環境です。
参考文献: http://cwiki.apache.org/GMOxDOC21/web-application-for-jdbc-access.html
回答&参考文献ありがとうございました
Geronimoというのは初めて聞きました。
WEBサーバ以外にもJava EEアプリケーションサーバなんてのもあるんですね。
Derbyを使う際はぜひ一緒に使ってみようと思います。
コミュニティーの公式Wikiにまだ移していないのですが、OSSとして提供されているアプリケーション・フレームワークのサンプルアプリケーションを、GeronimoとDerbyで動かすためのメモを記していますので、ぜひ参考にしてください。
Adobe BlazeDS: http://sourceforge.jp/projects/geronimo-jp/wiki/BlazeDS
Apache iBATIS: http://sourceforge.jp/projects/geronimo-jp/wiki/JPetStore

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java DB / Apache Derby 更新情報

Java DB / Apache Derbyのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。