Giter Site home page Giter Site logo

isucon10-qualify's Introduction

isucon10-qualify

Member

  • @matsu7874
  • @nanae772

Links

Discordより

当日の流れは以下のようになります。

  • 開始時刻である10:00になると、ログイン後の画面にて競技参加者用ページ、当日マニュアルが閲覧可能となります。
  • 開始時刻以後、ログインするとベンチマーク実行がリクエストできるようになります。リクエストはキューイングされ順次実行されますが、1チームひとつしかリクエストできません。
  • 予選終了時刻 18:00以降のベンチマーク実行結果はすべて無効となります。
  • ベンチマーク実行対象のサーバーは運営よりチームへ割り当てられているものから都度選択できます。
  • 終了後の追試に関しては最後にベンチマーク実行対象として利用したサーバに対して行われます。主催者による確認作業のため、任意のタイミングで再起動などが行われ、作業中の場合はサーバの状態が壊れる可能性がありますがそのような状況となっても主催者による救済措置はありません
  • 予選問題の内容などの公開は 9月12日(土) 18:00 まではくれぐれも行わないでください。これは予選用のコードや設定を GitHub の公開リポジトリにアップロードする行為を含みます

isucon10-qualify's People

Contributors

matsu7874 avatar nanae772 avatar

isucon10-qualify's Issues

select_row の改善案

呼ばれている部分がそもそも一行しか取らないところだったので、修正しても効果はあまり無いかもしれません

# select_allしてからその先頭を返す
# いかにも効率が悪そう
# これって順序は保証されているんだろうか…?
def select_row(*args, **kwargs):
    rows = select_all(*args, **kwargs)
    return rows[0] if len(rows) > 0 else None

bot からのリクエストにnginxで503を返す

bot からのアクセスはコンバージョンに繋がらないため、弾くことが仕様として決定しましたが、まだ実装されていません。 bot は User-Agent が以下の正規表現にマッチする形式 であり、このリクエストに対して 503 Service Unavailable を返すことが許可されています。 これに対するベンチマーカーからの減点は発生しません。

