Más contenido relacionado La actualidad más candente (20) Más de Masashi Umezawa (20) Tarantalk3. Tarantool
● No SQLの注目株
○ ThoughtWorks Technology RadarのAssess段階
○ ロシア製。Mail.ruで使われている
■ Heavy workloads: our use cases of Tarantool
● Tupleの永続化をサポート
○ KVSよりも構造化
○ RDBよりは軽量
● Luaの実行エンジンであり、Luaで拡張できる
○ https://tarantool.org/rocks.html
■ queue, RDBとの接続など
"Get your data in RAM. Get compute close to data. Enjoy the performance."
20. Tupleの更新
● TrIndex>>updateHaving: keys performing: updatingBlock
○ 更新するフィールドのインデックスを指定
○ フィールド値の代入はassign:
■ add:, subtract:, insert:, splice:from:to: なども
の本家です
● TrSpace>>replace: aTuple
○ 既存のタプルを置き換え、または挿入
22. 例: タグDB (1)
● プログラミング言語に付与されたタグを管理したいとする
プログラミング言語 タグ
Lua dynamic
Lua embeddable
Smalltalk dynamic
Smalltalk object-oriented
Smalltalk message-passing
Erlang dynamic
Erlang message-passing
...
23. 例: タグDB (2)
● Spaceを用意
● プライマリIndexを用意
○ partsTypes:で両要素を指定することで重複したエントリーを排除
http://ws.stfx.eu/M5TS5QWD0L76
24. 例: タグDB (3)
● セカンダリIndexを用意
○ タグからプログラミング言語を引けるようにする
○ タグは重複して良いのでisUnique: falseに
26. 例: タグDB (5)
● Smalltalkに付与されたタグ一覧
○ selectHaving: でキーの一部を指定しているところがミソ
"=>
"
27. 例: タグDB (6)
● 'dynamic'タグのついた言語一覧
○ セカンダリの方でselectHaving:
"=> "
● 集計もしてみる
○ countHaving:
"=> "
31. 例: Webhookの追加 (1)
● タグDBにWebhookを追加する
○ タグの変更があったら、特定URLにpostして通知
○ Tarantoolのトリガー機能と、httpモジュールを使って実現
● space_obj:on_replace(triggeredFunction)で変更時に呼ばれる
関数を設定
○ script.luaに以下の記述を加えてテスト
32. 例: Webhookの追加 (2)
● httpクライアントの利用
○ jsonモジュールと組み合わせ、JSONのpostを行うようにする
○ tags_changedの中で使うようにscript.luaを書き換え
33. 例: Webhookの追加 (3)
● Pharo側にTeapotでWebhookのハンドラを作成して確認
○ Catalog Browserから Teapotを入れる
○ ワークスペースで以下を”do it”
● タグ更新の度にインスペクタが開く
34. 例: メッセージキューの導入 (1)
● 永続化キューを介してタプルをやり取りする
○ TTL, TTR, Delay, 優先度, sub queuesなどを指定できる
■ https://github.com/tarantool/queue
○ Tubeと呼ばれるキューを作成
■ サプライヤー側がtubeにtaskをput
■ コンシューマ側がtubeからtaskをtake、終わったらack
● script.luaでqueueをrequire
35. 例: メッセージキューの導入 (2)
● FIFOキューの利用例
● Tarantalkからevalで上記のAPIを利用
タスクの登録
タスクの消費
取得 秒でタイムアウト
タスクの で完了を知らせる
36. 例: メッセージキューの導入 (3)
● script.luaでキューを用意しておく
● Tarantalkから'queue.tube.tags_tube'で参照し、APIをevalする
http://ws.stfx.eu/N2Q1UVW3V8ZF
38. 例: メッセージキューの導入 (5)
● キューを監視してタスクを消費
タスクの取得
タスクの情報を使い、何らかの処理
タスク完了を通知
http://ws.stfx.eu/PTCIIAPVBS6O