SlideShare a Scribd company logo
SQLマッピングフレームワーク
「Kobati」の実戦投入
2017/12/26
南谷千城
投入先
実戦で使い始めて10ヶ月程経過
SmalltalkでRDB操作
• O/Rマッパーは「Glorp」一択
– 20年
• 使っていて涙目。置き換える
–記述が面倒
–スキーマの更新に追随するのが大変
–謎エラー
–キャッシュの使い方がイマイチ
記述が面倒
スキーマの更新に追随するのが大変
• 1つのテーブル定義(DDL)を、3メソッドに分解、
翻訳して定義(Smalltalk)する
• Smalltalk側のクラス定義が先、RDBが後
• 外部キー参照やJOINが扱いにくい
• メタプログラミングで実体が把握し辛い
– 柔軟性もあまり良くない
謎エラー
• 時折、なんでもないクエリでエラー
• 発生場所もランダムっぽい
ということで、なにかと非難を浴びせたが
ライブラリ側でマルチスレッド対応していない
という、Smalltalkあるある
使い方の問題
濡れ衣
キャッシュの使い方がイマイチ ①
id: 1
value: abc
id: 2
value: def
id: 1
value: abc
id: 2
value: xyz
id: 3
value: ghi
RDB
Session Cache
Pharo
id: 1
id: 1
value: abc
RDBとSmalltalkイメージが1対1で対応していることが前提
キャッシュの使い方がイマイチ ②
id: 1
value: abc
id: 2
value: def
id: 1
value: abc あいう
id: 2
value: xyz
id: 3
value: ghi
RDB
Session Cache
Pharo A
id: 1
value: abc あいう
save 同じ
キャッシュの使い方がイマイチ ③
id: 1
value: abc
id: 2
value: def
id: 1
value: abc
id: 2
value: xyz
id: 3
value: ghi
RDB Session Cache
Smalltalk
id: 1
id: 1
value: abc
Client X
id: 1
value: abc わをん
save
他者がRDBを更新すると、そこで状態ズレが生じて終了
SQLマッピングフレームワーク
「Kobati」
• SmalltalkHub
– http://smalltalkhub.com/#!/~kaminami/Kobati
• 過去のスライド
– https://www.slideshare.net/kazukiminamitani/sqlkobati
• MyBatis for Javaの思想を参考
• 設定は全てXMLに記述
– DBコンフィグ
– SQLのテンプレート
– SELECT結果とオブジェクトのマッピング
• メタメタしない、SQLをほぼそのまま扱う。キャッシュしない
• PostgreSQL専用、固有のSQL拡張も気軽に利用できる
利用状況 ①
• 主要な箇所は概ね置き換え済み
– 150テーブル
– SQL 10000行
– 650メソッド
• Webアプリ主導の単なるデータ・ストレージから、
RDBらしい利用形態に
• JOINしまくりのクエリから、構造を持つオブジェク
トを組み立てて利用
– SELECT句を固定
– WHERE句とORDER BY句をPharo側のビルダーで組み
立てて渡すパターンを確立
利用状況 ②
• 簡単なことしかしていないこともあり、フレー
ムワーク由来の問題はほぼ出ない
– DB設計、発行するSQLの問題に集中できる
• 単位時間あたりに取り扱えるクエリ数はGlorp
の1.5〜2倍程度
評価
• 良い
– 任意のSQLが利用できるので、小回りが効く
– ラウンドトリップ早い
– 記述したSQLを解析用途などに転用しやすい
• 悪い
– ボイラープレートなコードが多い
• 隠されたコードがないので状況の把握は楽
– 公開情報があまりない
• Glorpを新規採用して良いことはない
今後
• GitHubにリポジトリ移動(予定地)
– https://github.com/kaminami/Kobati

More Related Content

Similar to SQLマッピングフレームワーク「Kobati」の実戦投入

NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめGosuke Miyashita
 
DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す
Kiro Harada
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
yy yank
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
Mikiya Okuno
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
masayoshi takahashi
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事
Hirokazu Tokuno
 
ハゲた天使が恋のキューピッドになった物語
ハゲた天使が恋のキューピッドになった物語ハゲた天使が恋のキューピッドになった物語
ハゲた天使が恋のキューピッドになった物語
Eisuke Shimizu
 

Similar to SQLマッピングフレームワーク「Kobati」の実戦投入 (8)

NoSQLに関するまとめ
NoSQLに関するまとめNoSQLに関するまとめ
NoSQLに関するまとめ
 
DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事
 
ハゲた天使が恋のキューピッドになった物語
ハゲた天使が恋のキューピッドになった物語ハゲた天使が恋のキューピッドになった物語
ハゲた天使が恋のキューピッドになった物語
 

Recently uploaded

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 

Recently uploaded (6)

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 

SQLマッピングフレームワーク「Kobati」の実戦投入