MySQLとPostgreSQLのRepeatable Read時の挙動の違いについて    

2010/7/2 金曜日 matsui Posted in サーバ 1 Comment »

モバイルとは全く関係ないですが、自分のメモ代わりに記事にしてみたいと思います。

たまたまテストしていて、MySQLとPostgreSQLのRepeatable Read時の挙動の違いを見つけました。

 

AさんとBさんという二人のユーザが同時に一つのレコードを更新している場合です。

user_tblのuser_typeというカラムを「0」→「1」にアップデートしています。

分離レベルはMySQL、PostgreSQLともにRepeatable Readです。

 

Aさん
Bさん
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
トランザクション開始
mysql> select user_type from user_tbl where user_id
= 1000;
+———–+
| user_type |
+———–+
| 0 |
+———–+
1 row in set (0.00 sec)
参照
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
トランザクション開始
mysql> select user_type from user_tbl where user_id
= 1000 for update;
+———–+
| user_type |
+———–+
| 0 |
+———–+
1 row in set (0.00 sec)
行ロック
mysql> update user_tbl set user_type = 1 where user_id
= 1000;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
更新
mysql> commit;
Query OK, 0 rows affected (0.05 sec)
コミット
mysql> select user_type from user_tbl where user_id
= 1000;
+———–+
| user_type |
+———–+
| 0 |
+———–+
1 row in set (0.00 sec)
参照(ロックなし)
mysql> select user_type from user_tbl where user_id
= 1000 for update;
+———–+
| user_type |
+———–+
| 1 |
+———–+
1 row in set (0.00 sec)
参照(ロックあり)

※結果が違うことに注意

 

最後のSELECTが、「FOR UPDATE」の有り無しで違う結果を返していることにご注意ください。

FOR UPDATE以外は全く同じSQL文なのに、結果が違うというのは、少し違和感がありますね。

 

Aさん
Bさん
test=# begin;
BEGIN
トランザクション開始
test=# select user_type from user_tbl where user_id = 1000;
user_type
———–
1
(1 row)
参照
test=# begin;
BEGIN
トランザクション開始
test=# select user_type from user_tbl where user_id = 1000 for update;
user_type
———–
1
(1 row)
行ロック
test=# update user_tbl set user_type = 0 where user_id = 1000;
UPDATE 1
更新
test=# commit;
COMMIT
コミット
test=# select user_type from user_tbl where user_id = 1000;
user_type
———–
0
(1 row)
参照(ロックなし)
test=# select user_type from user_tbl where user_id = 1000 for update;
user_type
———–
0
(1 row)
参照(ロックあり)

PostgreSQLの場合は「FOR UPDATE」の有る無しでSELECTの結果は変わりません。
こちらの方が直感的な感じがしますね。

 

(MySQLの内部構造には詳しくないのできっとですが)MySQLでは最初のSELECTでスナップショットが展開されるので、FOR UPDATEで取得した場合とそうじゃない場合でSELECTの結果が違うのだと思います。

「あるテーブルの値を元に、他テーブルの値を更新する」みたいなプログラムの場合、上記の例のようなパターンにはまることがありそうです。

そのような参照の前にはしっかりロックをかけましょう、というそんなお話でした。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

各キャリアのメールサーバのIPアドレス帯域をまとめてみました    

2010/3/3 水曜日 matsui Posted in サーバ No Comments »

ちょっと別件で各キャリアのメールサーバのIPアドレスをまとめたので、そのURLと現在の帯域をメモしておきます。

 

まずはドコモです。

→ NTTdocomo 作ろうiモードコンテンツ iモードセンタの各種情報 [nttdocomo.co.jp]

メール送信時(インターネット→iモード)

203.138.180.0/24
203.138.181.0/24

メール受信時(iモード→インターネット)

203.138.203.0/24

 

続いてauです。

→ au by KDDI 技術仕様 EZwebメールサーバIPアドレス情報 [au.kddi.com]

メール送信時(EZweb→インターネット)

59.135.39.192/26
61.117.1.0/24
61.117.2.0/24
61.202.3.0/24
121.111.227.136/30
210.196.3.0/24
210.196.5.0/24
210.196.52.0/24
210.230.141.0/24
219.108.158.0/24
219.125.149.0/24
219.125.151.32/27
220.214.145.0/24
222.1.136.0/24
222.15.69.0/24

メール受信時(インターネット→EZweb)

222.15.69.195

 

最後にソフトバンクです。

