Embulkで検証中に引っかかったことメモ
前回、こんな感じでRe:dashよりも先にやることがあるだろう、と気づいたわけです。
mao-instantlife.hatenablog.com
というわけでEmbulkで各種データソースの読み込みから始めています。
Embulkとは?
バルクデータローダーです。inputとoutputの形式が各種プラグインで提供されていて *1 、対応可能なストレージの種類が多いのが特長です。
他にも公式サイトのアピールとしては、
などありますが、後者二つはまだ試していません。
いつものごとく、公式ドキュメント見れば事足りるインストールやセットアップは割愛。最近はこの辺で試行錯誤して環境による注意事項書かなきゃいけないようなツールが減ってきましたね、いいことです。
覚えておきたいサブコマンド
- example
- guess
- preview
- run
- gem
- mkbundle
プラグインはグローバルなインストールだけではなくて、プロジェクトごとにGemfileつくってバンドルすることもできるようですね。実行環境をテキストで管理できるのは、作る上では嬉しいことです。
exampleはその名の通り、とりあえずローカル実行可能なデモ用の設定ファイルをつくってくれます。試すのにもデータソース作らないといけないの面倒臭いとかそういうニーズがあるんでしょうね、きっと。
guessが入力ファイルフォーマットの自動で、推測した結果を完全な設定ファイルにして出力してくれます(基本は標準出力?)。が、Elasticsearch用のものなどプラグインによっては未対応のものもあるので、全面的に頼れるわけではないようです。
見つけたプラグイン
- MySQL
- Elasticsearch
- Google Analytics
MySQLのGEOMETRYタイプ問題
Unsupportedですよ、と。
それはそれでいいんですが、エラーメッセージに column_options
に type: string
を追加しろと言ってる割には追加してもエラーで変わらず。エラーメッセージの間違いだったようです。
で、対応するにはクエリでキャストするなりの工夫が必要です。
まあ、今回は無理してGEOMETRYタイプを使わなくてもいい案件だったので素直に検索対象から外すことにしました。
Google Analytics APIが有効にならない問題
以下の流れで追加したユーザの認証キーを突っ込んで実行してみたんですがね。。。
Error: forbidden: Google Analytics Reporting API has not been used in project mallnavi-1352 before or it is disabled.
はあ、そうですか。。。APIのリクエストにはカウントされてるし、ちょっとよく分からない。
迂回路は幾つかありそうですし、となると優先順位は全体像を作ることなので、とりあえず放っておくことにして、digdagとEmbulkを組み合わせてみようかと思います。
データ分析環境を作りかけのメモ
一度リリースしたサービスを成長させるんだったら実際の各種データを元に仮説を立てて検証したいところ。アクセスログやアプリケーションデータやGoogle Analyticsの分析データなど、運用時に種々のデータが蓄積されていきます。それぞれでも有用なデータなわけですが、バラバラなままでは活用が難しいこともあります。データは繋いで使ってこそ、意味がある。
というわけで、データ分析環境をどうやって作るか考えて、ここ数週間、要件を書く合間を縫って検証してきた内容と気づきをまとめます。
想定されるデータソース
現状、扱っているデータソース(Analyticsをデータソースと言っちゃうのはあれですが)は以下三つ。
- MySQL(アプリケーションデータ)
- Elasticsearch(アクセスログ)
- Google Analytics(アクセス解析)
そして、導入を検討しているものとして
- Neo4j
があります *1 。
Re:dash
とにかく異なるデータソースをつなぐ環境が欲しい、というわけでRe:dashの導入を検討しました。
Re:dashは様々なデータソースをまとめてSQLでクエリを書いてビジュアライズできるソフトウェアです *2 。
どうも、クエリの結果はRe:dash側にスナップショットをとってる感じがするので、ビューをつくってグラフやなんかでデータを表示させるためのフロントエンドという操作感。Elasticsearchにおけるkibanaのような位置付けで、もっと多くのデータソースに対応できる、というイメージでいいかと思います。
インストールやセットアップなどは公式ドキュメント通りにできたので割愛します。Docker上に環境作れるのはいいですね。
対応していないデータソースへの対応
結構な数のデータソースに対応しているんですが、それでもまだ対応していないものがあります。今回の検証に関わるところだと、
- Neo4j
- Google Analytics
の二つ。
このような場合に検討するのは、
- 無理くりロードするクエリランナを書く
- 対応しているデータソースにインポートしてから読み込む
のどちらか、ですね。まず最初は前者を検討してみることにしました。
Pythonクエリランナ
このような未対応データソースへの対応なのかどうかわかりませんが、Pythonクエリランなというのがあります。
Supported Data Sources — Re:dash documentation
なんか、100%セキュアな状態で使ってね、とか怖いこと書いてますが、ローカルでDockerイメージ立ち上げて検証する分には問題ないでしょう。
実際のPythonでのクエリのイメージはここを読んでみてください。
他のクエリ結果の取得ができるようですね。 ドキュメントに記載がなかったのでソース見てみましたが、提供されているAPIはこの辺っぽいです。
get_query_resultの引数がidだけなので、パラメータありのクエリは無理?
Neo4jのクエリを書いてみる
注意:結局できなかったのと、やりながら重要なことに気づいてしまったので中途半端に終わります
Neo4jはPythonのライブラリがあります。というわけで、クエリを書いてみようと思いました。やってみたことは以下。
- Neo4jのPythonライブラリをインストールしたRe:dashイメージを作る(イメージのビルドとrunは成功)
- クエリを書いて実行
クエリはこんな感じです。
from neo4j.v1 import GraphDatabase, basic_auth driver = GraphDatabase.driver("bolt://localhost", auth=basic_auth("neo4j", "neo4j")) session = driver.session() session.run("CREATE (a:Person {name:'Arthur', title:'King'})") result = session.run("MATCH (n:Person) WHERE n.born >= 1970 RETURN n.name AS name, n.born AS born") for record in result: print("%s %s" % (record["title"], record["name"])) session.close()
これが、どうもライブラリを参照できてないわけです。そもそもPythonクエリランナがどういう参照の仕方をしているかよくわかってないので、pipでインストールするだけでOKなの?とか諸々調査が必要しなきゃいかんかな、と思い始めていたわけですが。。。
ここでふと気づく
で、ここで気づいてしまったわけです。ここまで考えてたことって、本番系を直接データソースとして取り込むやり方の検証なんですよね。何かの拍子にスロークエリ投げてしまったら本番系に影響出してしまう可能性もあるわけです。今更ながらこれはだめじゃん、と。
というわけで、基本的なデータのみ定期的にEmbulkでRedshift突っ込んで読めればいいのでは、ということで今はEmbulkとdigdagの検証に入ってます。この辺が検証終わったらまたRe:dashの検証を再開する予定です。もっと早く気付こう。。。
2016年8月の読書メモ
MPの制約が緩くなったので、何がしたいのかってくらい読んでしまいました。Kindle Unlimitedと図書館が悪い。
今月の読書量
22冊、だと。。。
野田と申します 1巻
- 作者: 柘植文
- 出版社/メーカー: 講談社
- 発売日: 2012/10/17
- メディア: Kindle版
- 購入: 1人
- この商品を含むブログを見る
地味だけど好奇心旺盛で、物怖じすることなく未知の世界にも飛び込んでいく女子大生「野田さん」の日常を描く。何事も経験です。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
好奇心は武器だなあ。小学生の頃におんなじ雰囲気の女子がいた記憶がある。四畳半神話体系もそうだが、フィクションのあれな人は全然あれじゃないのが悔しいけど。 #読書メモ_感想
— あべさん (@mao_instantlife) August 30, 2016
スター・レッド
- 作者: 萩尾望都
- 出版社/メーカー: 小学館
- 発売日: 1995/04
- メディア: 文庫
- 購入: 5人 クリック: 40回
- この商品を含むブログ (56件) を見る
ニュー・トーキョー・シティーで暮らす星(セイ)は、火星人であることを隠して生活していたが、エルグと出会ったことで故郷への思いを抑えきれなくなり、ともに火星に向かう。
— あべさん (@mao_instantlife) August 30, 2016
火星人の出自と地球、宇宙の知性のあり方をめぐる壮大なストーリー。 #読書メモ_サマリ
想像してたものと少し違った。もちろんいい意味で。超人ロック的なものだと思ってた。。。
— あべさん (@mao_instantlife) August 30, 2016
未来に繋がる感覚とか、その後を想像させる終わり方が良い。好きな作品に共通してる読後感。 #読書メモ_感想
私の恋人
- 作者: 上田岳弘
- 出版社/メーカー: 新潮社
- 発売日: 2015/06/30
- メディア: 単行本
- この商品を含むブログ (4件) を見る
「私」は10年前のクロマニヨン人である。「私」は1945年にナチスに殺されたユダヤ人である。「私」は2012年に住む一人の日本人である。
— あべさん (@mao_instantlife) August 30, 2016
妄想だけで世界に関わることのなかった「私」から見た、人類の旅の周回とその行き着く先は? #読書メモ_サマリ
時間軸が壮大な割には世界が狭くて、高尚なことを考えてはいるが、目の前の相手には卑屈で、人類はこういうのを抱えながら三周目を終えていくんだろうな、と妙に納得した。
— あべさん (@mao_instantlife) August 30, 2016
四周目に何があるかは多分人間の知ったこっちゃない。 #読書メモ_感想
春の呪い
- 作者: 小西明日翔
- 出版社/メーカー: 一迅社
- 発売日: 2016/04/25
- メディア: Kindle版
- この商品を含むブログを見る
病気と闘っていた妹が死に、妹に全てを支えていた姉がその後に付き合い始めた男性は妹の婚約者だった。ただ妹との思い出をなぞるデートを条件に付き合い始めた二人は、それぞれに後ろめたさを感じつつ、それとは違う方向に進んでいく。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
読んでて息苦しい。一見明るく可愛らしい人に見えるだけに、より空虚さが増していくんだよなあ。
— あべさん (@mao_instantlife) 2016年8月30日
これはどういう読み方して良いのか迷うな。続き気になるけど。 #読書メモ_感想
銀河鉄道の夜
- 作者: 宮沢賢治
- 発売日: 2016/04/19
- メディア: Kindle版
- この商品を含むブログを見る
病気がちな母と暮らすジョバンニは、看病のため疲れてしまって授業にも身が入らなかった。お祭りの日に一人で母のための牛乳を受け取りに出ていると、ふと気づけば列車の中にいた。そして、同席していたカムパネルラとともに、銀河をめぐる旅をする。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
読んだことないと思ってたんだけど、所々に記憶があるのは、あまりにも有名過ぎるからか。結末も知ってるけど、文体からくる雰囲気まではわからなかったから、読んでよかった。穏やかな気持ちになれる。 #読書メモ_感想
— あべさん (@mao_instantlife) August 30, 2016
ペンギン・ハイウェイ
- 作者: 森見登美彦,くまおり純
- 出版社/メーカー: 角川書店(角川グループパブリッシング)
- 発売日: 2012/11/22
- メディア: 文庫
- 購入: 17人 クリック: 459回
- この商品を含むブログ (75件) を見る
小学4年生の「僕」は、いずれえらくなる。その為に世の中のあらゆることを研究している。町に現れたペンギン、お姉さん、おっぱい、世界の果て。お姉さんはどうやらペンギンを生み出す不思議な力があるらしい。
— あべさん (@mao_instantlife) 2016年8月30日
「僕」の夏休みの研究の日々と成長を描く。 #読書メモ_サマリ
素晴らしい。男の子の成長と恋と冒険だけでなく、お姉さんの謎や、成長に伴う傷み、そんなものが全て含まれてる。
— あべさん (@mao_instantlife) August 30, 2016
お姉さんやお父さんとの関係が優しいし、大人になることを拒否してないが物語の芯の強さになってると感じる。 #読書メモ_感想
世界から猫が消えたなら
- 作者: 川村元気
- 出版社/メーカー: マガジンハウス
- 発売日: 2013/03/22
- メディア: Kindle版
- この商品を含むブログ (6件) を見る
「僕」はどうやら脳腫瘍で先が短いらしい。呆然とした僕の前に突然現れたチャラい悪魔は明日僕が死ぬという。寿命を1日延ばすこともできるが、その条件として悪魔が提示するものを世界から消さなければならないらしい。映画、電話、猫、などなど。先のない僕と悪魔の一週間。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
余韻の良い作品はやっぱり読んでよかったという気になる。家族と猫はずるいなーとは思うけど。
— あべさん (@mao_instantlife) August 30, 2016
後はどういう結末にしたところで蛇足だと言い切ってしまう終わり方が好き。 #読書メモ_感想
図解ピケティ入門
【図解】ピケティ入門 たった21枚の図で『21世紀の資本』は読める!
- 作者: 高橋洋一,
- 出版社/メーカー: あさ出版
- 発売日: 2015/02/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る
大著「21世紀の資本」は膨大な数値資料の分析に基づくものであり、それらの説明や解説を通じて内容が構成されているため、挫折しやすい。「21世紀の資本」を挫折せずに読むために本書に出てくる重要な図の解説をする。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
興味を失いかけてるタイミングだったから、あまり響かなかった。ピケティの本の意義と、格差についての捉え方はわかったので、これで読んだ気になっておこう。 #読書メモ_感想
— あべさん (@mao_instantlife) August 30, 2016
世界で戦うプロダクトマネジャーになるための本
世界で闘うプロダクトマネジャーになるための本 トップIT企業のPMとして就職する方法
- 作者: Gayle Laakmann McDowell,Jackie Bavaro
- 出版社/メーカー: マイナビ出版
- 発売日: 2014/08/22
- メディア: Kindle版
- この商品を含むブログを見る
プロダクトマネージャになるために必要なスキルセットのみならず、いざプロダクトマネージャとしてどこかの会社に転職しようとした際に想定される職務経歴の書き方や面接時の質問などを、実際のプロダクトマネージャへのインタビューから実例を整理している。とにかく例題が豊富。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
Kindle版読みづらい。良い本だけど。今の感じだったら物理で欲しい。
— あべさん (@mao_instantlife) August 30, 2016
各社、プロダクトマネジャーに求めている要件などがはっきりする上に、面接の質問事項を通じて、必要なスキルの練習ができる良書。 #読書メモ_感想
ゆらぎの森のシエラ
- 作者: 菅浩江
- 出版社/メーカー: 東京創元社
- 発売日: 2012/10/25
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
塩の霧が満ちて、木々は立ち枯れ作物も育たず、動物たちはいつの間にか異形が跋扈するようになった土地キヌーヌ。異形に変えられ記憶もなくし、命じられるままに殺人を犯してしまった男が、彼を「騎士」と呼びしたう少女とともに、真相の解明と復讐のために異形たちへ戦いを挑む。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
なんか富士見ファンタジアっぽいなあ、と思ったら朝日ソノラマですか、そうですか。この人の作品はじめて読んだけど、SFベースのファンタジーは気楽に読める感じがする。
— あべさん (@mao_instantlife) August 30, 2016
けど、今読みたいものではなかった。 #読書メモ_感想
コンピューターは、むずかしすぎて使えない
- 作者: アランクーパー,Alan Cooper,山形浩生
- 出版社/メーカー: 翔泳社
- 発売日: 2000/02
- メディア: 単行本
- 購入: 1人 クリック: 38回
- この商品を含むブログ (35件) を見る
タイトルでほぼすべてを表している。コンピュータ(というよりソフトウェア)のユーザビリティが一向に良くなる気配がないのはなぜなのか?という疑問に対して、その原因がデザインプロセスにあることを示す。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
「誰のためのデザイン?」のソフトウェア版。ユーザ体験のデザインの重要性について膨大な例とともに語る。
— あべさん (@mao_instantlife) August 30, 2016
ただ、プロセスについてはアップフロントになってて、今のデプロイや計測技術からすると、もっと速くできるとは思う。 #読書メモ_感想
パタリロ 1~2巻
- 作者: 魔夜峰央
- 出版社/メーカー: 白泉社
- 発売日: 1994/09
- メディア: 文庫
- 購入: 2人 クリック: 3回
- この商品を含むブログ (11件) を見る
- 作者: 魔夜峰央
- 出版社/メーカー: 白泉社
- 発売日: 1994/09
- メディア: 文庫
- この商品を含むブログ (1件) を見る
マリネラ国王のパタリロが周りを巻き込んで引き起こすドタバタ劇。真面目な話もあるが、基本的にギャグと特殊性癖の掛け合いで構成される。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
ギャグのテンポもさることながら、ツッコミ側にも誰一人として(性癖込み)まともな奴がいないというのはどういうことだ?おまけにまともな性癖のやつすらいない。あの感じで少女漫画雑誌で、ゴールデンタイムにアニメ化もして、っておおらかな時代だったんだなあ。 #読書メモ_感想
— あべさん (@mao_instantlife) August 30, 2016
ダンジョン飯 三巻
- 作者: 九井諒子
- 出版社/メーカー: KADOKAWA/エンターブレイン
- 発売日: 2016/08/12
- メディア: コミック
- この商品を含むブログ (21件) を見る
レッドドラゴンへの道を着実に進んでいるライオス一向。マルシルの過去や昔の仲間との出会いなど、ちょっとストーリーにアクセントをつけるエピソードが多め。
— あべさん (@mao_instantlife) August 30, 2016
今回の食材はクラーケン(とその寄生虫)とケルピー、ウンディーネ、テンタクルス、大カエル。 #読書メモ_サマリ
マルシルのキャラって何かとかぶるなあ、と思ってたら横井さんか。CV.花澤香菜希望、ということで。マルシルの冷たい目が可愛い。
— あべさん (@mao_instantlife) August 30, 2016
醤油とみりんのあるファンタジー文化圏に軽くツッコミを入れたいところ。最近は読み手としてライオスのサイコパスっぷりに慣れてきてる感がある。 #読書メモ_感想
ランド 三巻
- 作者: 山下和美
- 出版社/メーカー: 講談社
- 発売日: 2016/07/22
- メディア: コミック
- この商品を含むブログ (1件) を見る
真理おばさんは壊れてしまった。杏は「あの世」についての興味に蓋をして生きていくことを決意する。しかし和音は、文字を携えて杏の前に再び現れる。和音はそれを「武器」だと言った。
— あべさん (@mao_instantlife) August 30, 2016
次第に暴かれる隔離かれた実験環境と思しきランドを取り巻く環境についてがメインの巻。 #読書メモ_サマリ
真理おばさんが壊れてくところはしっかりしてた人だけに見てて苦しいな。やっと物語が大きく動き始めた感じがある。
— あべさん (@mao_instantlife) August 30, 2016
なんか、人の群衆心理って醜いなあ。この作品がどう付き合っていくのか先が楽しみ。 #読書メモ_感想
建築家が見たマンガの世界
建築家が見たマンガの世界 「よつばと! ・ジョジョの奇妙な冒険・ヱヴァンゲリヲン新劇場版・ペルソナ4 の経済編」
- 作者: 櫻田一家
- 出版社/メーカー: 株式会社GET
- 発売日: 2014/12/29
- メディア: Kindle版
- この商品を含むブログを見る
アニメやゲーム、漫画に出てくる建築物は果たして建築のプロから見てどうなのか?間取りは大丈夫なのか?というプロの酒飲み話に出てきそうな疑問を本当にプロが検証することになってしまった企画本。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
検証するのは、専門家ではないひとが作った間取りなのだから、野暮と言えば野暮な企画とは思ったけどかなりしっかりした結果になってて驚いた。
— あべさん (@mao_instantlife) August 30, 2016
この手のものはあまり目くじらたてないで楽しむのが良い。 #読書メモ_感想
トーマの心臓
トーマの心臓1 萩尾望都Perfect Selection 1 (フラワーコミックススペシャル)
- 作者: 萩尾望都
- 出版社/メーカー: 小学館
- 発売日: 2007/07/26
- メディア: コミック
- 購入: 1人 クリック: 18回
- この商品を含むブログ (46件) を見る
ギムナジウムのアイドルだったトーマが死んだ。彼の愛を受けとめることのできなかったユーリへの遺書を残して。
— あべさん (@mao_instantlife) August 30, 2016
それからしばらくして、ギムナジウムにトーマに瓜二つの転校生が現れ、ユーリはトーマの思い出に苦しめられる。 #読書メモ_サマリ
同性愛的な部分もあるんだけど、性を超越したように読めてしまう。
— あべさん (@mao_instantlife) August 30, 2016
欠落と気付き、それに伴う苦悩と救い。ここで好きという感情はそのとっかかりになってる。キレイな作品だな。 #読書メモ_感想
BONES
- 作者: 湯沢英治,東野晃典,遠藤秀紀
- 出版社/メーカー: 早川書房
- 発売日: 2008/06/23
- メディア: ハードカバー
- 購入: 4人 クリック: 98回
- この商品を含むブログ (16件) を見る
動物の骨格写真と、それに伴う進化のあり方の説明を合わせて楽しめる写真集。他に余分な写真はない。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
シンゴジラの顎割れは蛇の骨格から?とか、鴨の骨の軽量化がミニ四駆みたい、とか。
— あべさん (@mao_instantlife) August 30, 2016
動物の進化のありかたの1つの面をありありと感じさせてくれる。写真もかっこいいので、それを眺めてるだけでも面白い。 #読書メモ_感想
屍者の帝国
- 作者: 伊藤計劃,円城塔
- 出版社/メーカー: 河出書房新社
- 発売日: 2014/11/06
- メディア: 文庫
- この商品を含むブログ (22件) を見る
19世紀ロンドン、屍者と呼ばれる技術が産業を支えていた。医学部学生のワトソンは特務期間に雇われて、ある事件の調査のためにインドに赴く。
— あべさん (@mao_instantlife) August 30, 2016
それは人間の実存に関わる謎に繋がる事件だった。 #読書メモ_サマリ
場面展開にゲームっぽさを感じる。古今東西の文学作品からの引用もゲームっぽさに拍車をかけてて、ゲームやアニメの演出的な文法に則って書かれてるように感じた。
— あべさん (@mao_instantlife) August 30, 2016
あまりワクワクする話ではなかったな。 #読書メモ_感想
沈黙
- 作者: 遠藤周作
- 出版社/メーカー: 新潮社
- 発売日: 1981/10/19
- メディア: 文庫
- 購入: 26人 クリック: 337回
- この商品を含むブログ (244件) を見る
キリスト教が禁教となった日本に潜入した宣教師ロドリゴは、奉行に追われる中で殉教者を目の当たりにする。その中で彼は、自分の信じている神がなぜ、このような事態に対して沈黙を続けるのかという疑問を払うことができなくなった。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
信仰を持たない(持てないのかも知れないけど)人間にとって、主人公の辛さが心底で理解できないのが読んでて辛い。その場に合うように生きてきたからなあ。 #読書メモ_感想
— あべさん (@mao_instantlife) August 30, 2016
やつがしら
- 作者: 円城塔
- 出版社/メーカー: 東京創元社
- 発売日: 2016/06/01
- メディア: Kindle版
- この商品を含むブログを見る
僕は新しい脳が欲しいのだが、両親は要らないという。でも、新しい脳がなければ、格差がついてしまうことをどう理解してもらえばいいのか? #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
ショートショートが単発で購入できるのはちょっとした読書に良いなあ。
— あべさん (@mao_instantlife) August 30, 2016
この短さで、テクノロジーと経済と知性のありかたの変化を描ききれてる。まあ、自由主義経済においての電脳化は知性の格差を埋めないだろうな、という実験。 #読書メモ_感想
旅したら豆腐メンタルなおるかな?
- 作者: 小久ヒロ
- 出版社/メーカー: イースト・プレス
- 発売日: 2016/02/11
- メディア: Kindle版
- この商品を含むブログを見る
どんなことにもビクビクしてしまう性格の著者が、それを何とかしたいと一人で旅をはじめた旅行記。それぞれ課題をもってドイツ、福島、台湾、タイに一人で行ってみたらどうなったか? #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
二十歳の頃の自分を見るようなメンタルだなあ。未だに被害妄想オールオアナッシングは治ってる感じしないけど。しれっと書かれてるけど、多分かなり深刻な状態だったんだろう。
— あべさん (@mao_instantlife) August 30, 2016
自分をフラットにしていくのは、知ることと人に会うことだというのはよくわかる。 #読書メモ_感想
モザイクラセン
萩尾望都作品集 (〔第2期〕-15) モザイク・ラセン (プチコミックス)
- 作者: 萩尾望都
- 出版社/メーカー: 小学館
- 発売日: 1986/04/20
- メディア: コミック
- この商品を含むブログ (1件) を見る
幼い頃から見ていた夢に導かれて異世界と繋がるファンタジーを描いた表題作ほか、SF、ファンタジー、エッセイの作品集。ファンタジー色が強め。 #読書メモ_サマリ
— あべさん (@mao_instantlife) August 30, 2016
表題作品も良いんだけど神殿の少女が短い中にも時間の流れと深い愛が伝わってきて良い。特に故郷へ向かうときの老人の表情。
— あべさん (@mao_instantlife) August 30, 2016
後、エッセイ的な漫画は始めて読んだかもしれない。可愛らしい人だなあ。 #読書メモ_感想
今月のベスト本
「ペンギン・ハイウェイ」一択です。読後も爽やかだし、成長に伴う痛みもよく描かれているし、何より周りの大人がかっこいい。森見登美彦は今まで読んでなかったけど、これから読んでいこうと思いました。
第2回 【岡山】 Atlassian ユーザーグループ 中国地方で発表してきました
まとめはこちら。
スライドは一部出していいのかダメなのかわからないところがあるので、現時点での公開は差し控えたく候。
セッションについて
「Atlassianという言葉が入ってれば、何をやっても良い(誤読」とのことだったので、年末の内容をブラッシュアップしてセッションしました。まあ、スライドの使い回し部分はほぼ前説に相当する部分のみですが。一番言いたかったことは、
ツールは選択に過ぎないから、自分たちでちゃんと選べるチームになろう
ということに尽きると思います。
勉強会について
他のセッションはデモを盛り込んでいたので、Atlassianツール同士の連携の良さを見ることができました。目がGithubやredmineに慣れているので、少しデモが早かったですが。JIRAを軸に開発だけではなくて、ビジネスのライフサイクルを回すツールの展開をされているんだな、と感じました。
Portfolio欲しい
デモでは触れられなかったんですが、セッションを聴きながら公式サイトを見てたらPortfolio for JIRAというのを見つけて、俄然欲しくなりました。
長沢さんもブログで紹介されていますね。
完全に私が下記エントリでやろうとしてたフローと情報をカバーしてます。
mao-instantlife.hatenablog.com
今までの転記やキャッチアップの人的コストはなんだったんだという。。。いや、もう、買い切りライセンスあるし、チームの人数少ないし、これができるんだったら個人の財布からでも良いよ(デブサミ関西終わってから。
Neo4Jの検証メモ
SpringBoot 1.4が対応したみたいなので、これから先に予定している機能のこともあり、用途の検討も含めて少し使ってみました。なお、SpringBootからの利用ではなく、Neo4Jそのものの検証です。
そもそもNeo4Jとは?
大体以下から大まかに抜粋。
レコード(Neo4J的にはNode)と関連のグラフ構造でデータを表現するグラフデータベースです。データ構造がリレーションモデルではないので、当然系譜的にはNoSQLなわけですが、他のNoSQLとは違ってKeyValue形式ではないのが特長です。
で、他のグラフデータベース(ぶっちゃけ他に何があるか知りませんが)と違うのは、
- ACID特性をフルサポート
- トランザクションがある
- インデックスがある
といったあたりで、Enterprise Editionの可用性とともに、この辺結構プッシュしてた感じです。
ライセンス的にはCommunity EditionとEnterprise Editionがあります。クエリエンジンや基本的なデータベースとしての機能において両者の違いはなく、クラスタリングやキャッシュなどの運用面において違いがあるようです。なお、Community Editionは無料。
使ってみての諸々
インストールはダウンロードして展開してアプリたちあげるだけなので割愛。特に困ったことはありませんでした。
基本
先ほども少し触れましたが、データモデルは「ノード(Node)」「コネクション(Connection)」で表されます。ノードとコネクションのデータ構造管理とクエリ発行がグラフデータベースシステムの役割です。
ノード
今までのRDBMSで言えばレコードに相当します。考え方としてタイプよりもインスタンスを元に作成されるので、レコードほどスキーマ基準の考え方をしなくてもいいようです。
ノードは属性とラベル(グルーピングのために使ったり、スキーマっぽく処理したり)を付与することができます。ノードの属性に指定可能なタイプは以下の通りです。
- boolean
- byte
- short
- int
- long
- float
- double
- char
- string
Javaで作られているので、この辺は基本的にJavaと一致すると思えば良いかと。
コネクション
ノードとノードを結ぶ関係のことで、RDBMSなら外部キーやら制約やらに相当するかと思いますが、Neo4Jではコネクションそのものに値が持てます。コネクションもインスタンスベースとなるので、ラベルなどによるグルーピングはできますが、厳密なスキーマ運用はシステム上ではしていないです。
インデックス、トランザクション
構文やプロシジャのサンプルにもありましたが、今回は使っていません。全文検索インデックスもある模様。
Neo4J用クエリ Cypher
御本尊はここ。
細かいシンタックスに触れると単に公式ドキュメントの引き写しになるので、使ってみたときのハマりどころとか気づきを主に。
ノードとコネクションのCRAETE
例えば、知り合い同士の関連を表す場合(公式のサンプルから引っこ抜いてきました)。
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }), (ir:Person { name: "Ian", from: "England", title: "author" }), (rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }), (ally:Person { name: "Allison", from: "California", hobby: "surfing" }), (ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir), (js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb), (ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally), (rvb)-[:KNOWS]->(ally)
(js:Person { name: "Johan", from: "Sweden", learn: "surfing" })
がノード、 (ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir)
がコネクションの定義です。
コネクションのノード条件については省略可能で、シンタックスはノードと同じ、条件の value
以外は省略可能です。
ノードもコネクションもクエリ投げる時の注意点は value
で、同一ステートメントの中でしか有効じゃありません。というか、ノードに value
で名称がつくわけではないようです。これに気づかずにつまんないハマり方をしまして、一度CREATEでノード作った後に別のステートメントでコネクション作ろうとして同じ value
指定してCREATE投げたら、当然別ステートメントだから参照されず、目的のノード間に対するコネクションが作られず、宙ぶらりんな謎ノードがこれでもかと作られました。
というわけで、一度作ったノードに新しくコネクションを貼るときには、MATCH とCREATE を組み合わせて使いましょう。
すでにノードが存在する可能性があるときはMERGEを使います。検索してみて、見つからなければCREATEしてくれます。
スキーマレスなので、属性のあるなしでエラーは多分出ないです。ぶれても大丈夫。
検索の基本、MATCH
ノードとコネクションの関係を表すパターンで検索をします。
ノードの条件検索
ノードに設定された名称を条件に検索します。
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
コネクションのパターンから検索
ある条件のノードと KNOWS
という関係を持つノードを検索します。ルートになるノードに検索条件をつけます。
MATCH (ee:Person)-[:KNOWS]-(friends) WHERE ee.name = "Emil" RETURN ee, friends
RETURN
は複数の項目セットを返すことができます。
コネクションのパターンは一つで終わらせる必要はありません。友達の友達から趣味が合いそうな人をお勧めするみたいなクエリも書けます。
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer) WHERE js.name = "Johan" AND surfer.hobby = "surfing" RETURN DISTINCT surfer
関連の長さを指定するパターン
関係の本数が3以上で5を最大とする関連、みたいな長さを基準にしたパターンも可能。
(a)-[*3..5]->(b)
実行計画(PROFILE or EXPLAIN)
クエリに PROFILE
や EXPLAIN
をつけると実行計画を出してくれるようです。
ユーザ定義プロシジャ
Neo4Jではユーザ定義プロシジャーを作って CALL
で呼ぶこともできます。必要なAPIはmavenリポジトリで公開されていて、Javaのクラスで作ります。
関数の読み込みも、プロシジャーを作ってjarに固めてpluginディレクトリに入れておけばOKです。
とりあえずサンプル写経して、自分でプロシジャを作ってみたリポジトリがこちら。
普通に gradle build
してできたjarをpluginに入れてNeo4Jを起動すれば関数が使えました。
テストをサポートするライブラリなんかも用意されています。サンプル通りにテストコード書いて実行すると若干起動が遅い上に以下のような出力が出るので、jerseyでNeo4Jを起動しているのかもしれません。
8 08, 2016 1:11:41 午後 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 情報: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM' 8 08, 2016 1:11:41 午後 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 情報: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM' 8 08, 2016 1:11:42 午後 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 情報: Initiating Jersey application, version 'Jersey: 1.19 02/11/2015 03:25 AM' Process finished with exit code 0
とりあえず単体で呼ぶことはできたんですが、例えばこれをMATCHの結果から計算してそのままセットする、みたいなことは、まだCypherのシンタックスがよくわかってないのでできませなんだ。。。
まあ、そもそもですね、こんな関数的なプロシジャ作るべきではなくて、もっとバッチっぽい用途でビジネスロジックをデータベースエンジン側に寄せるようなやり方に使うべきで、プロシジャの中でクエリ投げろ、ということですね、きっと。
まとめ
まあ、SpringBootのサポート状況はさておき、グラフデータベース自体は結構使えるんじゃないかという感触です。可用性については、公式サイトの導入事例が結構でかいところなので、現段階ではあまり気にしてないというか。