暑かったり寒かったり雨が降ったり降らなかったり。
皆様いかがお過ごしでしょうか。こんにちわ。かーつんです。
さてさて、今回はなにを書こうか悩んでいたのですが、
良いネタが見つからなかったので、直近のお仕事の様子でも少々。
現在、会員様向けにメール配信を行う用のスクリプトを作ってるんですが、
色々と難航しております。
3つのサーバから1つのDB参照して、同時稼働。
なんか昔バッチ組んでるときに似たようなことしたなぁと思いながら、
正直覚えて無くて、超抜けまくり。
のびーにょ先生に怒られツッコまれながら四苦八苦しております。
で、気をつけるべき点で、残しておきたいと思ったことを以下に記しておきます。
1.コネクション数・SQL発行回数を極限まで減らして一括でデータ取得すると、
同時稼働している3つのサーバに同じデータが取得される可能性がある。
⇒回避策⇒
データテーブルとは別にカウント用のテーブルをテンポラリとして作成して、
取得した件数をそっちに残しておけば、
サーバジョブ起動タイミングを少しずらすだけで異なるデータを一括取得できる。
但し、ジョブを途中で中断したときにデータに不整合が起こるので、
回避策が更に必要。(´・д・`)
2.MySQLはUPDATEの対象テーブルと、
WHERE句で使用するSELECT(サブクエリ)の対象テーブルが同じだと、
ERROR 1093 (HY000): You can't specify target table ・・・
とかって怒る。
⇒回避策⇒
素直にSQL分けるか、DB変える。
MySQLは少し面倒な処理をさせようとすると、すぐ怒る。。。
Oracleなどは怒られないのにネ・・・。
3.メールが送れなかった場合の処理が必要なら、
メールヘッダのReturn-Pathにエラーメールを送って欲しいアドレスを記載する。
⇒具体的には⇒
mb_send_mail('送信先メールアドレス','タイトル','本文',
メールヘッダ(送信元アドレスとか文字コードとか),
'ヘッダオプション');
⇒⇒⇒ Return-Pathはヘッダオプションに、
‘-f エラーメールを受信したいアドレス’
を書くとよし。
mb_send_mail("hogehoge@hoge.jp","タイトル","本文",
"FROM:hogetyo@hoge.jp \n
Content-Type: text/plain; charset=ISO-2022-JP",
"-f hoge-error@hoge.jp");
こんな感じ。
4.送信間隔を考えないと、携帯キャリアからスパム扱いされる。
⇒回避策⇒
ん~模索中。リアルタイムで調整できると一番良いんだけど・・・。(´・д・`)
と、まぁ、こんなとこでしょうか。
他にも色々あったような気がするけど、
自身で理解し切れてないことが多いので、
またの機会と言うことで。
でわ、おばかーつんがおおくりしました。
かーつん Linux, MySQL, PHP, 携帯電話