/ISUCONbot(-Mobile)?/
/ISUCONbot-Image\//
/Mediapartners-ISUCON/
/ISUCONCoffee/
/ISUCONFeedSeeker(Beta)?/
/crawler \(https:\/\/isucon\.invalid\/(support\/faq\/|help\/jp\/)/
/isubot/
/Isupider/
/Isupider(-image)?\+/
/(bot|crawler|spider)(?:[-_ .\/;@()]|$)/i

ベンチマーク

389点のログ

alp ltsv --sort=sum --file ./access.ltsv -m "/api/estate/\d+","/api/recommended_estate/\d+","/api/chair/\d+","/api/chair/buy/\d+","/api/estate/req_doc/\d+"
+-------+-----+-----+-----+-----+-----+--------+------------------------------+-------+-------+---------+-------+-------+-------+-------+--------+-----------+-----------+-------------+-----------+
| COUNT | 1XX | 2XX | 3XX | 4XX | 5XX | METHOD |             URI              |  MIN  |  MAX  |   SUM   |  AVG  |  P1   |  P50  |  P99  | STDDEV | MIN(BODY) | MAX(BODY) |  SUM(BODY)  | AVG(BODY) |
+-------+-----+-----+-----+-----+-----+--------+------------------------------+-------+-------+---------+-------+-------+-------+-------+--------+-----------+-----------+-------------+-----------+
|     1 |   0 |   1 |   0 |   0 |   0 | GET    | /                            | 0.000 | 0.000 |   0.000 | 0.000 | 0.000 | 0.000 | 0.000 |  0.000 | 21745.000 | 21745.000 |   21745.000 | 21745.000 |
|     1 |   0 |   1 |   0 |   0 |   0 | POST   | /api/chair                   | 0.268 | 0.268 |   0.268 | 0.268 | 0.268 | 0.268 | 0.268 |  0.000 |    17.000 |    17.000 |      17.000 |    17.000 |
|     1 |   0 |   1 |   0 |   0 |   0 | POST   | /api/estate                  | 0.272 | 0.272 |   0.272 | 0.272 | 0.272 | 0.272 | 0.272 |  0.000 |    17.000 |    17.000 |      17.000 |    17.000 |
|   112 |   0 | 112 |   0 |   0 |   0 | GET    | /api/chair/search/condition  | 0.000 | 0.040 |   0.572 | 0.005 | 0.040 | 0.008 | 0.008 |  0.007 |   957.000 |   957.000 |  107184.000 |   957.000 |
|   145 |   0 | 145 |   0 |   0 |   0 | GET    | /api/estate/search/condition | 0.000 | 0.032 |   0.900 | 0.006 | 0.012 | 0.004 | 0.008 |  0.008 |   887.000 |   887.000 |  128615.000 |   887.000 |
|   283 |   0 | 283 |   0 |   0 |   0 | POST   | /api/estate/req_doc/\d+      | 0.004 | 0.040 |   1.456 | 0.005 | 0.008 | 0.004 | 0.000 |  0.005 |    17.000 |    17.000 |    4811.000 |    17.000 |
|   109 |   0 | 109 |   0 |   0 |   0 | POST   | /api/chair/buy/\d+           | 0.004 | 0.472 |   2.360 | 0.022 | 0.004 | 0.472 | 0.004 |  0.045 |    17.000 |    17.000 |    1853.000 |    17.000 |
|   225 |   0 | 223 |   0 |   2 |   0 | GET    | /api/chair/\d+               | 0.004 | 0.152 |   3.336 | 0.015 | 0.052 | 0.008 | 0.012 |  0.016 |   209.000 |   523.000 |   99668.000 |   442.969 |
|   540 |   0 | 539 |   0 |   1 |   0 | GET    | /api/estate/\d+              | 0.004 | 0.164 |   4.160 | 0.008 | 0.164 | 0.008 | 0.000 |  0.015 |   209.000 |   571.000 |  271348.000 |   502.496 |
|     1 |   0 |   1 |   0 |   0 |   0 | POST   | /initialize                  | 4.292 | 4.292 |   4.292 | 4.292 | 4.292 | 4.292 | 4.292 |  0.000 |    58.000 |    58.000 |      58.000 |    58.000 |
|    60 |   0 |  56 |   0 |   4 |   0 | POST   | /api/estate/nazotte          | 0.055 | 2.001 |  24.463 | 0.408 | 0.452 | 0.152 | 0.273 |  0.436 |     0.000 | 13073.000 |  318236.000 |  5303.933 |
|   221 |   0 | 221 |   0 |   0 |   0 | GET    | /api/recommended_estate/\d+  | 0.068 | 0.908 |  34.928 | 0.158 | 0.632 | 0.132 | 0.220 |  0.097 |  5484.000 |  5925.000 | 1255441.000 |  5680.729 |
|   311 |   0 | 311 |   0 |   0 |   0 | GET    | /api/estate/low_priced       | 0.056 | 0.608 |  37.452 | 0.120 | 0.236 | 0.080 | 0.136 |  0.053 |  5632.000 |  5632.000 | 1751552.000 |  5632.000 |
|   311 |   0 | 311 |   0 |   0 |   0 | GET    | /api/chair/low_priced        | 0.064 | 0.620 |  39.368 | 0.127 | 0.272 | 0.088 | 0.112 |  0.056 |  4735.000 |  4735.000 | 1472585.000 |  4735.000 |
|   671 |   0 | 668 |   0 |   3 |   0 | GET    | /api/chair/search            | 0.092 | 0.924 | 126.112 | 0.188 | 0.252 | 0.180 | 0.288 |  0.081 |     0.000 |  6893.000 | 3740030.000 |  5573.815 |
|   868 |   0 | 866 |   0 |   2 |   0 | GET    | /api/estate/search           | 0.053 | 0.920 | 150.539 | 0.173 | 0.224 | 0.148 | 0.260 |  0.073 |     0.000 | 12381.000 | 5980760.000 |  6890.276 |
+-------+-----+-----+-----+-----+-----+--------+------------------------------+-------+-------+---------+-------+-------+-------+-------+--------+-----------+-----------+-------------+-----------+

殆どの時間を /api/estate/search/api/chair/search に使っている。

get_recommended_estate の検索条件を改善

椅子がドアを通るかを判定している部分、コメントにつけたような改善が出来そう

    query = (
        "SELECT * FROM estate"
        " WHERE (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の幅, ドアの高さ >= 椅子の高さ
        "    OR (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の幅, ドアの高さ >= 椅子の奥行
        "    OR (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の高さ, ドアの高さ >= 椅子の幅
        "    OR (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の高さ, ドアの高さ >= 椅子の奥行
        "    OR (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の奥行, ドアの高さ >= 椅子の幅
        "    OR (door_width >= %s AND door_height >= %s)" # ドアの幅 >= 椅子の奥行, ドアの高さ >= 椅子の高さ
        # まず w, h, d をソートして w <= h <= d である状態にしておく、一番長いところは明らかに使わないほうが良いので
        # w, h だけ考えればよくなる
        # w <= h より 
        # w >= min(door_width, door_height)
        # h >= max(door_width, dorr_height)
        # であることだけを確かめればよい?(要検証)
        " ORDER BY popularity DESC, id ASC"
        " LIMIT %s"
    )
    estates = select_all(query, (w, h, w, d, h, w, h, d, d, w, d, h, LIMIT))

/api/estate/nazotte が重い(timeoutする)

{"pass":true,"score":392,"messages":[{"text":"POST /api/estate/nazotte: リクエストに失敗しました (タイムアウトしました)","count":1}],"language":"python"}

処理の概要

  • 複数の地点が与えられる(coordinates)
  • それら全てを含むような最小の長方形を作る(bounding_box)
  • bounding_boxに含まれる全ての不動産を取る
  • その中からさらにcoordinatesから得られるPolygonに含まれるものだけを取る
  • 得られた不動産を人気降順に、NAZOTTE_LIMIT(=50)件まで返す

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.