このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

MySQLにて大量のデータのDELETEが重い。

2008年8月22日金曜日 by mikuta

MySQLにて大量のデータのDELETEが重い。

下記は実際の例。

mysql> describe `tableName`;
+-------------+--------------+------+-----+
| Field | Type | Null | Key |
+-------------+--------------+------+-----+
| url | varchar(255) | NO | PRI |
| cookie | varchar(255) | NO | MUL |
| user_agent | varchar(255) | NO | MUL |
| http_header | text | NO | |
| html | mediumblob | NO | |
| created | datetime | NO | MUL |
| deleted | datetime | NO | MUL |
+-------------+--------------+------+-----+
7 rows in set (0.02 sec)

mysql> select count(*) from `tableName`;
+----------+
| count(*) |
+----------+
| 164252 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from `tableName`
where url like 'http://www.google.co.jp/%';
+----------+
| count(*) |
+----------+
| 22053 |
+----------+
1 row in set (6.23 sec)

mysql> delete from `tableName`
where url like 'http://www.google.co.jp/%';

・・・・・・・・・終わらない。。。

キャッシュのようなデータなので結局これで対応した。

mysql> TRUNCATE TABLE `tableName`;
Query OK, 0 rows affected (3.72 sec)

でも、一気に消せないデータならどう対応すればいいのだろう。
いろいろ調べて有用そうなものを・・。

・where節の「like」の代わりに「REGEXP」が使えないか検討
 (試してみたけど、likeの方が場合によっては数倍早い)

・パーティショニング(パーティション)の使用
 http://dev.mysql.com/doc/refman/5.1/ja/partitioning.html

・インデックスキャッシュ(KEY_BUFFER_SIZE)のサイズを拡大する
 http://dev.mysql.com/doc/refman/4.1/ja/server-parameters.html

・TRUNCATE TABLE できないような仕様を控える
 これが最適だと思った。

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

使い勝手の良いサイトのサムネイル作成サービスまとめ

2008年8月11日月曜日 by mikuta

URLを指定するだけで簡単にサイトのサムネイルを作成してくれる便利なサービスが多々ある。
有名どころをまとめて紹介。

MozShot

作成されるサムネイルが美しく、かなり使い勝手が良い。
作成できるサイズは3種類。
たまにサーバーが落ちるのがもったいない。
(最近は安定してきたかも)



SimpleAPI

デザインはMozShotほどの洗練されていないが、
安定していて無難な選択肢。
サイズは一種類なのかな?




HeartRails Capture

かなり細かく作成する画像を設定できるのがイイ。
縦長サイトをキャプチャーできるのが利点。

http://life1204.blogspot.com/


個人的にはMozshotが一番オススメ。

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

jQuery.jsとprototype.jsの共存

by mikuta

jQuery.jsとprototype.jsを同時に使用したい場合、
ショートカットの関数名($)がかぶってしまいうまく動作しない。

そんなときは、コンフリクトを宣言する。

<script type="text/javascript">
  jQuery.noConflict();
</script>
でjQueryの関数名を「jQuery」に変更できる。
<script type="text/javascript">
  この部分.noConflict();
</script>
上記のように「この部分」を任意に変更することができる。