タグ

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

  • オレオレ検索窓を設置しよう - mixi engineer blog

    まだピクミン2をクリアしてないのでケジメ的に新作ゲームを買えないmikioです。今回は、Tokyo Cabinetを使って激烈簡単に特定サイトの専用の検索機能を設置する方法について説明します。クローリングから検索までを10分くらいの作業で可能にします。 特定サイトの検索エンジン Web全体の検索機能を作るのは、途方もない技術力と設備を持っているGoogleMicrosoftなどのビッグプレーヤでないと難しいのが現実です。でも、自分が気に入っているいくつかのサイトを対象とした検索エンジンを作るのであれば個人だってできます。また、インターネットから手が届かないイントラネットのコンテンツの検索機能は自分達で手がけないと構築できません。 ということで、企業用の検索システムが数多く売られていますし、LuceneやGroongaやHyper Estraierなどのオープンソース製品も世に多数存在しま

    オレオレ検索窓を設置しよう - mixi engineer blog
    pitworks
    pitworks 2009/07/16
  • MySQLのInnoDBでのデッドロック - mixi engineer blog

    こんにちは、mixi開発部にてアプリケーション開発をしていますyouheiです。 今回は、MySQL-5.0.45のInnoDBで連番を管理するテーブルのパフォーマンス測定をしていたのですが、その際に少し変わったデッドロック問題に遭遇しましたので、そのあたりをネタとして書いてみたいと思います。 まずは、今回使用したデータベースのスキーマは下記のようなものです。 CREATE TABLE num ( id bigint unsigned NOT NULL default '0' ) Engine=InnoDB; AUTO_INCREMENTは使用していません。 そこに1レコードだけ登録します。 INSERT INTO num (id) values (1); そして実際連番を取得する際には、 UPDATE num SET id = LAST_INSERT_ID(id+1); といったクエリを

    MySQLのInnoDBでのデッドロック - mixi engineer blog
  • memcached-1.4 RCをつかってみよう - mixi engineer blog

    数日前にmemcached-1.4のリリース候補が出ましたので、今日はその最新版と、それを使ったメモリ節約の運用法を紹介します。厳密にいうと、ご紹介させていただくmemcachedのメモリ節約機能は1.3のbetaから存在し、過去にこちらで取り上げました。 memcached-1.4.0-rc1 1.4 RCは基的に1.3.* betaで発見・報告されたバグの修正やコードベースの改修が主な内容です。詳しいリリースノートはこちらになります。 http://code.google.com/p/memcached/wiki/ReleaseNotes140rc1 ダウンロードはこちらです。 http://code.google.com/p/memcached/downloads/list 新しいバージョンのmemcachedはバイナリプロトコルの導入以外に地味に生まれ変わっています。例えばコード

    memcached-1.4 RCをつかってみよう - mixi engineer blog
  • データベースの動的デフラグ - 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
  • MySQLに対するDrizzleの答え #1 スレッド管理編 - mixi engineer blog

    先日、Drizzleのスレッド管理を担うコアの一部分がモジュール化され、勉強がてらMySQLのスレッド管理の設計を調べてみました。その時のメモ(だから文が少し固いかも)と、Drizzleでの戦略を今回のエントリーで公開します。 最後のDrizzleでは?セクションまではプログラミングの教科書に載っている様な典型的なセオリを述べているだけなので、MySQLのインターナルに詳しい方は最後まで飛ばした方が良いかもしれません。 ちなみにソースはMySQL 5.1とMySQL 6.0のドキュメントです http://dev.mysql.com/doc/refman/6.0/en/connection-threads.html http://dev.mysql.com/doc/refman/5.1/en/connection-threads.html 現在の仕組みと制限 現在のMySQLでは新たなクラ

    MySQLに対するDrizzleの答え #1 スレッド管理編 - mixi engineer blog
  • DBMによるテーブルデータベース その参 - mixi engineer blog

    最近、忙しさを理由に英会話レッスンをサボりがちになってよろしくないなと猛省するmikioです。今回は、Tokyo CabinetのテーブルデータベースをTokyo Tyrantを使ってデータベースサーバとして利用する方法について述べます。 とりあえず使ってみる Tokyo CabinetとTokyo Tyrantの最新版(1.4.4と1.1.12)がリリースされていますので、インストールしておいてください。またも社員名簿を作ってみましょう。まずは、TTのサーバを実行します。データベースファイルの接尾辞には「.tct」を指定して、テーブルデータベースファイルと接続します。 ttserver casket.tct 別の端末でクライアントを操作して、"put" コマンドで社員を登録しましょう。「-sep」は、コラムのキーと値を区切る文字を指定するオプションです。"|" 以外でも任意の区切り文字を

    DBMによるテーブルデータベース その参 - mixi engineer blog
    pitworks
    pitworks 2009/02/02
  • 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
    pitworks
    pitworks 2009/01/20
    昔々のMySQLを思い出すな。全てのSQL網羅は必要なく「早くて軽いDB」が嬉しい用途も多いと思う。
  • ロングテールな画像配信 その2 - 3,000万の画像を配信するシステム - mixi engineer blog

    Squidを検索する度に最初に表示される画像検索の結果に吹き出しそうになる開発部・システム運用グループの長野です。前回のロングテールな画像配信のその2ということで、実際の画像配信システムについて書かせて頂きます。 ■プロフィール画像の配信について 前回紹介しましたが、mixiにおいてプロフィール写真を設定を設定しているユーザ数は全体の約70%、1,000万人の方が設定をされています。現在配信をしているプロフィール画像のサイズは180x180、76x76、40x40と3サイズあり、合計3,000万以上のファイル数になっています。また、もっともよく使われる76x76のサイズ1,000万件において、1日にアクセスされる画像の数は800万ファイル以上、うち97%が30回以下と非常に広範囲に渡ってアクセスされています。そのため大量の画像を配信できる仕組みが必要になります。 ■配信システムの全体像 プ

    ロングテールな画像配信 その2 - 3,000万の画像を配信するシステム - mixi engineer blog
    pitworks
    pitworks 2008/09/08
    squid キャッシュ
  • mixi Engineers’ Blog » 圧縮データベースを使おう

    チャリンコ通勤による滝のような汗で、朝からTシャツがシースルーになってしまうmikioです。さて今回は、Tokyo Cabinet(TC)のデータベースを各種のアルゴリズムで圧縮して利用する方法についてご紹介します。 圧縮B+木 B+木とは、比較関数の値による順序が近いレコード群を単一のページにまとめ、各ページにB木(multiway balanced treeの略であり、二分木(binary tree)とは違います)の索引を張ったものです。理論的にはレコードの探索も更新も O(log n) の時間計算量で行え、内部ノード(B木)の操作をキャッシュすると実質的には O(1) の時間計算量で探索や更新が行えるという、かなり安定した性能を備えるデータ構造です。その上、レコードが一定の順序に基づいて並べられているので、数値の範囲検索や文字列の前方一致検索が高速に行えたり、カーソルによって順序に基

    mixi Engineers’ Blog » 圧縮データベースを使おう
    pitworks
    pitworks 2008/07/29
  • mixi Engineers’ Blog » OpenSSLの暗号文をJava/Perl/Rubyで開く

    秘密鍵やプライベートな情報などを秘匿するためにパスワードでデータを暗号化・復号したい場合があります。このとき、暗号化と復号するアプリケーションが同じであれば簡単ですが、例えばCで暗号化してJavaPerlRubyで復号するといった風に異なるプラットフォームで暗号データをやりとりする場合には、いくつか気 をつけなければいけないポイントがあります。 OpenSSLによる暗号化 OpenSSLはWebサーバのSSL/TLSサポートに利用されますが、その他にも付属しているopensslコマンドから基的な暗号アルゴリズムを利用できます。次のような簡単なコマンドで、パスワードを使ってデータを暗号化したり復号したりすることができます: $ echo 'Hello World!' | openssl enc -e -aes-128-cbc > cipher.txt enter aes-128-cbc

    mixi Engineers’ Blog » OpenSSLの暗号文をJava/Perl/Rubyで開く
    pitworks
    pitworks 2008/05/16
  • 1