→ ソフトバンクモバイルクリエイション メール IPアドレス [creation.mb.softbank.jp]

123.108.236.0/24
202.179.203.0/24
202.179.204.0/24
210.146.60.128/25
210.169.176.0/24
210.175.1.128/25
123.108.239.0/24

 

これらの情報は何に使うかというと、メールサーバのスパム対策やイタズラ・成りすまし対策などに利用できます。

ソフトバンクは送信・受信に帯域がわかれていませんが、試してみたところでは送受信で共通の帯域のようです。

なお、ここにあるIPアドレス帯域は、2010年3月3日現在のものですので、設定される際は上記のリンクから最新の情報を確認されるようくれぐれもご注意ください。

 

おまけとして、イーモバイルとウィルコムの情報はこちらです。

→ イーモバイル 技術情報 IPアドレス帯域 [developer.emnet.ne.jp]

→ ウィルコム ウィルコムのセンター情報 [www.willcom-inc.com]

 

ケータイブラウザのIPアドレス帯域はこちらにまとめてあります。

→ ke-tai.org ケータイキャリア・クローラIPアドレス [ke-tai.org]

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

docomoのIPアドレス帯域が12月16日に追加されるようです    

2009/11/18 水曜日 matsui Posted in DoCoMo, サーバ No Comments »

来月の12月16日に、ドコモのIPアドレス帯域に変更があるようです。
少し前に更新されていた情報のようですが、さきほど気づきました。

→ NTTdocomo 作ろうiモードコンテンツ iモードセンタの各種情報 [nttdocomo.co.jp]

 

追加となるIPアドレス帯域は次の通りです。

124.146.175.0/24 (2009年12月16日に追加)

 

以前から追加予定のIPアドレスとしては載っていたのですが(当初は9月追加予定となっていた)、少し時期が遅れてようやく追加となるようですね。

 

元々追加予定のものだったため、既にリストに入れている方も多いとは思いますが、サーバ管理者の方は作業をどうぞお忘れなく。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

AWStatsを使って国内ケータイのアクセス数を集計するには(CentOS5編)    

2009/11/12 木曜日 matsui Posted in サーバ 1 Comment »

AWStatsはフリーのウェブサーバログ解析型のアクセス集計ソフトです。

フリーの割にはグラフィックがよく、日本人にも馴染みやすいインターフェイスのため、利用されている方も多いと思います。

→ AWStats official web site [awstats.sourceforge.net]

 

しかしながら、デフォルトでインストールしたままのAWStatsでは、国内ケータイ電話からのアクセス数を正しく集計できません。

※なぜか検索エンジン(ロボット)からのアクセスと判定されるようになっています。

 

今回はyumでインストールできるCentOS5標準rpmの場合を例にとって、ケータイからのアクセスが解析できるような修正方法をお伝えします。

 

参考にさせていただいたのはこちらのページです。
どちらも「AWStats 6.6完全日本語版 [starplatinum.jp]」をベースに書かれた内容となっています。

