Monthly Archives: 11月 2008 - Page 2

はてな流大規模データ処理

KOF 2008 の発表資料 – naoyaのはてなダイアリー

はてな流大規模データ処理の発表資料を見てたら、データベースのパーティショニングを前提とした設計、というのが載っていて興味を引きました。

普通にテーブルが分かれている場合、JOINを使って、

mysql> select url from entry INNER JOIN bookmark on entry.eid = bookmark.eid
-> where bookmark.uid = 169848 limit 5;

こんな感じでSQL文を発行しますが、テーブルがパーティショニングで分けられている場合、

mysql> select eid from bookmark where uid = 169848 limit 5;
+—–+
| eid |
+—–+
| 0 |
| 4 |
| 5 |
| 6 |
| 7 |
+—–+
5 rows in set (0.01 sec)

mysql> select url from entry where eid in (0, 4, 5, 6, 7);

こう、JOINせずに求めるという・・・。力業ですね(^_^;)
まだパーティショニングしたことないですが、こうなりますよねー。やはり。

バウンスメールの処理について(仕様検討)

バウンスメールの処理について(仕様検討) – spanstyle::monolog

バウンスメールをPHPで行うには、について。検討されています。ふむふむ。めもめも。

PHP libmemcached

PHP libmemcached – GREE Labs

memcachedのクライアントライブラリのlibmemcachedをphpから使えるとか。
こういうのは一応メモっておいても、中々使う機会がないことに気付いてきた私。
しかし知ってるということは重要なんだ!たぶん!

php_sennaとは

php_sennaとは – Senna (非公式) PHPバインディング

php上からSennaを直接扱えるエクステンション、php_senna。

$index = new Senna_Index('/tmp/php_senna_sample');
$index->upd(‘key1′, NULL, ‘This is a sample.’);
$index->upd(‘key2′, NULL, ‘This is an another.’);
$index->update(‘key3′, 1, NULL, ‘php_senna sample’);
$index->update(‘key3′, 2, NULL, ‘binding’);
$index->update(‘key3′, 3, NULL, ‘sample code’);

$records = $index->query(‘sample’);
foreach ($records as $row) {
echo $row->getKey(), ‘ = ‘, $row->getScore(), “\n”;
}

Tritonなどを入れなくても、こんな感じでSennaを使えるらしいのです。
これは素晴らしいですね。