H2Databaseを追っかけていたりしたブログ

H2 database のリリースノートを読んだりとか。

h2

h2databaseを読む2

H2のPageStoreでは、データベースのデータを1つのファイルで管理しており、この1つのファイルをページ単位(PAGE_SIZEで指定可能で、デフォルトは2048バイト。512バイトから32768バイトまでの2のべき乗サイズを指定可能です。)で管理します。この1ページがそ…

Version 1.4.178 Beta (2014-05-02)

思ったより短い間隔でリリースされました。MVStoreとOSGi関連の修正が中心。 Issue 559: org.osgi.service.jdbcへの依存をオプションにする ユーザがサポートされないデータベース設定の組み合わせを指定した場合のエラーメッセージの改善 MVStore: マルチス…

Version 1.4.177 Beta (2014-04-12)

さくっと1.4ベータが出ました。次は1.3.178だったりするんでしょうが、ここらへんのバージョン番号のポリシーは独特ですね。 デフォルトで新しいMVStoreストレージを利用するためのMV_STOREオプションが有効に。MVCC設定もデフォルトではMV_STORE設定と同じ…

Version 1.3.176 (2014-04-05)

今回から、1.4Betaでの変更内容がchangelogに載るようになったようです。最近リリース間隔が広くなってきているので、1.4までは半年くらいかかるのかな。試してはいませんが、MV_STOREも大分速くなってきたようです。1.4ではデフォルトのストアが現行のPageS…

Version 1.3.175 (2013-01-18)

今回はchangelogに挙った変更点は若干少なめ。ただMVStoreの修正はほとんどchangelogに載らずにばんばん修正入っているようです。今回のchangelogで初めて知ったのですが、HikariCPという高速が売りのConnection Poolがあるのですね。Tomcat CPの100倍以上速…

Version 1.3.174 (2013-10-19)

LIRSキャッシュ: LIRS cache: bugfix for caches that only contain non-resident entries. For in-memory databases, queries with a "group by" column that is also a hash index threw a RuntimeException. Improved error message for some syntax erro…

1行でcsvファイルの中身を並び替える

csvファイルの中身を、ある項目の昇順に並び替えたいんだけど...ありがちな話ではありますが、シェルとかでやろうとするとちょっと手間です。Excelが入っていればそれでもいいですが、javaとh2のjarがあれば、ワンライナーで行けます。 java -cp h2-1.3.168.…

ltsvなログをSQLで集計する

javaのltsvなパーサー見当たらなかったから作ってみた、と思ったらもうあった。こんにちは。でも、SQLでltsvを操作できるってのは無いだろうと言うことで、まぁ。 package com.karatebancho.h2tools; import java.io.BufferedReader; import java.io.File; i…

MVStoreについて

h2の次期ストレージサブシステムとして使われる予定のMVStoreのドキュメントが、公式に上がっていました。http://h2database.com/html/mvstore.html類似のプロジェクトとして、LevelDBやkyoto cabinet、Berkeley DB Java Edition、SQLite、MapDBなどが挙げら…

Version 1.3.170 (2012-11-30)

忘れてたけど一年ぶりくらいにパッチを送ってたのだった。 今回のリリースはIssueからの不具合修正が多いです。リリースノートには挙げられていませんが、MVStoreのベースになるmultiversionmapがメインのソースツリーに入ってきています。 Issue 407: Trigg…

各種パラメータ変更によるH2のパフォーマンスへの影響

せっかくどのようなコードか書いてもらったので、H2でいくつか設定を変更しつつ試してみる。実行環境は以下の通り。 OSX 10.8.2 MacBook 13-inch, Aluminum、Late 2008 2Ghz Intel Core2 Duo 8GB 1333MHz DDR3 HDD WesternDigital 320GB 7200回転 Eclipseか…

各種パラメータ変更によるH2のパフォーマンスへの影響の件続き

元ブログよりも結構速いが、1000万件まで増やすととたんに返ってこなくなった。 と思ったら、そうでもなかった。 jdbc:h2:/Volumes/Macintosh HDD/test/db/h2;CACHE_SIZE=131072;LOG=0;LOCK_MODE=0;UNDO_LOG=0;PAGE_SIZE=32768; H2 1000万件 111.38秒 53.97…

Version 1.3.169 (2012-09-09)

リリース自体には特に面白味のある変更はありませんが、H2のバックエンドとしてMVStoreという新しい実装が追加されています(まだ実装途中ですが) 色々な機能がplugin形式で追加できるようになったり、ファイルフォーマットがシンプルになったりといろいろい…

Version 1.3.168 (2012-07-13)

うーん... メッセージ"Transaction log could not be truncated"がトランザクションの切り捨てに問題ない場合でも何度か.trace.dbファイルに出力されていた。 新しいシステムプロパティ "h2.serializeJavaObject"(デフォルト: true) これはJavaオブジェクト…

Version 1.3.167 (2012-05-23)

DatabaseEventListener使った事ないんですが、ちょっと面白そう。あと、SCRIPTでテーブルやスキーマで絞り込めるようになったのは結構便利だと思います。 H2 Console: 行を編集した時、空のvarcharカラムがスペース1つに置き換わっていた。 JOOQのドキュメン…

