タグ

ブックマーク / mixiengineer.hatenablog.com (14)

  • 技術的負債を減らす - mixi engineer blog

    こんにちは、システム部長の松岡です。 はじめに 今回はミクシィの物作りの中で、技術的な負債を返済する取り組みの一つについてご紹介します。 ミクシィは2012年8月にユニット制に移行しました。これはユーザーファーストな開発を促進するための挑戦です。 裁量権が各ユニット長に落ちることで早い判断と実施が可能になります。 反面、ソースコードがユニットごとに完全に疎結合しているわけではありませんので、早い判断と実施の結果、他のユニットに迷惑がかかるかもしれません。 いつまでも、どの開発者も困らないような開発を進めていければ、問題ないことですが、これまでの開発で負債として溜まってきた事、今後の進め方次第でいずれ行き詰まる事があるとも考えています。 そこで、負債を解消するため or 未来に積まないための対応が必要となります。 ミクシィはとても技術に理解のある会社です。 私含め経営陣から積極的に負債を返

    技術的負債を減らす - mixi engineer blog
    nowokay
    nowokay 2012/12/11
  • データベースの動的デフラグ - mixi engineer blog

    ノートPCの冷却ファンがうるさいのを対処しようとしてWebで調べたら、そのファンの設計者が「静音性へのこだわり」を語ったページにたどり着いて複雑な心境のmikioです。今回は、Tokyo Cabinet(TC)の最新バージョンで実装された動的デフラグ機能について長々と説明します。 断片化とデフラグ 任意のサイズのデータを管理する記憶装置においては、利用可能領域の断片化(fragmentation)の問題が常につきまといます。ファイルシステム上で任意のサイズのファイルを管理する際にも、データベースファイル内で任意のサイズのレコードを管理する際にも、C言語のmalloc/free関数群でメモリの管理をする際にも、様々なレイヤで断片化が起きうるのです。なぜなら、データを削除もしくは移動した際の空き領域を再利用するにあたって、その領域と同じサイズのデータが常に入ってくるとは限らないからです。特にデ

    データベースの動的デフラグ - mixi engineer blog
  • MapReduce on Tyrant - mixi engineer blog

    先日、隅田川の屋形船で花見と洒落込んだのですが、その日はまだ一分咲きも行ってなくて悲しい思いをしたmikioです。今回はTokyo Tyrant(TT)に格納したデータを対象としてMapReduceのモデルに基づく計算をする方法について述べます。 MapReduceとは Googleが使っているという分散処理の計算モデルおよびその実装のことだそうですが、詳しいことはググってください。Googleによる出自の論文やApacheプロジェクトによるHadoopなどのオープンソース実装にあたるのもよいでしょう(私は両者とも詳しく見ていませんが)。 今回の趣旨は、CouchDBMapReduceと称してJavaScriptで実現しているデータ集計方法をTTとTCとLuaでやってみようじゃないかということです。簡単に言えば、以下の処理を実装します。 ユーザから計算開始が指示されると、TTは、DB内の

    MapReduce on Tyrant - mixi engineer blog
  • DBMによるテーブルデータベース その五 - mixi engineer blog

    ついに発売されたスト4のコンシューマ機版をやりたくてしょうがないけど筐体を買ってもらえないので、駅前のゲーム屋のディスプレー前で垂涎するばかりのmikioです。今回は連載の最終回で、各種スクリプト言語を使ってお手軽にテーブルデータベースを操作する方法について説明します。 TokyoCabinet::TDB まずは、TCのPerlバインディングとRubyバインディングの最新版を入手してください。それぞれテーブルデータベースを扱うための TokyoCabinet::TDB というクラスが加わっています。以下のようなIDLによるガイドラインに準拠したインターフェイスが提供されますので、使い方は言語にかかわらず同じようになるはずです。 module TokyoCabinet { interface TDB { boolean open(in string path, in long omode);

    DBMによるテーブルデータベース その五 - mixi engineer blog
  • Google App EngineとMemcache API - mixi engineer blog

    こんにちは、某Perl界隈のIRCチャンネルでPythonがマイブーム的なKY誤爆をしてしまったtmaesakaです。 先日、以前から興味のあったGoogle App EngineとMemcache APIについて少し調べ、こちらに英文で報告したのですが、今日は日語で要約したまとめを紹介します。 まず軽く前置きですがGoogle App Engine (GAE)とは、Googleが提供しているウェブアプリケーションをGoogleのインフラ上でスケーリングや冗長化など、ある程度のノウハウや資金を要求される面倒な事を気にせずに運営できるプラットフォームです。つまり、典型的なPaaSの例であり、サービスの運営コストをelastic(伸縮)にします。昨今バズワード化しつつあるクラウドコンピューティングの一種でもあります。 GAEのインフラはGoogleより提供されているAPIセットを用いて利用し

    Google App EngineとMemcache API - mixi engineer blog
  • DBMによるテーブルデータベース その弐 - mixi engineer blog

    インフルエンザで休んだ影響で仕事が鬼のように溜まって消化不良のmikioです(こんな記事を書いている場合じゃない)。さて今回は、Tokyo Cabinetでリレーショナル風データベースを実現したテーブルデータベース(TCTDB)の実装について説明します。 SQLiteとの違いは? SQLiteはアプリケーション組み込み型のSQL対応リレーショナルデータベースのライブラリです。TCのテーブルデータベースよりもはるかに高機能で、それでいて性能も大変優れています。いわゆるデスクトップアプリケーションに組み込むデータベースをお探しであれば、TCなんかではなく、断然SQLiteがおすすめです。 一方で、TCなどのDBMは、より単純なデータ操作をより高速に実行できるように設計および実装されています。典型的なユースケースとして、大規模Webサイトのアカウント管理や、データマイニングに伴う集計操作が挙げら

    DBMによるテーブルデータベース その弐 - mixi engineer blog
  • DBMによるテーブルデータベース - mixi engineer blog

    正月早々インフルエンザにかかって寝込んだmikioです。電車に乗る時や繁華街などに出る時はマスク着用が必須ですね。さて今回は、Tokyo Cabinetで実装したテーブル方式のデータベースについて紹介します。意外にどうして強力な機能なので、このネタは連載することを予告します。 テーブルデータベースとは 簡単に言えば、リレーショナルデータベースのテーブルのように、複数の列からなるレコードを格納できるデータベースです。SQLや表結合などの複雑な機能はサポートしませんが、そのぶん高速に動作します。つまり、DBMの速度で動くリレーショナル風データベースです(厳密にはリレーショナルデータベースではありません)。 TCの基となるハッシュデータベースは、単純なkey/value型のデータベースであり、つまりキーにも値にもスカラ(数値や文字列などの特に構造を持たない単一の値)しか格納することはできません

    DBMによるテーブルデータベース - mixi engineer blog
  • mixiアプリはじめました - mixi engineer blog

    コードは掲載しないmilanoです。 こんにちは。 先週のことになりますが、以前紹介したOpenSocialプラットフォーム(通称:mixiアプリ)をパートナー企業向けにリリースしました。 プラットフォーム開発チームのメンバーたちに++です。 同時に、mixi Developer Centerもプチリニューアルし、mixiアプリの情報を公開し始めました。 早速いくつものメディアに取り上げていただいています。 「mixiアプリ」、パートナー企業募集スタート - ITmedia News mixiアプリ、パートナー向けにベータ公開:ニュース - CNET Japan 「mixi アプリ」ベータ版が公開。今後は個人開発者にも公開予定 - BB Watch ありがとうございます。 当初はパートナー企業向けですが、そのうち個人の開発者にも公開を考えているようです。個人の方はもうちょいお待ちください。

    mixiアプリはじめました - mixi engineer blog
  • mixiの年末年始対策 日記投稿システムの改善 - mixi engineer blog

    朝晩冷えてきましたね。風邪など引いていませんでしょうか。さて、年末が近づいてくるこの時期に弊社のエンジニアが最も気になるのは、お正月。それも来年1月1日を迎えた瞬間です。 1日1日0時に何があるのでしょう?そう、mixiのサービスで最も日記が書き込まれるタイミングになるのです。個人的に「あけおめことよろアタック」と呼んでいます。今年は日記だけではなく、エコーでもメッセージが飛び交うことでしょう。この時期は携帯電話のキャリアでもさまざまな対策を行っていますが、ミクシィでも年末年始でもユーザの方に快適にサービス提供ができるように努めています 以下は昨年の年末年始の日記投稿数の推移です。青色が12/31から1/1、赤色が1/1から1/2になります 1/1の方が全体的に多いですが、特に年が変わる前後の投稿数は倍近くなっていることがわかります。この時に負荷により日記の投稿がしづらい状態になっていたの

    mixiの年末年始対策 日記投稿システムの改善 - mixi engineer blog
    nowokay
    nowokay 2008/12/14
    高負荷にシーケンス値の生成が耐えられない話
  • DBMによるデータベースサーバ - mixi engineer blog

    DSのスターフォックスというゲームにはまりまくりのmikioです。最近社内外で「俺ストレージサーバ」を作るのが流行っているようなので私も参戦してみました。今回はDBMのネットワーク層をほぼスクラッチで作った話をします。 Tokyo Tyrant Tokyo Tyrant(以下TT)はTokyo Cabinet(以下TC)をラップしてネットワーク越しに操作できるようにするツールです。キャビネット(内閣)を傀儡にするタイラント(僭主)ということで名付けました。ダウンロードはこちら。 TCは高性能なDBMで、マルチスレッドモデルで高い並列性を実現していますが、逆にマルチプロセスモデルだとファイルロックがかかるので並列性が低くなってしまいます。つまり、書き込みモードでデータベースにアクセスしているプロセスがいると、その間は他のプロセスがデータベースに接続しようとするとブロックされることになります。

    DBMによるデータベースサーバ - mixi engineer blog
  • mixi Engineers’ Blog » Tokyo Tyrantによる耐高負荷DBの構築

    連休中はWiiのマリオカートをやりまくってやっとVR7000越えたmikioです。愛車はマッハ・バイクとインターセプターです。さて今回は、分散ハッシュデータベースサーバTokyo Tyrantでmixiの最終ログイン時刻を管理するようにした時の苦労話を書きます。 ログイン処理は負荷地獄 mixiでは、全てのユーザについて、各々の最終ログイン時刻を管理しています。「マイミクシィ一覧」や「お気に入り」などの画面で、友人が近い時間にログインしていてコミュニケーションがとりやすい状態にあるかどうか確認できるようにするためです。 mixiのほぼ全てのページはログインしないと見られないページなので、ほぼ全てのページにアクセスされるたびにログイン確認が行われます。したがって、最終ログイン時刻はほぼ全てのページにアクセスされる度に更新されることになります。mixiの中で最も重いデータベースのひとつとして「

    mixi Engineers’ Blog » Tokyo Tyrantによる耐高負荷DBの構築
  • mixi Engineers’ Blog >> 言語バインディングを書こう その弐

    東京ディズニーシーで買ってきたDuffyというテディベアがお気に入りで、頭に載せて寝るとよく眠れることを発見してウキウキのmikioです。さて今回は、Tokyo Cabinet(TC)のJavaバインディングとLuaバインディングの作り方と使い方について紹介します。 Javaバインディング TCのJavaバインディングの初版は昨年11月には出ていて別に新しい話題でもないのですが、以前とりあげた言語バインディングの記事ではJavaについて解説しなかったので、ここで改めてとりあげます。なお、この解説ででてくるサンプルコードを試すべく、環境変数「CLASSPATH」と環境変数「LD_LIBRARY_PATH」にカレントディレクトリを含めてください。 CLASSPATH=. LD_LIBRARY_PATH=. export CLASSPATH LD_LIBRARY_PATH Javaバインディング

    mixi Engineers’ Blog >> 言語バインディングを書こう その弐
  • mixi Engineers’ Blog » 期間限定の新機能「エコー」登場

    こんにちは。mixi開発部のyouheiです。 今回は先日8月4日にリリースした「エコー」について書きたいと思います。 エコーとは まずはエコーとはどういう機能かのご紹介ですが、プロモーションページがございますのでそちらをご覧いただければ幸いでございます。 http://mixi.jp/guide_echo.pl いくつか抜粋しますと、 あなたの"今"を一言にしてみませんか?誰かに伝えたいこと、ひとりごと等、何でもOK! 気軽な新コミュニケーション機能です。 たとえば、「今日はいい天気だな〜」という、ひとりごとから、「お腹すいたー!誰かランチにいこうよ!」というメッセージ的な使い方まで、「エコー」の楽しみ方はあなた次第! マイミクシィ同士で「エコー」を使うとホームにお互いの書きこみが表示されます。 気になった書きこみには、返信することもできちゃいます。あなたがふと書きこんだ一言に、思わぬ返

    mixi Engineers’ Blog » 期間限定の新機能「エコー」登場
  • mixi Engineers’ Blog » mixiのスモールワールド性の検証

    初めまして、mixi開発部のfujisawaです。 マイミクシィの友人関係を使って、mixiのスモールワールド性について調べましたので、その結果について書きたいと思います。 スモールワールド性とは スモールワールド性とは、人間関係のネットワークなどでよく見られる性質で、文字通り「世間は狭い(It's a small world!)」ということを表しています。「知り合いを6人介するだけで、世界中の人々と間接的につながることができる」という『6次の隔たり(Six Degrees of Separations)』という言葉でもよく知られています。 一般にスモールワールドは以下の特徴を持っています。 誰に対しても少ない人数を介するだけで到達できる(平均距離が小さい) 自分の友人同士が友人関係にあることが多い(クラスタ性が高い) 1の距離とは、ネットワーク中のノードをたどった回数、すなわち友人を介し

    mixi Engineers’ Blog » mixiのスモールワールド性の検証
  • 1