Seo tools

Neo Inspiration

  • Search

    • About Me

      • inspi 改め
        jakk@webアーキテクト(自称)
        php,javascript,seoなど
        得意技は extract();



  • Categories

  • Ranking

  • Comments

  • Others


  • Archive for the ‘Database’ Category

    DB分割とか

    月曜日, 10 月 27th, 2008

    大きい開発がはじまったので、
    作りためた自作フレームワークを完成させよう~

    と思ったんだけど、肝心のDB分割の部分がうまく整理できていないので、
    そこらへんのメモ。

    キーで分割するか、テーブルで分割するか

    ○テーブル分割
    ・IDテーブルはこのDBサーバ、blogテーブルはこのサーバみたいな。
     さらに細かくblogテーブルのこのカラムはこのサーバみたいなやり方もあり。

    ・パーティション・マップを用意してテーブル<>サーバのマッピングをする。

    ・色々JOINとかが超めんどい
    (そもそもその規模だとJOIN使うな的な話も多い)

    ・分割するなら例えばBlogテーブルのテキストカラムだけ
    外だしするとかクエリベースで切り貼りするイメージ。

    ・シームレスなラッパーは書くのがきつそう

    ○キーで分割
    ・単純にID1~100はこのサーバ 200~300はこのサーバみたいな。

    ・キーの決め方がハードコーディングになると汎用性がさがるけどリソースをうまく使いきれそう

    ・キーの決め方がアルゴリかましてるとID100を別サーバに移動みたいなことがきつい。
     だけどサーバ増設が伴っても比較的ラクに対応できそう。

    ・マッピングを使う どっかにID1はこのサーバって書いてく。
     このマッピングが書いてあるDBの負荷は大丈夫なん?

    ・シームレスなラッパーは書くのが楽そう

    ○タイムスタンプベース
    ・そこまで必要なサイトってDbいくつ必要なんだというw

    —-

    テーブルで分割の場合よりも、キーで分割のほうが
    サーバの拡張のイメージが付きやすいし、管理コストも楽そうだから
    こっちを採用予定。

    とりあえずログインサーバとメインDB1,メインDB2でわけようかな。
    キーで分割して、マッピング使用、ログインサーバでマッピングさせてしまう予定
    (ログインサーバの負荷がきになるけど)

    あ あと自作フレームワークは neo という名前に!
    (そういうとこだけ早いというw

    参考サイト
    http://www.itmedia.co.jp/enterprise/articles/0808/28/news013_1.html
    http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/

    MYSQL で IF(CASE)文が便利

    水曜日, 9 月 17th, 2008

    PLでしかできないとおもっていたんですが、
    実はMYSQLでも CASE って使えるんですね。

    これはめちゃくちゃ便利なので、メモメモ。

    例えば

    tableA に 性別カラム (clmA) (1=男,2=女,3=その他)があって

    男のレコードの数
    女のレコードの数
    その他のレコードの数

    を1発のSQLで出すことができます。

    SELECT
    count( CASE WHEN clmA=1 THEN 1 ELSE null END ) as “Men”
    count( CASE WHEN clmA=2 THEN 1 ELSE null END ) as “Women”
    count( CASE WHEN clmA=3 THEN 1 ELSE null END ) as “Others”
    FROM tableA

    ほかにも

    CASE WHEN 1>0 THEN “true” ELSE “false”

    みたいな書き方も可能だし、
    もちろんネストも可能。

    しかも意外と処理も早いので、
    わりとヘビーなDBじゃない限り実用に耐えうるきがする。

    他にも色々と使えそうな演算子があったので、
    一度きちんと勉強したほうがよさそうだなー

    MySQL server has gone awayで吹いた

    火曜日, 5 月 27th, 2008

    出社してサイトチェックしようとしたら繋がらない。

    ちょうどタイミングよくメールでDBのパス(同じサーバの別DB)
    を変更したとか言うアナウンスがきたので
    それ関係するのかなと調査開始。

    原因がまずわからん

    パスはどうも大丈夫なよう(当たり前だけど)

    で 繋がらないのはなぜか。。DNS?
    いやでもDB接続しないただのテキストファイルとか開けるし。。
    と 30分くらいうだうだ悩みつつF5押しまくってたら
    突然繋がった。

    が。。

    真っ白。

    管理画面にアクセスしてみると
    「MySQL server has gone away」
    の文字が。

    どっかいったってどういうことだwwwwwwwww

    DBを直すか。。

    とりあえずgoogle先生に聞こうってことで
    聞いてみると どうやらDBがぶっ壊れてるかアクセス過多か
    クエリーがでかすぎだと出るらしい。

    ・アクセス過多はない(ローンチして1週間くらいのサイトだし)
    ・クエリーも最適化はある程度してある(と信じたい)
    ・まさかぶっ壊れた??

    ってことで直でDBにつないで SELECTしてみる。
    ⇒普通にOK

    CHECK TABLE ぽぃ。
    ⇒「Table is already up to date」しかでない。
    #「Table is Table is marked as crashed」って出れば話ははやかったのに。
    #SELECTもUPDATEもできるのに Table is marked as crashed なんてでないか。。

    だがサイトにアクセスしてみるとやっぱDbに繋がらない。

    ええいめんどくせー ってことで repair table 発動。



    直った。

    結局

    「Table is marked as crashed」
    以外でもぶっ壊れてるってことがあるんですね。

    2008/11/22 07:47:53