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

6,788 views

Published on

Okinawa.pm #5

Published in: Engineering
  • I can definitely recommend a website that really helped me with my essay. I found out it was due the day before I had to submit it. Went into full-on panic mode. Worst experience of my senior year by far. It’s called HelpWriting.net. The quality of the writing is passable but the completion rate is super quick. You get to pick your own writer to do your stuff and that’s also a big bonus.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 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はいろいろ実装工夫してます • つかってくれるとうれしい

×