2/20 (土)
眼鏡のフレームを買い直すはめに
先月、眼鏡の左目部分のフレームのネジ穴部分がダメになってネジとナット固定するように修理したのだが、フレーム自体がゆがんでいるので簡単にネジがとれてしまう。 辛抱たまらんのでフレームだけ買いなおした。 トホホ。
第2回 MySQL・PostgreSQLユーザーグループ(MyNA・JPUG)合同DB勉強会 in 東京
六本木のヤフーで第2回 MySQL・PostgreSQLユーザーグループ(MyNA・JPUG)合同DB勉強会 in 東京が開催されたの参加。 登壇資料も公開されている。 気になった点をメモしておく。
PostgreSQL 9.5 最新事情
PostgreSQL 9.5 の新機能として UNSERT や BRIN Index が有名だが、他にも細かな機能があるらしい。
- SELECT SKIP LOCKED で、ロックされていない行だけ読む・ロックするということが可能になる。何使うか分からない。
- Row Level Security が入る。行毎にアクセスが許可される条件(ルール)に合致するか判定が行われ、許可がでなければ読めない。
- ALTER TABLE で既存テーブルの UNLOGGED、LOGGED が変更できる。ただしリレーション全体を破棄して作り直す実装。
AWS Aurora の話
Amazon の人による Aurora の内部構造に少しだけ触れた解説。
- Aurora は MySQL のクエリーエンジンはほとんど変更しておらず、ストレージ以降の部分が違う。
- Aurora のログ構造化ストレージは、ログ構造データベースのようにレコード単位でログ書き出しをしているのではなく、MySQL の binlog を PostgreSQL 風の WAL ストリーミングレプリケーションに切り替えた設計のように聞こえる。ただし複数のディスクにレプリカをとるので double buffer write や full page write のようなことは止めると。また undo ログは使ってないようだ。
- Active thread pool。epoll() を使い 1 つのスレッドが複数のコネクションに
- 非同期グループコミットを改良している。
2/13 (土)
[Movie] オデュッセイア
チネチッタで『オデュッセイア』(原題: The Martian)を観た。
事前に「火星に取り残された後でもサバイバル知識を駆使して生き残る」ものだと分かっていたが、ちょっと都合よく行き過ぎるのが気になる。 あのドームには水、酸素、二酸化炭素がある設定で、人間の糞尿から窒素、リン酸、カリウムあたりは補充できても、元から火星の土に植物の生育に必要な栄養素はとれるのか?とか。 火星の気温の高低差も軽く扱われていたし、機器の経年劣化がないのもどうなんだろう。
なんかもっと絶望的な状況が訪れるのを期待していたんだけど…
[Food] Eggs'n Things@川崎ラゾーナ
昨年の12月に川崎ラゾーナにハワイ発のパンケーキのお店Eggs'n Thingsが出来たが、いつみても長い行列が出来ていたのでしり込みしていた。 さすがに2ヶ月もたって行列も短くなったの挑戦してみる。 それでも10分以上待った。
晩飯時なのでパンケーキを食べるのはどうかとガーリックシュリンプを注文してみる。
うまいことはうまいが値段を考えると割高が気がする。 そもそもここは飯を食べる店ではないのかしらん?
2/8 (月)
SparkSQL で JDBC 接続データソースの CHAR(n) 型の扱い
PostgreSQL のテーブルを JDBC 経由で SaprkSQL から読むとおかしな動作をすることに気づいた。
PostgreSQL 側のテーブルが CHAR(n) 型の場合、空白で埋められた固定長の文字列を示すことになる。 だから CHAR(25) と指定すると仮に 'ABC' と 3 文字分のデータを入れても、後ろに 22 文字分の空白が入ることになる。 ただしこの後ろの空白は通常の文字列比較では無視される。 しかしこの PostgreSQL のテーブルを JDBC 経由でつないて SparkSQL からアクセスする場合、空白部分も認識されてしまうようだ。
つまり以下のようなテーブルに PostgerSQL に登録する。
CREATE TABLE region (
r_regionkey INTEGER,
r_name CHAR(25),
r_comment TEXT);
INSERT INTO region (r_regionkey, r_name) VALUES
(0, 'AFRICA'),
(1, 'AMERICA'),
(2, 'ASIA'),
(3, 'EUROPE'),
(4, 'MIDDLE EAST');
PostgreSQL で region の中の r_name が AFRICA の行を検索したい場合、以下のような SQL クエリーを投げればいいはずである。
SELECT * FROM region WHERE r_name = 'AFRICA';
しかし JDBC 経由でアクセスした SparkSQL では、上の SQL クエリーはどの行ともマッチしない。 同じ処理をしたい場合、後ろの空白まで指定した以下のような SQL クエリーを書く必要があるようだ。
SELECT * FROM region WHERE r_name = 'AFRICA ';
なぜこのような事になったんだ?
追記
Presto 0.136 で試したところ Presto でも SparkSQL と同様に後ろの空白部分が認識される。
Teiid 8.13 では PostgreSQL と同様に後ろの空白部分は無視される。