Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aniki::Internal

5,390 views

Published on

Okinawa.pm #5

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Aniki::Internal

  1. 1. Aniki::Internal id:karupanerura Okinawa.pm #5
  2. 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. 3. はじめに • このトークでは一般的なORMの実装と対比し てAnikiの実装について語ります • スライドでは大まかな概要だけ説明します • コードリーディングが中心なのでよくわから ないなと思ったら積極的にdan the interraptionをお願いします
  4. 4. あじぇんだ • Anikiとは • パフォーマンス向上のためのtips • ソースコードを追う • まとめ
  5. 5. Anikiとは YAPC::Hokkaido 2016 Sapporo https://speakerdeck.com/karupanerura/lai-rigaifalsearuorm-aniki-che-di-jie-shuo
  6. 6. パフォーマンス向上のための tips
  7. 7. パフォーマンスを阻害するもの • 実行される回数が多い処理 • 複雑な処理 • 外部要因に依存する処理
  8. 8. 実行される回数が多い処理 • ライブラリ機能そのものの呼び出しも含む • 少なくとも O(n) になる • 1回で良い処理は1回だけにしたいところ • とはいえ過度な最適化は可読性を損ねる
  9. 9. 複雑な処理 • 一般的に計算量の多い処理 • アルゴリズムやデータ構造を工夫して計算量 を減らそう • ソフトウェアエンジニアリングの基礎大事 • XSというかCつよい人はメモリアクセスやア ロケーションの最適化まで考えるとよいやも
  10. 10. 外部要因に依存する処理 • I/Oやロックなど • 慣れていないと見落としがち • モジュールの動的ロードなども • ただし、PerlのORMという文脈だと現状では あまり見る意味がない
  11. 11. Aniki開発時の課題 • 外部ライブラリにがっつり依存することを決 めていた • 外部ライブラリは計算量がわからない • インターフェースは同じでも実装は変わる • よく参照されるメソッドの結果をキャッシュ したい(キャッシュして良いものは)
  12. 12. SQL::Translator::Schema • SQL::TranslatorのSchemaクラス • Schemaのメタオブジェクトとして利用 • get_table/get_fieldsなどが割と遅い • 独自クラスから移譲しつつキャッシュしよう • Aniki::Schema 爆誕!
  13. 13. Aniki->setup • 設定や動作条件の違いを吸収 • 最適化したメソッドをセットアップ • Schemaのwrapやlast_insert_idなど • row classなども
  14. 14. $aniki->select • prepare_cachedがデフォルト • クエリの順序を標準化 • Aniki::QueryBuilder::Canonical • キャッシュヒット率向上 • クエリキャッシュにも優しい
  15. 15. 実際に ソースを みていきましょう
  16. 16. Githubにあります https://github.com/karupanerura/Aniki 読んでいきましょう
  17. 17. まとめ
  18. 18. まとめ • Anikiはいろいろ実装工夫してます • つかってくれるとうれしい

×