タグ

ブックマーク / kazuhooku.hatenadiary.org (5)

  • MySQL用にランキング専用ストレージエンジンを作る話 - kazuhoのメモ置き場

    前提: ゲームに限らずランキング機能が必要になるケースは多い つまり需要はある だが、MySQLで高速なランキング表示は難しい 具体的に言うと、以下の要件を満たすのが不可能 1行の更新コストが要素数Nに対して O(log N) 以下 任意のランキング位置周辺のSELECTコストが O(log N) 以下 ならば、専用のストレージエンジンを作ればいいのではないか いつやるか? 今でしょ! 以下理由 MySQL 5.5以降?だとストレージエンジンをまたぐトランザクションがまともになってるはず*1 ランキング専用でいいから、テーブル構造とか固定でいい(つまり実装が簡単!) ランキング専用だから、テーブル・ロックで十分(つまり実装が簡単!) 更新すると順位がずれる(つまりテーブルの大部分に影響がある)ので行ロック実装するメリットが小さい*2 ランキング専用でいいから、全データをメモリにもっても問題

    MySQL用にランキング専用ストレージエンジンを作る話 - kazuhoのメモ置き場
    y-kawaz
    y-kawaz 2013/10/01
    おいww
  • C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場

    そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++プロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する

    C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場
    y-kawaz
    y-kawaz 2012/03/27
    なんだ結局コード書かないといけないのか。
  • TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場

    Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。例えば「www.example.com/ajax.html#!key=value」のサーチエンジン用URLは「www.example.com/ajax.html?_escaped_fragment_=key=value」になる。 TwitterやFacebookはこの仕様に従うことで、Ajax な UISEO を同時に実現している、というわけ。ということを調べたなう。 参照: Getting Started  | 

    TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場
  • ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場

    タイトルは煽り入ってますが。 仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。 そうすると、クアッドコアのアプリケーションサーバで処理できるリクエストは、 4 core * 10 reqs/sec * 86,400 sec/day * 30 day/mon / 2 = 51,840,000 reqs/mon と、約5,000万PV/月を1台で捌けることになる。 CPUが動いている時間は全処理時間の10倍と仮定したわけだから、アプリケーションサーバの最大同時接続数は 4 core * 10 = 40 程度あればいいことになる。実際には、安全係数を2倍かけて 80 とか。リクエストの処理に必要なメモリ量を 100MB とすると、

    ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
    y-kawaz
    y-kawaz 2009/12/27
    ピークが平均の高々2倍なんてサイトはありえるんだろうか…?
  • Q. 1GB の文字列を strlen するのに必要な時間は? - id:kazuhookuのメモ置き場

    1GB の文字列を strlen するのに必要な時間は何秒でしょう? こういったものをぱっと予測できることは、最適化に取り組む上で必要かなぁ、と思ったので、自分の理解が正しいか確認するためにも、実測してみました。 (以下、白地に白文字で書いてあるので、選択して読んでください) 手元の Linux (Pentium 4 @ 3GHz / DDR2-667) では、約 0.48 秒 (2.1GB/sec)。GCC の組み込み程度の strlen では、ボトルネックはメインメモリの帯域あるいはレイテンシではなく、CPU になります。 一方、SSE で記述された strlen *1 を使用すると 0.26 秒 (3.9GB/sec)。こちらはメモリ帯域がボトルネックになっているようで、手元の MacBook (Core 2 Duo @ 2GHz / DDR2-667) でも、ほとんど同じ数値になり

    Q. 1GB の文字列を strlen するのに必要な時間は? - id:kazuhookuのメモ置き場
    y-kawaz
    y-kawaz 2008/10/05
    これは0秒って答えるべきクイズなんだと思ったが違うのか。1GBの文字列って言ってるんだからsrtlenの答えは既にに1GBってわかってるわけだし、とかそういうさ…
  • 1