2008-10-25

Ruby on RailsでDB負荷分散

Railsで簡単に負荷分散できんもんか?

複数サーバーあるわけじゃないので
DBをレプリケーションしつつ
ユーザーごとにDB分ける・・・なんて事ができないし~
でもこの手の処理を実現するライブラリはみっけた。
・acts_as_readonlyable
・magic_multi_connection

てか、そもそも1テーブルに大量のデータあっちゃダメだろ~
って気がするんだけど。違うのかな?

目的としてはURLごとにタグを付けるような・・・そんな機能を作りたい。
そうするとURLの数分、盛大にデータが溜まっていく。
最終的には何十万件・・・どころじゃないよね。多分・・・。
日付で分割すると、
全体にアクセスする場合がめんどいので
用途的にもドメインとかでテーブル分ける方法がいいかなー。
urls_jp
urls_com
みたいに。
そーすると、ドメインでアクセスするテーブルが分かれるので
ちったー負荷分散になるだろう。

んで本題だけど(遅)
こういう・・・
jpのURLだったら動的に_jpのテーブルをCreateする。
comのURLだったら・・・
とテーブルを生成しつつ、データ操作を行う処理を
やってくれるライブラリとかプラグインって無いものかな?
見にいくテーブルを割り振ってくれるだけでもいいのだけど・・・。

Railsの知識皆無の状態で
てきとー実装はしてみたものの
Modelクラスとか使えなくなっちゃうし~アクセスするのは毎回find_by_sqlだし~
こんなのなんか違う気がする・・・良い方法ないものか。

実装方法はこんなん。
#テーブル名を取得する ○○_jpや○○_com
    table_name = get_table_name(url)
    
    #すでにテーブルが生成されていないか調べる。
  #url_mstsは生成したテーブル名を保持しておくテーブル。
    count = UrlMst.count_by_sql(
     ["select count(*) from url_msts where table_name = ?", table_name])
    
    if (count == 0)
   #生成されてなかったので生成する
      url_mst = UrlMst.new
      url_mst.table_name = table_name
      url_mst.save
      
   #Create文発行
      ActiveRecord::Migration.create_table table_name, :force => true do |t|
        t.text     "url"

        t.timestamps
      end
    end
    
  #生成したテーブルにアクセス。
    #・・・ここでUrlMstクラスを使っていいものなのか??
    url_mst = UrlMst.find_by_sql(
      ["select id from \"#{table_name}\" where url = ?", url])

0 コメント:

コメントを投稿

最近のコメント

自己紹介

自分の写真
A型、男性
名古屋でSEしてます(> <)b

2008年
Open Social API(RESTful API)を使って変なもの作り中・・・

ブログ アーカイブ

高級品(><)

All About スタイルストア

第70495コロニーな生活