Amazon SimpleDB が出た!

AmazonからSimpleDBっていうWEBサービスが出た模様。
これがRDMSの代わりになるのかどうかに注目。


海外のブログではいろんなところで紹介されているみたいなので、ちょっと
調べてみた。


以下テキトーな翻訳

inside looking out ≫ What You Need To Know About Amazon SimpleDB
http://www.satine.org/archives/2007/12/13/amazon-simpledb/

▼SimpleDBのなにがすごいのか

  • 超巨大なレコード数を扱える
  • 速い
  • 高可用性 - erlangで動いてるし運用会社はamazonだし万全
  • スケーラビリティが確保されている
  • スキーマ定義が必要ない - すべてがハッシュテーブルで出来ているので

▼あんまり良くない点

  • レイテンシーがあること (訳注>速いと矛盾するのでは?)
  • 整数データはインデックスが自動で効いている
  • 文字列データは自前でインデックスを貼らなければならない

▼SimpleDBの裏側
SimpleDBはErlangで出来ている。開発者の一人Jim LarsonはSendmailの開発者で
2000年からずっとerlangによるメッセージストレージサービスで成果を挙げてきた。

▼データの構造はシンプル

  • domain -> item -> attribute のような感じ

(訳注> database/table/columnに対応する?)

  • attributeはインデックスが効いてます

▼こんなことが簡単に

  • インデックスが効く
  • ログデータベース/解析ツール
  • 世界規模のツール

▼参考サイト
Amazon SimpleDB Home Page
http://www.amazon.com/gp/browse.html?node=342335011
Developer’s Guide
http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/?


Erlang!

最近よく聞くけど。Amazonの内部インフラにも進出してたとは。

サーバー運用のコモディティ化

近年大規模なWEBサービスを運営する会社が増えてきた事もあって、
技術系のブログなんかではことあるごとにスケーラビリティの話
になる。

SQLでjoinをしすぎるとサービスが大きくなった時困るとか、
*mysql5のmaster/slaveが安定してきただとか、
*memocachedを使えばいいとか、はたまた不安定だとか、
etc....

インフラ運用のコストが高く付くのがイヤでoracleとかibmとかを使うのを避けてきたはずの、
WEBの会社も最終的にサービスがでかくなったら急にインフラ運用コストが上がる。チープ革命
とかってスタートアップ企業にとっては優しい環境になってるんだろうけど未だに中〜大規模
の会社にとってはコスト高で似たようなWEBサービスばっかりになる遠因とかになってそう。

とんがった面白いWEBサービスをやりたい
→アプリ自体は一人で書けるけど
→実際の運用が一人では無理
→結局ひとを雇用(お金集められないとココで脱落)
→人が増えると作業ペースが落ちる(意志決定・共有のオーバーヘッドetc) ← 今ココ


大企業になると人事や意志決定のオーバーヘッドは無視出来るくらい大人数で仕事をするメリットが出てくるんだろうけど、一番中途半端なのが5人〜30人くらいの会社。本来一番とんがったWEBサービス出来そうなのに。インフラの低コスト化ってWEBが面白くなるためにすごく重要なんですよ。

http://d.hatena.ne.jp/emergent/20061210/1165746268

sudo yum -y install ImageMagick-devel

続いて、gemファイルをダウンロード、インストール。

$ wget http://rubyforge.org/frs/download.php/14051/rmagick-1.14.1.gem
$ sudo gem install rmagick-1.14.1.gem

即効エラー。

yumがおかしい。
原因はどこにあるのやら。


/etc/yum.repos.d の macromedia.repo ファイルの
enabled=1

enabled=0
にすれば、yum コマンドから除外され、
Fedora JP 掲示
http://bbs.fedora.jp/read.php?FID=9&TID=3841

ヽ( ・∀・)ノくまくまー(2006-10-11)
http://wota.jp/ac/?date=20061011


/etc/my.cnf
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

って設定でいっぱつ。

ただしこれバージョン4.1.5以降のみ対応。
4.1から4.1.4までのバージョンの場合は対処が非常に面倒。
つーかアプリで対応するぐらいならアップしましょう。

Ruby文字コードを変換する基本。
ときどき調べるので、まとめの意味で引用。

Rubyist Magazine - 標準添付ライブラリ紹介 【第 3 回】 Kconv/NKF/Iconv
http://jp.rubyist.net/magazine/?0009-BundledLibraries

require 'nkf'

str = 'Hello, るびま!'            # 何かしらの文字コードの文字列
str_eucjp     = NKF.nkf('-e', str) # 文字コードを自動判定し、 EUC-JP に変換
str_shiftjis  = NKF.nkf('-s', str) # Shift_JIS に変換
str_iso2022jp = NKF.nkf('-j', str) # ISO-2022-JP (JIS) に変換
str_utf8      = NKF.nkf('-w', str) # UTF-8 に変換

買った本

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

株式自動売買ソフトウェアスーパー・株ロボを作ろう!

株式自動売買ソフトウェアスーパー・株ロボを作ろう!

user_controller.rb 80行目

if LoginEngine.config(:use_email_notification) and LoginEngine.config(:confirm_account)
  UserNotify.deliver_signup(@user, params[:user][:password], url)
end

login_engine.rb 50行目

# controls whether or not email is used
config :use_email_notification, true

# Controls whether accounts must be confirmed after signing up
# ONLY if this and use_email_notification are both true
config :confirm_account, true

loginenginでは設定をすべてlogin_engine.rb内で定義(config)してあり、
それらはLoginEngine.config(:use_email_notification)などの形で呼び出せる。
設定を変えたいときにはlogin_engine.rbで直接変えるのではなくenvironment.rbで
変えると、わかりやすい。

user_controller.rbでも設定を参照しながらの処理がたくさん在って、前述の箇所は
登録時にメール送信をするかどうかの箇所。で。LoginEngine.config(:confirm_account)
ってのはメール認証(仮登録→メール内のURLクリック→登録ってやつ)をするためのフラグ。
LoginEngine.config(:use_email_notification)は全般的にメール送信をするかどうかのフラグ。

この箇所から判るのは、loginengineでは『確認メールは送るけど、メール認証はいらない』
みたいなパターンは想定してない。コメントアウトして

if LoginEngine.config(:use_email_notification) #and LoginEngine.config(:confirm_account)
  UserNotify.deliver_signup(@user, params[:user][:password], url)
end

ってする。

LogineEngineはすごくよく使うし、ソースコード的にも勉強になる箇所多いけど、
細かいトランザクションによるエラーだとか管理仕切りれない。

確認画面とか招待メールとか付け加えた箇所がたくさんあってわけわからなくなってるから、
全部書き直そうかなとも思う。