Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Tarantalk
Smalltalk と Lua と Tuple DBMS
第96回Smalltalk勉強会
合同会社ソフトウメヤ 梅澤真史
Tarantalkとは
● 永続化機能付きLuaとPharoがコラボできる
○ https://github.com/mumez/Tarantalk
● Qiitaの記事
■ 「SmalltalkからLuaをevalする」
■ 「Taranta...
Tarantool
● No SQLの注目株
○ ThoughtWorks Technology RadarのAssess段階
○ ロシア製。Mail.ruで使われている
■ Heavy workloads: our use cases of ...
Tarantoolのインストール
● Tarantoolの入手
○ https://tarantool.org/download.html
■ 様々なプラットフォームに対応
○ Macなら
Tarantoolの起動
● 適当なディレクトリ(taranとか)を作成、移動し
● 3 + 4
● クライアントの接続受付
ユーザの権限設定
● 接続用ユーザの登録
● アクセス権限の付与
Tarantalkのインストール
● Catalog Browserから
○ ’tarantool’で検索し、”install stable version”
● あるいはMetacelloでロード
Tarantalkの構成
● Tarantalk-Core
○ Tarantoolに対するConnector
■ Stickベースなので自動reconnectする
○ バイナリプロトコルの実装
■ MessagePackゆえ軽量
● Taran...
接続の確認
● TrTarantalk>>connect:で接続
○ URLでユーザ名、パスワードを指定
● pingしてみる
● 非同期APIなのでブロックしない
○ TrRequestが即座に返ってくる
■ ifDone:ifError:な...
接続の解放
● TrTarantalk>>releaseで切断
● TrTarantalk class >> releaseAll
○ 全ての接続を一度に解放
Hello, Tarantalk
● Luaの実行エンジンとして
○ evalWithReturn: で 3 + 4 を実行
○ 結果をifDone:ifFailed: で得る
さらに複雑なeval
こんにちは の世界へ
● モジュールをrequire
● 引数で値を渡す(evalWithReturn:arguments:)
● 結果を同期的に得る(valueThen:)
関数のcall (1)
関数 の登録
● Luaの関数を登録して呼び出し可能にする
関数のcall (2)
● 登録したLuaの関数をPharo側から呼び出せる
○ call: funcName
○ call: funcName arguments: args
● 起動時に読み込むscript.lua(後述)でよく使う関数を登...
永続化のためのデータモデル
● Key-Valueや表ではない
○ SpaceとTuple
○ https://tarantool.org/doc/book/box/data_model.html
● Tupleの集合を格納する
● Space...
Spaceの作成
● TrTarantalk>>ensureSpaceNamed:で生成
○ すでに存在する場合は既存のspaceが返される
● TrTarantalk>>userSpacesでSpaceの一覧を得る
http://ws.stf...
Indexの作成
● Tupleの特定フィールド(群)に対して作成
○ プライマリインデックスは必須
○ インデックスの種類やフィールドの型をoptionsで指定できる
● インデックスの種類で検索の性質が変わる
○ TREE 順序付けされたキ...
Tupleの格納
本家サイト
のオンライン
書籍
本家サイト
ユーザ会
ユーザのためのハブサイト 勉強会も毎月やっています
● TrSpace>>insert:を使う
○ フィールドが増減しても良い
○ インデックスが張られたフィールドの型は合...
Tupleの取得
本家サイト
● TrIndex>>select系のメソッド群がある
● selectHaving: keys
ユーザ会
ユーザ会 ユーザのためのハブサイト
勉強会も毎月やっています 本家サイト
● select: iterat...
Tupleの更新
● TrIndex>>updateHaving: keys performing: updatingBlock
○ 更新するフィールドのインデックスを指定
○ フィールド値の代入はassign:
■ add:, subtrac...
Tupleの削除
● TrIndex>>deleteHaving: keys
○ キーで指定したタプルを削除
"=> "
"=>Space '512' does not exist"
● TrSpace>>truncate
○ Spaceを空に...
例: タグDB (1)
● プログラミング言語に付与されたタグを管理したいとする
プログラミング言語 タグ
Lua dynamic
Lua embeddable
Smalltalk dynamic
Smalltalk object-orient...
例: タグDB (2)
● Spaceを用意
● プライマリIndexを用意
○ partsTypes:で両要素を指定することで重複したエントリーを排除
http://ws.stfx.eu/M5TS5QWD0L76
例: タグDB (3)
● セカンダリIndexを用意
○ タグからプログラミング言語を引けるようにする
○ タグは重複して良いのでisUnique: falseに
例: タグDB (4)
● データ投入
例: タグDB (5)
● Smalltalkに付与されたタグ一覧
○ selectHaving: でキーの一部を指定しているところがミソ
"=>
"
例: タグDB (6)
● 'dynamic'タグのついた言語一覧
○ セカンダリの方でselectHaving:
"=> "
● 集計もしてみる
○ countHaving:
"=> "
LuaRocksによる拡張
● Tarantool用リポジトリに各種パッケージがある
○ https://tarantool.org/rocks.html
■ http, mqtt, queue, コネクションプール、RDB接続、
expire...
LuaRocksの設定
● Tarantool用リポジトリの設定を追加
● luarocks install 'モジュール名'で新規モジュールをインストールできる
script.luaの記述
● Tarantool起動時に初期化用スクリプトを指定できる
○ モジュールをrequireしておく
○ 自分で拡張した関数なども記述しておく
● 例: httpクライアントモジュールを導入し、3301で起動
○ 対...
例: Webhookの追加 (1)
● タグDBにWebhookを追加する
○ タグの変更があったら、特定URLにpostして通知
○ Tarantoolのトリガー機能と、httpモジュールを使って実現
● space_obj:on_repla...
例: Webhookの追加 (2)
● httpクライアントの利用
○ jsonモジュールと組み合わせ、JSONのpostを行うようにする
○ tags_changedの中で使うようにscript.luaを書き換え
例: Webhookの追加 (3)
● Pharo側にTeapotでWebhookのハンドラを作成して確認
○ Catalog Browserから Teapotを入れる
○ ワークスペースで以下を”do it”
● タグ更新の度にインスペクタが...
例: メッセージキューの導入 (1)
● 永続化キューを介してタプルをやり取りする
○ TTL, TTR, Delay, 優先度, sub queuesなどを指定できる
■ https://github.com/tarantool/queue
...
例: メッセージキューの導入 (2)
● FIFOキューの利用例
● Tarantalkからevalで上記のAPIを利用
タスクの登録
タスクの消費
取得 秒でタイムアウト
タスクの で完了を知らせる
例: メッセージキューの導入 (3)
● script.luaでキューを用意しておく
● Tarantalkから'queue.tube.tags_tube'で参照し、APIをevalする
http://ws.stfx.eu/N2Q1UVW3V8...
例: メッセージキューの導入 (4)
● tagSpaceにタグを追加すると共に、キューにも追加
● 別イメージや別プロセスから、好きなタイミングでtaskを取り出しての
処理が可能に
例: メッセージキューの導入 (5)
● キューを監視してタスクを消費
タスクの取得
タスクの情報を使い、何らかの処理
  タスク完了を通知