→ Euryale Ferox AWStatsでケータイサイトの解析(まとめ [agate.jp]

→ 携帯ヲタがやってしまいました [awstats]携帯完全対応させてみる [d.hatena.ne.jp]

 

上記の方法を利用してもいいのですが、やはりインストールが面倒ですし、yumでポンとセットアップしたいので、「CentOS5.4」 + 「awstats-6.9-1.el5」を例に取って進めていきます。

※恐らく他の環境でも、修正方法はほぼ変わらないでしょう。

 

まずはインストールです。
yumで一発インストールできます。

# yum install awstats

日本語版とは書かれていませんが、このバージョンで特に支障はないようです。
メニューなどもきちんと日本語化されて表示されます。
ログファイルをutf8に変換してから利用すれば、検索キーワードも文字化けせずに表示できます。

インストールは基本これだけです。

※ただし「/etc/httpd/conf.d/awstats.conf」を編集して、アクセスを許可するIPアドレスを設定しなければならないかもしれません。この辺りの説明は基本的なことで、今回の内容とは離れてしまうため省略します。

 

次にAWStatsの一部定義ファイルを修正します。

対象は次の3ファイルです。

 

・/usr/share/awstats/lib/browsers.pm

$ diff /usr/share/awstats/lib/browsers.pm.org /usr/share/awstats/lib/browsers.pm
173c173
< 'up\.',                                       # Works for UP.Browser and UP.Link
---
> #'up\.',                                      # Works for UP.Browser and UP.Link
176a177,181
> # add japanese mobile browsers
> 'j\-phone',
> 'vodafone',
> 'softbank',
> 'kddi',
359c364
< 'up\.','UP.Browser (PDA/Phone browser)',                                     # Works for UP.Browser and UP.Link
---
> #'up\.','UP.Browser (PDA/Phone browser)',                                    # Works for UP.Browser and UP.Link
362a368,372
> # add japanese mobile browsers
> 'j\-phone','J-Phone',
> 'vodafone','Vodafone (3G/Non-3G)',
> 'softbank','Softbank (3G)',
> 'kddi','au by KDDI (HTML Compatible)',
509c519
< 'up\.','pdaphone',                                    # Works for UP.Browser and UP.Link
---
> #'up\.','pdaphone',                                   # Works for UP.Browser and UP.Link
512a523,527
> # add japanese mobile browsers
> 'j\-phone',
> 'vodafone',
> 'softbank',
> 'kddi',

 

・/usr/share/awstats/lib/browsers_phone.pm

$ diff /usr/share/awstats/lib/browsers_phone.pm.org /usr/share/awstats/lib/browsers_phone.pm
555a556,560
> # add japanese mobile browsers
> 'j\-phone',
> 'vodafone',
> 'softbank',
> 'kddi',
1120a1126,1130
> # add japanese mobile browsers
> 'j\-phone','J-Phone',
> 'vodafone','Vodafone (3G/Non-3G)',
> 'softbank','Softbank (3G)',
> 'kddi','au by KDDI (HTML Compatible)',
1251a1262,1266
> # add japanese mobile browsers
> 'j\-phone',
> 'vodafone',
> 'softbank',
> 'kddi',

 

・/usr/share/awstats/lib/robots.pm

$ diff /usr/share/awstats/lib/robots.pm.org /usr/share/awstats/lib/robots.pm
710c710
< 'docomo',
---
> #'docomo',
1351c1351
< 'docomo','DoCoMo',
---
> #'docomo','DoCoMo',

 

browsers.pmとbrowsers_phone.pmでユーザエージェントの定義を追加し、robots.pmのコメントアウトでロボット扱いされるのを避けています。

browsers.pmとbrowsers_phone.pmのどちらにも修正がいるわけではないかもしれませんが、元からdocomoの定義が両方にあったので合わせて修正しておきました。
(※この辺りあまりよくわかっていないので、詳しく知っている人がいましたら教えてください)

 

20091108_awstats
無事集計されました

 

今回の修正はとりあえず集計するための最低限のものなので、そのうち時間があれば詳しく勉強してみたいと思います。

無料で使えるアクセス解析サービスである「GoogleAnalyticsモバイル版」や「myRTmobile」など、ケータイアクセス解析の選択肢は増えてきていますが、やはりそれとは別にサーバログ型のアクセス解析も合わせて利用したいところです。

興味のある方は試してみてはいかがでしょうか。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

iモードブラウザ2.0の特定ポートでの通信制限について    

2009/11/11 水曜日 matsui Posted in DoCoMo, サーバ, タレコミ, ニュース No Comments »

takatutoさんからForumへタレコミがありました。
(情報提供ありがとうございます)

先日アップデートで再有効化されたiモードブラウザ2.0ですが、iモードブラウザ、フルブラウザ共に特定ポートで通信制限がかかっているようです。

 

→ スラッシュドットジャパン iモードブラウザ2.0のアップデートにより閲覧できないサイトが発生 [slashdot.jp]

→ 鈴の音情報局blog 【とりあえずまとめ】ドコモの新ブラウザ・アクセス制限が見えてきた [suzunonejh.blog15.fc2.com]

 

上記サイトによると、iモードブラウザ・フルブラウザの両方で、次のようなhttp通信制限が行われているようです。

0~1023 : 80番を除き全て通信不可
1024~65535 : 通信可

 

80番を除いたウェルノウンポートが規制の対象のようです。

通常は80と8080くらいしかhttp通信には使うことは無いと思うので、影響範囲は少なそうですが、NATでサーバを分けたり、テストなどで他のポートを使っている場合などは規制の対象になってしまいそうですね。

 

JavaScriptの修正と平行してこのアップデートをいれる意味があまりよくわかりませんが、何らかの事前告知は欲しかったところです。

サーバを管理している方はご注意ください。

 

追記:

公式情報が出ていました。

→ NTTdocomo 作ろうiモードコンテンツ iモードブラウザ2.0 ご注意事項 [nttdocomo.co.jp]

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加