タグ

ブックマーク / blog.yappo.jp (9)

  • YappoLogs: なぜ SQL_CALC_FOUND_ROWS や LIMIT OFFSET のページングが良く無いのか

    なぜ SQL_CALC_FOUND_ROWS や LIMIT OFFSET のページングが良く無いのか ここ最近の大規模サービス関連したデータページング考です。 mysql 5.5.34 で試して記事書いてます。 bigdata テーブルは id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) なカラムがある前提です。もちろん InnoDB です。 2014年なんだからCOUNT(*)とかSQL_CALC_FOUND_ROWSとかLIMIT OFFSETのページングはやめようぜ - Togetterまとめが発端にみえるけど、わりと昔から話されてる事なんだけど、「nippondanji SQL_CALC_FOUND_ROWS」でググっても有用な情報ないし文書化されてないからしとく。 ページング処理で使われがちな機能です。 S

  • YappoLogs: 2014年に向けた JSON API の実装の方向性と X-JSON-Status 改め X-API-Status header のご提案

    2014年に向けた JSON API の実装の方向性と X-JSON-Status 改め X-API-Status header のご提案 追記 2014/11/20 14:00:00 わりと JSON やら XML やら各種フォーマットで API を運用している環境がある場合に JSON API の時だけ X-JSON-Status にすると XML とかの時と整合性取れないし、 X-XML-Status みたいのを量産するのは困る的なレビューを頂いたので X-JSON-Status をやめて X-API-Status にしました。 へたに JSON に限定するから REST とか JSON-RPC とかいわれるんや! X-API-Status にしたら全部解決したし MessagePack な API でも使い回せるって songmu さん言ってた! XML とかからどうやって引っこ抜

  • YappoLogs: ISUCON3 で暫定で本戦進出らしいです #isucon

    ISUCON3 で暫定で戦進出らしいです #isucon ISUCON 3 っていう、インターネット系エンジニアが全ての技量を試されるガチンコバトルなイベントがあって、kamipoさんとgfxが「あと1人チームメンバー募集!」って言われたのでふらっとパーティに入って参加してきました。 暫定順位みると、大体11位っぽい? 前日 僕は金曜の深夜に飲みすぎ+生ものに当たって土曜日は寝込んでて日曜も朝からダメだった、gfxもなんか体調悪かった、kamipoさんもなんかあれらしかった。 当日合流前 kamipoさんだけ、素晴らしいオフィスで有名なフリークアウト入り。僕とgfxは最初から遅刻宣言。 開始直後 kamipoさんだけawsアカウントの準備してて現地ついてたらしい。僕らは遅刻って言ったからおにぎりべてたらしい。 合流前 おなかおかしいから、フリークアウトのビルの前でやってた丸しぇに玄米リ

  • YappoLogs: 馬鹿でもわかる Application Server と Reverse Proxy Balancer のお付き合いを考える

    馬鹿でもわかる Application Server と Reverse Proxy Balancer のお付き合いを考える 一般的な Web Application というのはロードバランサ、Webサーバ、アプリケーションサーバという HTTP を喋るサーバで構成されていると思います。 ロードバランサは高級なハードウェアからソフトウェア(lvs, httpd, etc..)で作るものまで色々ありますね。 アプリケーションサーバでは各種言語に合わせた実装でデーモンが常駐してるでしょう。これはいわゆる普通の Web サーバよりは単純なコンテンツを返す性能が低いです。 そんなわけで動的なアプリケーションサーバが有る構成では js や css や画像など静的なファイルは Apache や nginx などの専用の Web サーバでサービスして、動的なリクエストだけバックエンドのアプリケーションを

  • YappoLogs: サービスをつぶさない為に Web アプリを書く時にやっとくと良い事2選

    サービスをつぶさない為に Web アプリを書く時にやっとくと良い事2選 テンプレートのエラーが出た時にアプリケーションのログだけに書くのでは無く、誰にでも「ここがえらってるよ!」って見えるようにしとくと間違いが少なくなる傾向があるのでテンプレートエンジンでフック出来るようになっておいてたら、それをうまく使うと良い。 また、テンプレートエンジンがレンダリングしてるフェーズで DB にクエリが飛ぶような構造で書いてあると、非エンジニアのカジュアルにテンプレートいじる人が甚大なクエリを実装してしまう可能性があるので、これも早期に発見しないとサービスが止まってしまい会社の売り上げが下がってしまい社員が路頭に迷うケースが発生してしまうので、これらも未然に防がなければならない。 Text::Xslate + Amon2 ならこうかける。 package MyProje::Web; ...; { my

  • YappoLogs: jQuery Mobile 所感

    jQuery Mobile 所感 しばらくjQuery Mobileを弄ってて思った事をメモ。まだまだあるふぁ何で色々変わるとおもうけど。 ドキュメントがすくないよママン アルファリリースなんで仕様固まって無い部分もあるから放置され気味なんすかね。 素直に実装読んだ方が速い。 あるふぁ2からあるふぁ3にしたらへんになったよ アルファリリースっていってんだろがカスが! 標準のCSSだけじゃiPhoneアプリっぽくならない 最初からついてるアイコンとかだけだと、良くあるiPhoneアプリの画面になりません。 Sencha Touchつかったほうがその辺充実してる。 テーマカスタマイズして頑張れって事ですかね。 正式リリースしたらテーマ作成ツールとかちゃんと出してくれるみたいだし、しばらく我慢の子。 heaer/footerの位置を固定にしてもなんか変 なんか頑張って実装してるんだけど、スクロー

  • YappoLogs: Plagger::Plugin::Notify::MissileLauncher - Ejectじゃ刺激が足りない人に

    « 電車運行維持のためにぬれ煎を買ってください!!電車修理代を稼がなくちゃ、いけないんです。 | Main | Wiiのリモコンコントローラが飛んだ件 » Plagger::Plugin::Notify::MissileLauncher - Ejectじゃ刺激が足りない人に 実弾発射と姿勢制御可能なUSB接続ミサイルランチャー発売という物が発売されておりますが、これをPlaggerのNotifyとして使おうというプラグインです。 Ejectの動きだけじゃ気づかないよ!って人におすすめです。 package Plagger::Plugin::Notify::MissileLauncher; use strict; use base qw( Plagger::Plugin ); use Device::USB::MissileLauncher; sub register { my($self

  • YappoLogs: HTTP::Cookies::w3m - w3mが保存しているcookieを取り扱う

    HTTP::Cookies::w3m - w3mが保存しているcookieを取り扱う PlaggerにCookie sharing frameworkが導入されたんだけど自分はserver上でPlagger動かしてるから、そのままでは使えなかった。 そこでmiyagawaさんにHTTP::Cookies使って実装してるよ。と言われたのでw3mでもCookie sharing frameworkを使うためにHTTP::Cookies::w3mを実装しました。(local) Plaggerでの設定例 Plaggerだけではなく、ちょっとしたスクレイピングをしたい時でもパスワードの管理を気にしないで作りたい時に有用だと思います。 w3mでちょろっとログインしてからcookieだけを再利用とかね。 HTTP::Cookiesってcookieファイルへの書き込みもサポートしてるのですが、w3mではと

  • YappoLogs: Tagの検索をSenna+MySQLで

    Tagの検索をSenna+MySQLで kazeburoさんの所でfulltext使ってtagを実装するネタがアツめなのでちょろっと書いてみる。 SennaのMySQL 2indパッチを使うと、既存のindexとSennaのindex両方を同時に使うことが出来ます。 それが出来ると何が良いと言うと、user idで絞り込みつつtag検索が可能になります。 create table ft_tags( id int unsigned not null auto_increment primary key, user_id int unsigned not null, tags text, index user_id(user_id), fulltext tags(tags) )というテーブルを用意しておき。 user idが2の人のタグ検索をするときにselect id from ft_tag

  • 1