Submit Search
Upload
The plan of Aniki 2.0
•
1 like
•
4,435 views
karupanerura
Follow
YAPC::Fukuoka 2017 HAKATA
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 36
Download now
Download to read offline
Recommended
Aniki::Internal
Aniki::Internal
karupanerura
コンテキストと仲良く
コンテキストと仲良く
karupanerura
Lチカ入門の準備 おっさん達が好きなことを話す会
Lチカ入門の準備 おっさん達が好きなことを話す会
Tsutomu Sakaguchi
サイタマッパー活動報告2015
サイタマッパー活動報告2015
Kazuho Ohta
20191030 RPA makes us Anything.
20191030 RPA makes us Anything.
riscurred
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
Ken-ichi Kudo
Perl5 on Perl6
Perl5 on Perl6
まさあき さいとう
RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1
Satomi Tsujita
Recommended
Aniki::Internal
Aniki::Internal
karupanerura
コンテキストと仲良く
コンテキストと仲良く
karupanerura
Lチカ入門の準備 おっさん達が好きなことを話す会
Lチカ入門の準備 おっさん達が好きなことを話す会
Tsutomu Sakaguchi
サイタマッパー活動報告2015
サイタマッパー活動報告2015
Kazuho Ohta
20191030 RPA makes us Anything.
20191030 RPA makes us Anything.
riscurred
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
取り柄のないボクがGinza.rb、社内勉強会、技術書典の出展とか、なんでやってるんだっけ?
Ken-ichi Kudo
Perl5 on Perl6
Perl5 on Perl6
まさあき さいとう
RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方 ver. okayama1
Satomi Tsujita
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
Satomi Tsujita
わんくま同盟札幌#2 Lチカ卒業後の進路
わんくま同盟札幌#2 Lチカ卒業後の進路
Tsutomu Sakaguchi
Rails5β + herokuで遊んでみた
Rails5β + herokuで遊んでみた
shota miyazaki
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Hideyuki TAKEI
RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
Sotaro Omura
IPアドレスのおねだん
IPアドレスのおねだん
Kei Onimaru
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
Functional Programming in Scala #4-1
Functional Programming in Scala #4-1
Yoshihiro Shimizu
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
karupanerura
The Crystal language *recently* update
The Crystal language *recently* update
karupanerura
DateTimeX::Moment
DateTimeX::Moment
karupanerura
router-simple.cr
router-simple.cr
karupanerura
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
karupanerura
Aniki has come
Aniki has come
karupanerura
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
Shigetaka Yachi
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
洋史 東平
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Takanori Suzuki
Code for Sapporoのこれまでとこれから
Code for Sapporoのこれまでとこれから
Yusuke Suzuki
メイキング・オブ・ザ・さっぽろ保育園マップ
メイキング・オブ・ザ・さっぽろ保育園マップ
Yusuke Suzuki
NaraとOSMとFOSS4G
NaraとOSMとFOSS4G
康司 石塚
Perl5 VS JSON
Perl5 VS JSON
karupanerura
KOWAZA for mackerel
KOWAZA for mackerel
karupanerura
More Related Content
What's hot
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
Satomi Tsujita
わんくま同盟札幌#2 Lチカ卒業後の進路
わんくま同盟札幌#2 Lチカ卒業後の進路
Tsutomu Sakaguchi
Rails5β + herokuで遊んでみた
Rails5β + herokuで遊んでみた
shota miyazaki
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Hideyuki TAKEI
RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
Sotaro Omura
IPアドレスのおねだん
IPアドレスのおねだん
Kei Onimaru
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
Functional Programming in Scala #4-1
Functional Programming in Scala #4-1
Yoshihiro Shimizu
What's hot
(8)
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
わんくま同盟札幌#2 Lチカ卒業後の進路
わんくま同盟札幌#2 Lチカ卒業後の進路
Rails5β + herokuで遊んでみた
Rails5β + herokuで遊んでみた
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
IPアドレスのおねだん
IPアドレスのおねだん
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Functional Programming in Scala #4-1
Functional Programming in Scala #4-1
Viewers also liked
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
karupanerura
The Crystal language *recently* update
The Crystal language *recently* update
karupanerura
DateTimeX::Moment
DateTimeX::Moment
karupanerura
router-simple.cr
router-simple.cr
karupanerura
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
karupanerura
Aniki has come
Aniki has come
karupanerura
Viewers also liked
(6)
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
The Crystal language *recently* update
The Crystal language *recently* update
DateTimeX::Moment
DateTimeX::Moment
router-simple.cr
router-simple.cr
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
Aniki has come
Aniki has come
Similar to The plan of Aniki 2.0
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
Shigetaka Yachi
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
洋史 東平
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Takanori Suzuki
Code for Sapporoのこれまでとこれから
Code for Sapporoのこれまでとこれから
Yusuke Suzuki
メイキング・オブ・ザ・さっぽろ保育園マップ
メイキング・オブ・ザ・さっぽろ保育園マップ
Yusuke Suzuki
NaraとOSMとFOSS4G
NaraとOSMとFOSS4G
康司 石塚
Similar to The plan of Aniki 2.0
(6)
perlで挑むごみ集取カレンダー
perlで挑むごみ集取カレンダー
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Two sides of Python Engineer Training Book in PyCon mini Sapporo
Code for Sapporoのこれまでとこれから
Code for Sapporoのこれまでとこれから
メイキング・オブ・ザ・さっぽろ保育園マップ
メイキング・オブ・ザ・さっぽろ保育園マップ
NaraとOSMとFOSS4G
NaraとOSMとFOSS4G
More from karupanerura
Perl5 VS JSON
Perl5 VS JSON
karupanerura
KOWAZA for mackerel
KOWAZA for mackerel
karupanerura
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
karupanerura
Why we use mruby with Perl5?
Why we use mruby with Perl5?
karupanerura
はかたの塩
はかたの塩
karupanerura
Gotanda.pmの紹介
Gotanda.pmの紹介
karupanerura
すいすいSwift
すいすいSwift
karupanerura
Perlにおけるclass実装パターン
Perlにおけるclass実装パターン
karupanerura
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
karupanerura
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
karupanerura
Perl5 meta programming
Perl5 meta programming
karupanerura
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
karupanerura
dwangocpp1-lt
dwangocpp1-lt
karupanerura
engineer-life
engineer-life
karupanerura
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
karupanerura
Hachioji.pm #40
Hachioji.pm #40
karupanerura
Hachioji.pm #39
Hachioji.pm #39
karupanerura
perl5の日付時刻処理とか
perl5の日付時刻処理とか
karupanerura
Yapc asia-2012-lt-thon
Yapc asia-2012-lt-thon
karupanerura
ぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvc
karupanerura
More from karupanerura
(20)
Perl5 VS JSON
Perl5 VS JSON
KOWAZA for mackerel
KOWAZA for mackerel
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
Why we use mruby with Perl5?
Why we use mruby with Perl5?
はかたの塩
はかたの塩
Gotanda.pmの紹介
Gotanda.pmの紹介
すいすいSwift
すいすいSwift
Perlにおけるclass実装パターン
Perlにおけるclass実装パターン
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
Perl5 meta programming
Perl5 meta programming
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
dwangocpp1-lt
dwangocpp1-lt
engineer-life
engineer-life
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
Hachioji.pm #40
Hachioji.pm #40
Hachioji.pm #39
Hachioji.pm #39
perl5の日付時刻処理とか
perl5の日付時刻処理とか
Yapc asia-2012-lt-thon
Yapc asia-2012-lt-thon
ぼくがかんがえたさいきょうのMvc
ぼくがかんがえたさいきょうのMvc
The plan of Aniki 2.0
1.
The plan of
Aniki 2.0 id:karupanerura YAPC::Fukuoka 2017 HAKATA
2.
おことわり • AnikiというORMの2.0に向けたロードマップ に関するトークです • ORMやAnikiに関心が知識があると面白いと おもいます •
今すぐ cpanm Aniki しましょう • 裏は福岡のITの未来の話をやってます
3.
だれ • id:karupanerura (Twitter/Hatena/Github) •
Japan Perl Association / DeNA Co,.Ltd. • Perl/XS/Go/Crystal/Swift/Java/etc.. • CPAN Author (PAUSE:KARUPA) • Gotanda.pm / Mackerel UG Organizer
4.
あじぇんだ • Anikiとは • Aniki
1.0まで • Aniki 2.0から • まとめ
5.
Anikiとは YAPC::Hokkaido 2016 Sapporo https://speakerdeck.com/karupanerura/lai-rigaifalsearuorm-aniki-che-di-jie-shuo
6.
Aniki採用企業 • 名前出していいのかわからないけど何社か導 入してくれているところがあると聞いてます • 弊社ではまだ使ってるところないらしい •
自分のプロジェクトは自分が入ったときに はTengだった
7.
Aniki 2.0
8.
…の前に おさらい
9.
ORMにありがちな問題 • よくわからないクエリの発行 • N+1問題を作りがち •
(大量の行を取得したとき)重い • 行Objectのライフサイクルが長くなりがち • 複数DBと相性が悪い
10.
つらい 酒のみたい
11.
つらいけど問題と向き合う
12.
よくわからないクエリの発行 • 大概、オブジェクトの操作に寄せすぎ • プログラムとしてはキレイになる •
パフォーマンスを考慮したコードを書くに はORMの深い知識が必要になって基本的に ハードルが高くて難しい • 操作とその副作用のクエリが暗黙的
13.
N+1問題を作りがち • N+1問題を知らないひとはぐぐって! • 大概ORMの機能の無理解や誤解から起きる •
関連レコードをprefetchする機能を使うべき • とはいえTengなどサポートの無いORMもある • prefetchから何が起こるかイメージしにくい
14.
(大量の行を取得したとき)重い • 大量のオブジェクトの生成はしんどい • 大量のメモリアロケーション •
プールにないことが多い • 当たり前体操 • 1行づつfetchすればちょっとマシな場合も
15.
行Objectのライフサイクル • 長くなりがち • なんで長くなりがちかってmutableだから •
setしてsetしてsaveとかやりがち • 状態引き回すことになりがち • ライフサイクル長いと状態が見えにくくなっ てバグ仕込みがち
16.
複数DBとの相性が悪い • そもそも複数DBが辛い • シャーディングとかシャーディングとか… •
Slaveとのレプリ遅延も辛い • トランザクションまたぎが辛い • 大概、トランザクション管理の関係が問題で DBと一対一の関係にしているORMが多そう
17.
Aniki 1.0
18.
Aniki 1.0 • SQLに寄ったクエリ発行ベースのAPI •
N+1が起きてからprefetchを仕込めな設計 • 大量のデータは生データで扱え(suppress_*) • 行オブジェクトがImmutable • 複数Slaveには対応
19.
解決しきれていない 問題がある
20.
Aniki 2.0
21.
コンセプト • 「使いやすい」から「改善しやすい」へ • ORMが持っている問題をもっと少なく •
もっと開発者が楽になれて • DBの問題に対処しやすいように • コードもわかりやすいように
22.
新機能 • シャーディング/複数DB支援 • Lint機能 •
Phantom Row Object • Iteratorサポート
23.
※構想です 気が変わって方針転換する可能性があります
24.
シャーディング/複数DB支援 • クラスタ/シャード/スレーブ管理 • たぶん汎用的なモジュールとして切り出す •
schemaに対するDSLも提供したい • DSL見ただけで系統やシャードの切り方が 分かったら素敵では???
25.
Lint機能 • N+1問題を検出 • prefetchするべきかどうかはエンジニアが 判断するしかなかった→自動でやりたい •
生SQLと行Objectの対応がまずったら警告 • 静的検査したいけどそこまではできないかも
26.
Phantom Row Object •
MutableなRowの代わりの概念(idea) • Rowから魂(Phantom)を抜き出す • Phantomは実体を持たないので柔軟(?) • Phantomには干渉はできても見えない • Phantomをこねくり回してDBに反映!
27.
Iteratorサポート • DBD::mysqlでは基本的にレスポンスをすべて ローカルにバッファする • mysql_use_resultで制御 •
もう少しわかりやすいAPIを提供したい • メモリアロケーションが少なくなる工夫をし たい
28.
まとめ
29.
まとめ • ORMはパーフェクトじゃない • つらみはたくさん •
とはいえつらみと向き合って変えていくこと が必要 • Aniki 1.0まででもある程度解消した • Aniki 2.0ではもっとつらみを減らしたい
30.
ざっつ おーる
31.
えにーくえっしょん?
32.
Q. いつ2.0だすの A. 2018年前半には… (やる気しだい)
33.
Q. 一番やる気ある機能は? A. Lint作ってる
34.
Anikiは開発者を 絶賛募集しております
35.
あなたとAniki いますぐcontribute!
36.
さんきゅーふぉありすにんぐ ベストトークよろ
Download now