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])