Django REST Framework におけるAPI実装プラクティス(芝田 将) - PyCon JP 2018

1
でんぞう @denzowill

#pyconjp #pyconjp_3 相対位置指定のページネーションのデータ矛盾わかる。ページネーション中にリソース増減すると。。。

2018-09-17 14:38:22
Kazutaka Matsumoto @_mkazutaka

・REST Frameworkの提供するページネーション - PageNumberPagination: ?page=4 - LimitOffsetPagination: ?limit50&offset=250 - CursorPagination: ?cursor=cj0xhogehogei: - 特定のリソースIDよりも前or後のもの #pyconjp_3 #pyconjp

2018-09-17 14:38:48
凪夜(なぎや) @Ya_Gi_NA

相対位置指定の弱点: - データ内容の変化に弱い(ズレる) #pyconjp_3 #pyconjp

2018-09-17 14:39:23
ぷろぷろ @ProletariatPro

#pyconjp #pyconjp_3 ページネーション中にデータが変わると矛盾するって、自分なら仕方ないですねで済ませちゃいそうw

2018-09-17 14:39:44
カントク @uokada

これデータが増えた時に問題になる時限爆弾だよね。 #pyconjp #pyconjp_3

2018-09-17 14:42:04
凪夜(なぎや) @Ya_Gi_NA

相対位置指定の弱点2: - DBが参照するエリアが広くなる(頭から数える) - 絶対位置指定は既に頭が指定されている #pyconjp_3 #pyconjp

2018-09-17 14:42:17
matoba @mtb_beta

#pyconjp_3 相対値指定だとスキャンする範囲が広いのよね。

2018-09-17 14:43:02
npub1hqmrddql4em63chfs02x8cx86alrdss9m4kxevpjzwwgc @ryu22e

CursorPagenationだとデータの増減によって表示されなかったり2回表示されるケースを防げる。また、DBのスキャン範囲を必要なものだけに絞ることができる。 #pyconjp #pyconjp_3

2018-09-17 14:43:04
でんぞう @denzowill

#pyconjp #pyconjp_3 これはISUCONでよく見るやつや (idを特定して、それでwhereに指定する

2018-09-17 14:44:01
ぷろぷろ @ProletariatPro

#pyconjp #pyconjp_3 SQLを分けることで効率が上がる可能性がある。 IDだけ取ってidでinするとインデックスが使えて早い!

2018-09-17 14:44:36
凪夜(なぎや) @Ya_Gi_NA

相対位置指定弱点カバー法: - DBの参照を改善する - 頭のIDを取得する #pyconjp_3 #pyconjp

2018-09-17 14:44:55
カントク @uokada

ここまでほとんどRDBMS(MySQL)の話だ #pyconjp #pyconjp_3

2018-09-17 14:44:57
matoba @mtb_beta

#pyconjp_3 MySQLって主キーで絞ると高速化するよね

2018-09-17 14:46:03
ぷろぷろ @ProletariatPro

プログレッシブ・プロレタリアートを略してぷろぷろらしいです。 Web系 Django/AWS/泥縄解決 クオリティフィルター入れているのでメンション見えない可能性あります フォロー外からのDMは全部botだと思って全然見逃してます。。。色々すみません

https://t.co/jr76wgEfFy

showwin @showwin

ページネーションのパフォーマンスチューニングの話をしていて、ISUCON対策っぽい笑 #PyConJP #pyconjp_3

2018-09-17 14:46:50
ごうじん @gaujin_jp

「カバリングインデックス」めもめも #pyconjp #pyconjp_3

2018-09-17 14:48:13
showwin @showwin

絶対位置指定ページネーションの方がキャッシュしやすいから、ガンガンリクエストくるならこっちだよね〜 キャッシュのヒット率の話も聞きたかった。 #pyconjp_3

2018-09-17 14:51:19
凪夜(なぎや) @Ya_Gi_NA

APIリクエスト制限: - late_limit - 実装せずとも行えるアプローチ #pyconjp_3 #pyconjp

2018-09-17 14:51:31
H. NOMATA @hiromichinomata

CursorPagination、idでsortされてるとかでないと行削除された瞬間データとれなくなるのでは #pyconjp_3 #pyconjp

2018-09-17 14:51:44
matoba @mtb_beta

#pyconjp_3 IPアドレスベースなら、CDNでブロックできる。

2018-09-17 14:52:07
ぷろぷろ @ProletariatPro

#pyconjp #pyconjp_3 APIのリクエスト制限の方法 CDNで制限かけれるらしい。。。 がcloudfrontの例は出てこなかった

2018-09-17 14:52:09
凪夜(なぎや) @Ya_Gi_NA

CDN(外部実装): - 必要とするリクエスト制限の限度次第で使い分け #pyconjp_3 #pyconjp

2018-09-17 14:52:28
matoba @mtb_beta

#pyconjp_3 リバースプロキシでrete-limitをある程度かけられるらしい。

2018-09-17 14:52:35