SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Aniki::Internal
Report
karupanerura
Follow
Software Developer at D
Jun. 20, 2017
•
0 likes
•
7,824 views
1
of
18
Aniki::Internal
Jun. 20, 2017
•
0 likes
•
7,824 views
Download Now
Download to read offline
Report
Engineering
Okinawa.pm #5
karupanerura
Follow
Software Developer at D
Recommended
The plan of Aniki 2.0
karupanerura
4.4K views
•
36 slides
コンテキストと仲良く
karupanerura
3.3K views
•
38 slides
20191030 RPA makes us Anything.
riscurred
501 views
•
19 slides
Functional Programming in Scala #4-1
Yoshihiro Shimizu
423 views
•
12 slides
サイタマッパー活動報告2015
Kazuho Ohta
488 views
•
41 slides
Perl5 on Perl6
まさあき さいとう
604 views
•
17 slides
More Related Content
What's hot
【東京】ドコモのAIエージェント基盤「セバスチャン」勉強会【#1】資料
Nishida Kansuke
2.4K views
•
74 slides
Rails5β + herokuで遊んでみた
shota miyazaki
1.6K views
•
13 slides
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Hideyuki TAKEI
13.2K views
•
27 slides
2016 03 05_yokohama_north
Ryo Tomidokoro
453 views
•
25 slides
RubyとRailsのおいしい使い方 ver. okayama1
Satomi Tsujita
1.1K views
•
21 slides
Javaから見たRubyの世界
Takafumi Yoshida
929 views
•
23 slides
What's hot
(6)
【東京】ドコモのAIエージェント基盤「セバスチャン」勉強会【#1】資料
Nishida Kansuke
•
2.4K views
Rails5β + herokuで遊んでみた
shota miyazaki
•
1.6K views
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Hideyuki TAKEI
•
13.2K views
2016 03 05_yokohama_north
Ryo Tomidokoro
•
453 views
RubyとRailsのおいしい使い方 ver. okayama1
Satomi Tsujita
•
1.1K views
Javaから見たRubyの世界
Takafumi Yoshida
•
929 views
Viewers also liked
Aniki has come
karupanerura
4.1K views
•
40 slides
Optimize perl5 code for perfomance freaks
karupanerura
5K views
•
35 slides
DateTimeX::Moment
karupanerura
933 views
•
61 slides
The Crystal language *recently* update
karupanerura
776 views
•
32 slides
router-simple.cr
karupanerura
1.7K views
•
18 slides
TIme::Moment+Time::Strptime=
karupanerura
2.2K views
•
21 slides
Viewers also liked
(6)
Aniki has come
karupanerura
•
4.1K views
Optimize perl5 code for perfomance freaks
karupanerura
•
5K views
DateTimeX::Moment
karupanerura
•
933 views
The Crystal language *recently* update
karupanerura
•
776 views
router-simple.cr
karupanerura
•
1.7K views
TIme::Moment+Time::Strptime=
karupanerura
•
2.2K views
Similar to Aniki::Internal
Yapc fukuoka crust
Tokuhiro Matsuno
2.5K views
•
24 slides
Testing in Sinatra
Uchio Kondo
6.3K views
•
35 slides
PerlのTwitterモジュールの紹介 #twtr_hack
鉄次 尾形
2.6K views
•
40 slides
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
35.6K views
•
43 slides
Aniki - The ORM as our great brother.
karupanerura
2.2K views
•
56 slides
Gotanda.pmの紹介
karupanerura
1.2K views
•
16 slides
Similar to Aniki::Internal
(20)
Yapc fukuoka crust
Tokuhiro Matsuno
•
2.5K views
Testing in Sinatra
Uchio Kondo
•
6.3K views
PerlのTwitterモジュールの紹介 #twtr_hack
鉄次 尾形
•
2.6K views
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
•
35.6K views
Aniki - The ORM as our great brother.
karupanerura
•
2.2K views
Gotanda.pmの紹介
karupanerura
•
1.2K views
Project Sumatra - JavaOne2012報告会 #j1rep
Yuji Kubota
•
1.5K views
openpear の紹介
Keisuke SATO
•
410 views
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
•
52.8K views
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
Developers Summit
•
3.3K views
Proof Summit 2012
Sosuke MORIGUCHI
•
755 views
GarumとMeteoriteと私 3nd Edition ver0.04
Shinobu Okano
•
1.5K views
PDP-11のインタプリタを作った話
kanorimon
•
14K views
libpgenでパケット操作
slankdev
•
5.4K views
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
Narimichi Takamura
•
2.6K views
私は如何にしてUpl
Tohru Shinohara
•
1.6K views
Scala Matsuri 2016コミュニティセッション
Yoshiteru Takeshita
•
694 views
なぜ私はソニックガーデンのプログラマに転身できたのか?(Short ver.)
Junichi Ito
•
1.9K views
anything-php-funcref-perl.el
Kenichirou Oyama
•
677 views
JavaOne2014参加報告LT
諭 岡野
•
1.8K views
More from karupanerura
Perl5 VS JSON
karupanerura
1.3K views
•
33 slides
KOWAZA for mackerel
karupanerura
3.4K views
•
36 slides
Technology for reduce of mistakes - うっかりをなくす技術
karupanerura
9.7K views
•
103 slides
Why we use mruby with Perl5?
karupanerura
4.7K views
•
24 slides
はかたの塩
karupanerura
948 views
•
5 slides
すいすいSwift
karupanerura
1.9K views
•
46 slides
More from karupanerura
(20)
Perl5 VS JSON
karupanerura
•
1.3K views
KOWAZA for mackerel
karupanerura
•
3.4K views
Technology for reduce of mistakes - うっかりをなくす技術
karupanerura
•
9.7K views
Why we use mruby with Perl5?
karupanerura
•
4.7K views
はかたの塩
karupanerura
•
948 views
すいすいSwift
karupanerura
•
1.9K views
Perlにおけるclass実装パターン
karupanerura
•
1.9K views
モジュール開発におけるぼくの試行錯誤
karupanerura
•
4.2K views
Perl5 meta programming
karupanerura
•
3.7K views
mysqlcasual6-next-key-lock
karupanerura
•
12.4K views
dwangocpp1-lt
karupanerura
•
1.7K views
engineer-life
karupanerura
•
773 views
若手Itエンジニア飲み会-LT
karupanerura
•
950 views
Hachioji.pm #40
karupanerura
•
736 views
Hachioji.pm #39
karupanerura
•
579 views
perl5の日付時刻処理とか
karupanerura
•
2.7K views
Yapc asia-2012-lt-thon
karupanerura
•
1.6K views
ぼくがかんがえたさいきょうのMvc
karupanerura
•
14.1K views
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
karupanerura
•
3.9K views
Teng tips
karupanerura
•
1.5K views
Aniki::Internal
1.
Aniki::Internal id:karupanerura Okinawa.pm #5
2.
だれ • id:karupanerura (Twitter/Hatena/Github) •
Japan Perl Association / DeNA • Perl/XS/Go/Crystal/Swift/Java/etc.. • CPAN Author • Gotanda.pm / Mackerel UG Organizer
3.
はじめに • このトークでは一般的なORMの実装と対比し てAnikiの実装について語ります • スライドでは大まかな概要だけ説明します •
コードリーディングが中心なのでよくわから ないなと思ったら積極的にdan the interraptionをお願いします
4.
あじぇんだ • Anikiとは • パフォーマンス向上のためのtips •
ソースコードを追う • まとめ
5.
Anikiとは YAPC::Hokkaido 2016 Sapporo https://speakerdeck.com/karupanerura/lai-rigaifalsearuorm-aniki-che-di-jie-shuo
6.
パフォーマンス向上のための tips
7.
パフォーマンスを阻害するもの • 実行される回数が多い処理 • 複雑な処理 •
外部要因に依存する処理
8.
実行される回数が多い処理 • ライブラリ機能そのものの呼び出しも含む • 少なくとも
O(n) になる • 1回で良い処理は1回だけにしたいところ • とはいえ過度な最適化は可読性を損ねる
9.
複雑な処理 • 一般的に計算量の多い処理 • アルゴリズムやデータ構造を工夫して計算量 を減らそう •
ソフトウェアエンジニアリングの基礎大事 • XSというかCつよい人はメモリアクセスやア ロケーションの最適化まで考えるとよいやも
10.
外部要因に依存する処理 • I/Oやロックなど • 慣れていないと見落としがち •
モジュールの動的ロードなども • ただし、PerlのORMという文脈だと現状では あまり見る意味がない
11.
Aniki開発時の課題 • 外部ライブラリにがっつり依存することを決 めていた • 外部ライブラリは計算量がわからない •
インターフェースは同じでも実装は変わる • よく参照されるメソッドの結果をキャッシュ したい(キャッシュして良いものは)
12.
SQL::Translator::Schema • SQL::TranslatorのSchemaクラス • Schemaのメタオブジェクトとして利用 •
get_table/get_fieldsなどが割と遅い • 独自クラスから移譲しつつキャッシュしよう • Aniki::Schema 爆誕!
13.
Aniki->setup • 設定や動作条件の違いを吸収 • 最適化したメソッドをセットアップ •
Schemaのwrapやlast_insert_idなど • row classなども
14.
$aniki->select • prepare_cachedがデフォルト • クエリの順序を標準化 •
Aniki::QueryBuilder::Canonical • キャッシュヒット率向上 • クエリキャッシュにも優しい
15.
実際に ソースを みていきましょう
16.
Githubにあります https://github.com/karupanerura/Aniki 読んでいきましょう
17.
まとめ
18.
まとめ • Anikiはいろいろ実装工夫してます • つかってくれるとうれしい