Version 1.3.166 (2012-04-08)

それほど変更点なし。 ページサイズの半分を超えるような大きなサイズのインデックスで不整合を引き起こす事があり、結果、PageBtree.getRowでArrayIndexOutOfBoundsExceptionもしくはPageBtreeLeafにて"Row not found"が発生していた。また、そのようなイン…

Version 1.3.165 (2012-03-18)

細かいけど、使いやすくなるいくつかの改修が含まれています。数値の文字列表現のとか、SUBSTRのとか、ALTER TABLE ADD で複数カラムが一度に追加可能になったとか、UPDATE文でLIMITをサポートとか、CSVTOOLでヘッダなしで出力可能になったとか。 より良い数…

Version 1.3.164 (2012-02-03)

配列型ってちゃんと使った事ないんですけど、便利なのかな。 新しい組み込み関数。ARRAY_CONTAINS 配列の中に指定した値があるか、という関数。 いくつかのデータベースメタデータのメソッドがALLOW_LITERALS NONEの特動作していなかった。 SQLインジェクシ…

Version 1.3.163 (2011-12-30)

今回はあまり強烈な不具合修正はない。 ディスク容量が足りなくなった場合に、後続の書き込み処理が成功すると、データベースの不整合がたびたび発生していた。同様の問題は同種のI/O Exceptionでも発生していた(最初のいくつかの書き込みが失敗したが、後続…

Version 1.3.162 (2011-11-26)

Update文の不具合とか恐ろしいですね。 次のシステムプロパティがサポートされなくなった。h2.allowBigDecimalExtensions, h2.emptyPassword, h2.minColumnNameMap, h2.returnLobObjects, h2.webMaxValueLength. VPNを使っていて、H2サーバーを起動しようと…

Version 1.3.161 (2011-10-28)

全然忘れていたけど、ここでもパッチを取り込んでもらっていた。 Issue 351: MySQL モード: KEYというカラムを持ったテーブルを作成する事が出来ない。また、そのようなテーブルを既に持っているデータベースをオープンできない 再現しないな...。ソースを見…

Version 1.3.160 (2011-09-11)

結構細々不具合あるものですね。 計算列で自分自身を参照できなかった 下記のようにかけなかったようです。 sql> create table hoge (id int, txt varchar); (Update count: 0, 4 ms) sql> alter table hoge alter column id int as id + 1; Error: org.h2.j…

H2で動的SQLを試みる

SQLServerではプロシージャ内で、動的に生成した文字列をEXECでSQLとして実行できるらしい。DB2ではあったか記憶にないですが、Oracleにもあったような気がします。h2では、ストアドファンクション/プロシージャ/トリガーはPL/SQL等ではなく、Javaで記述しま…

Version 1.3.159 (2011-08-13)

先日、h2の既知の不具合を踏みました。こんばんは。意外と綱渡りです。 Transactionalオプションをつけたテンポラリテーブルの新規作成時に、create table文中にインデックスが含まれていた場合、インデックスもトランザクショナルモードで作成されるように…

Version 1.3.158 (2011-07-17)

送ったパッチが取り込まれたリリースだった。CLOB/BLOBを含むデータベースに対する不具合の修正が含まれていますが、この手のは、結構さらっと「データベースがオープンできなくなる不具合の修正」とか書いてあってハラハラする。 全文検索(組込): 全文検索…

Version 1.3.157 (2011-06-25)

タイムゾーンとか難しいよなあとか。 CREATE TABLE ... AS SELECT ...のシンタックスの変更: NOT PERSISTENTのようなオプションは、AS SELECTの前に置くようになった。そうでないと、オプションがAS SELECT以下と解釈されてしまうため。 ここで言っているオ…

Version 1.3.156 (2011-06-17)

送ったパッチが採用されたリリース。 Issue 323: IN(...)とファンクションテーブルを一緒に使うとNullPointerException(が発生していたのを修正) Clob.toString() と Blob.toString() に識別用の名前が含まれるようになった。 元々含めていたつもりだったよ…

Version 1.3.155 (2011-05-27)

トリガーがあるテーブルを変更した際に、新しいトリガーがテーブル名_COPY_x_yという名前のテーブル名で作成され初期化されている。これは将来的にはそうならないよう計画されている。 何書いてるか意味不明だ...。これは、ALTER TABLEしたときに、この時点…

Version 1.3.154 (2011-04-04)

今回このメモ書いている際に不具合を2つ見つけてメールしました。 次の例外のSQL stateが変更になった。90005から22001 "列 {0} の値が長過ぎます: {1}"。90039から22003 "精度 {0} に対して値が大きすぎます"は"数値が範囲外です"とマージ。90110から22003 …

Version 1.3.153 (2011-03-14)

ついにnon-betaです。 Issue 294: Eclipseで自動的にソースコードがアタッチできるよう(Mavenを使用している場合)に、Mavenのソースバンドルにマニフェストファイルを含むようになった。 明示的にLIMIT 0が指定されたクエリが結果行を返さなくなりました(今…