http://ws.stfx.eu/PTCIIAPVBS6O
例: メッセージキューの導入 (6)
● タグランキング DBを別途作成し、同期してみる
タグ スコア
dynamic 30
cool 23
... ...
例: メッセージキューの導入 (5)
● タスクが取得できたらランキングの該当スコアを更新
スコアの加算
Tarantube
● Tarantubeで更に簡単に
の 作成
に を追加
定期的にタスクを取得して実行
まとめ
● TarantalkでSmalltalkとLuaはいい感じで連携できる
● Tuple DBは軽量で高速。インデックスの特徴を活かした検索
が可能
● LuaRocksの拡張モジュールも実用性高い
● メッセージキューについてはTar...
Nächste SlideShare
Wird geladen in …5
×

Tarantalk

SmalltalkとLuaとTuple DBMSの融合を可能にする、Tarantalkについての紹介

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen
  • Als Erste(r) kommentieren

Tarantalk

  1. 1. Tarantalk Smalltalk と Lua と Tuple DBMS 第96回Smalltalk勉強会 合同会社ソフトウメヤ 梅澤真史
  2. 2. Tarantalkとは ● 永続化機能付きLuaとPharoがコラボできる ○ https://github.com/mumez/Tarantalk ● Qiitaの記事 ■ 「SmalltalkからLuaをevalする」 ■ 「TarantalkでSmalltalkからDBを操る」
  3. 3. 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."
  4. 4. Tarantoolのインストール ● Tarantoolの入手 ○ https://tarantool.org/download.html ■ 様々なプラットフォームに対応 ○ Macなら
  5. 5. Tarantoolの起動 ● 適当なディレクトリ(taranとか)を作成、移動し ● 3 + 4 ● クライアントの接続受付
  6. 6. ユーザの権限設定 ● 接続用ユーザの登録 ● アクセス権限の付与
  7. 7. Tarantalkのインストール ● Catalog Browserから ○ ’tarantool’で検索し、”install stable version” ● あるいはMetacelloでロード
  8. 8. Tarantalkの構成 ● Tarantalk-Core ○ Tarantoolに対するConnector ■ Stickベースなので自動reconnectする ○ バイナリプロトコルの実装 ■ MessagePackゆえ軽量 ● Tarantalk-Objects ○ OO的なAPIを提供するラッパー群 ■ TrTarantalk, TrSpace, TrIndexなど
  9. 9. 接続の確認 ● TrTarantalk>>connect:で接続 ○ URLでユーザ名、パスワードを指定 ● pingしてみる ● 非同期APIなのでブロックしない ○ TrRequestが即座に返ってくる ■ ifDone:ifError:などで後で結果を受け取る
  10. 10. 接続の解放 ● TrTarantalk>>releaseで切断 ● TrTarantalk class >> releaseAll ○ 全ての接続を一度に解放
  11. 11. Hello, Tarantalk ● Luaの実行エンジンとして ○ evalWithReturn: で 3 + 4 を実行 ○ 結果をifDone:ifFailed: で得る
  12. 12. さらに複雑なeval こんにちは の世界へ ● モジュールをrequire ● 引数で値を渡す(evalWithReturn:arguments:) ● 結果を同期的に得る(valueThen:)
  13. 13. 関数のcall (1) 関数 の登録 ● Luaの関数を登録して呼び出し可能にする
  14. 14. 関数のcall (2) ● 登録したLuaの関数をPharo側から呼び出せる ○ call: funcName ○ call: funcName arguments: args ● 起動時に読み込むscript.lua(後述)でよく使う関数を登録しておく
  15. 15. 永続化のためのデータモデル ● Key-Valueや表ではない ○ SpaceとTuple ○ https://tarantool.org/doc/book/box/data_model.html ● Tupleの集合を格納する ● Spaceの中にTupleが入る ○ Tupleのフィールドに複数の検索Indexを定義できる
  16. 16. Spaceの作成 ● TrTarantalk>>ensureSpaceNamed:で生成 ○ すでに存在する場合は既存のspaceが返される ● TrTarantalk>>userSpacesでSpaceの一覧を得る http://ws.stfx.eu/HROST5KMRK6A
  17. 17. Indexの作成 ● Tupleの特定フィールド(群)に対して作成 ○ プライマリインデックスは必須 ○ インデックスの種類やフィールドの型をoptionsで指定できる ● インデックスの種類で検索の性質が変わる ○ TREE 順序付けされたキー ○ HASH キーの順序が不定、挿入が早い ○ BITSET コンパクト、キーに対するビット操作 ○ RTREE 空間インデックス
  18. 18. Tupleの格納 本家サイト のオンライン 書籍 本家サイト ユーザ会 ユーザのためのハブサイト 勉強会も毎月やっています ● TrSpace>>insert:を使う ○ フィールドが増減しても良い ○ インデックスが張られたフィールドの型は合わせておく
  19. 19. Tupleの取得 本家サイト ● TrIndex>>select系のメソッド群がある ● selectHaving: keys ユーザ会 ユーザ会 ユーザのためのハブサイト 勉強会も毎月やっています 本家サイト ● select: iteratorSymbol having: keys offset: offset limit: limit ○ #<, #<=, #>, #>=, #eq, #req, #bitsAnySet, #bitsAllSet, #overlaps, #neighbour など、シンボルでキーの列挙の仕方を決められる
  20. 20. Tupleの更新 ● TrIndex>>updateHaving: keys performing: updatingBlock ○ 更新するフィールドのインデックスを指定 ○ フィールド値の代入はassign: ■ add:, subtract:, insert:, splice:from:to: なども の本家です ● TrSpace>>replace: aTuple ○ 既存のタプルを置き換え、または挿入
  21. 21. Tupleの削除 ● TrIndex>>deleteHaving: keys ○ キーで指定したタプルを削除 "=> " "=>Space '512' does not exist" ● TrSpace>>truncate ○ Spaceを空にする ● TrSpace>>drop ○ Spaceごと削除
  22. 22. 例: タグDB (1) ● プログラミング言語に付与されたタグを管理したいとする プログラミング言語 タグ Lua dynamic Lua embeddable Smalltalk dynamic Smalltalk object-oriented Smalltalk message-passing Erlang dynamic Erlang message-passing ...
  23. 23. 例: タグDB (2) ● Spaceを用意 ● プライマリIndexを用意 ○ partsTypes:で両要素を指定することで重複したエントリーを排除 http://ws.stfx.eu/M5TS5QWD0L76
  24. 24. 例: タグDB (3) ● セカンダリIndexを用意 ○ タグからプログラミング言語を引けるようにする ○ タグは重複して良いのでisUnique: falseに
  25. 25. 例: タグDB (4) ● データ投入
  26. 26. 例: タグDB (5) ● Smalltalkに付与されたタグ一覧 ○ selectHaving: でキーの一部を指定しているところがミソ "=> "
  27. 27. 例: タグDB (6) ● 'dynamic'タグのついた言語一覧 ○ セカンダリの方でselectHaving: "=> " ● 集計もしてみる ○ countHaving: "=> "
  28. 28. LuaRocksによる拡張 ● Tarantool用リポジトリに各種パッケージがある ○ https://tarantool.org/rocks.html ■ http, mqtt, queue, コネクションプール、RDB接続、 expire指定、sharding、avro-schemaなど ● LuaRocksが必要 ○ Luaのパッケージマネージャ ■ Luaのインストールと共に入る ○ Macなら ■ 5.1系が無難
  29. 29. LuaRocksの設定 ● Tarantool用リポジトリの設定を追加 ● luarocks install 'モジュール名'で新規モジュールをインストールできる
  30. 30. script.luaの記述 ● Tarantool起動時に初期化用スクリプトを指定できる ○ モジュールをrequireしておく ○ 自分で拡張した関数なども記述しておく ● 例: httpクライアントモジュールを導入し、3301で起動 ○ 対話コンソールも開いておく tarantool script-http.lua
  31. 31. 例: Webhookの追加 (1) ● タグDBにWebhookを追加する ○ タグの変更があったら、特定URLにpostして通知 ○ Tarantoolのトリガー機能と、httpモジュールを使って実現 ● space_obj:on_replace(triggeredFunction)で変更時に呼ばれる 関数を設定 ○ script.luaに以下の記述を加えてテスト
  32. 32. 例: Webhookの追加 (2) ● httpクライアントの利用 ○ jsonモジュールと組み合わせ、JSONのpostを行うようにする ○ tags_changedの中で使うようにscript.luaを書き換え
  33. 33. 例: Webhookの追加 (3) ● Pharo側にTeapotでWebhookのハンドラを作成して確認 ○ Catalog Browserから Teapotを入れる ○ ワークスペースで以下を”do it” ● タグ更新の度にインスペクタが開く
  34. 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. 35. 例: メッセージキューの導入 (2) ● FIFOキューの利用例 ● Tarantalkからevalで上記のAPIを利用 タスクの登録 タスクの消費 取得 秒でタイムアウト タスクの で完了を知らせる
  36. 36. 例: メッセージキューの導入 (3) ● script.luaでキューを用意しておく ● Tarantalkから'queue.tube.tags_tube'で参照し、APIをevalする http://ws.stfx.eu/N2Q1UVW3V8ZF
  37. 37. 例: メッセージキューの導入 (4) ● tagSpaceにタグを追加すると共に、キューにも追加 ● 別イメージや別プロセスから、好きなタイミングでtaskを取り出しての 処理が可能に
  38. 38. 例: メッセージキューの導入 (5) ● キューを監視してタスクを消費 タスクの取得 タスクの情報を使い、何らかの処理   タスク完了を通知 http://ws.stfx.eu/PTCIIAPVBS6O
  39. 39. 例: メッセージキューの導入 (6) ● タグランキング DBを別途作成し、同期してみる タグ スコア dynamic 30 cool 23 ... ...
  40. 40. 例: メッセージキューの導入 (5) ● タスクが取得できたらランキングの該当スコアを更新 スコアの加算
  41. 41. Tarantube ● Tarantubeで更に簡単に の 作成 に を追加 定期的にタスクを取得して実行
  42. 42. まとめ ● TarantalkでSmalltalkとLuaはいい感じで連携できる ● Tuple DBは軽量で高速。インデックスの特徴を活かした検索 が可能 ● LuaRocksの拡張モジュールも実用性高い ● メッセージキューについてはTarantubeが利用できる

    Als Erste(r) kommentieren

    Loggen Sie sich ein, um Kommentare anzuzeigen.

  • philippeback

    Jan. 31, 2017
  • takano32

    Mar. 17, 2017

SmalltalkとLuaとTuple DBMSの融合を可能にする、Tarantalkについての紹介

Aufrufe

Aufrufe insgesamt

669

Auf Slideshare

0

Aus Einbettungen

0

Anzahl der Einbettungen

18

Befehle

Downloads

2

Geteilt

0

Kommentare

0

Likes

2

×