Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Using Amazon SimpleDB with Ruby on Rails
The vision of eventually forming a truly scalable deployment architecture using Amazons EC2, S3, SQS and SimpleDB web services together, triggered a very vivid discussion at the Ruby Users Group Berlin (RUG-B).
The presention gives an introduction to Amazon SimpleDB focusing on how to connect it to Ruby on Rails via the ActiveResource framework and the AWS SDB Proxy Server Plugin.
4326 views | comments | 9 favorites | 117 downloads | 4 embeds (Stats)
More Info
This slideshow is Public
Total Views: 4326 on Slideshare: 3862 from embeds: 464
Most viewed embeds (Top 5):
More
Slideshow Transcript
- Slide 1: Using Amazon SimpleDB
with Rails
Martin Rehfeld
@ RUG-B 07-Feb-2008
- Slide 2: Remember?
AWS Rails Scenario
}
EC2 S3
Web Static
Server Content
Application
Server
memcached,
backgrounDRb,
Code
...
SQL
HOW
TO
GET A
PERSIS
Database DB?
TENT
- Slide 3: limited
beta
Amazon SimpleDB
• Database web service advertised as
• Simple, Flexible, Scalable, Fast,
Reliable, Inexpensive
• No RDBMS: no SQL, no joins, no schema,
no referential integrity, no transactions
• HTTP-Interface
• Pay per use:
• $0.14 per Machine Hour consumed
• $0.10-0.18 per GB - data transfer
• $1.50 per GB-month storage
- Slide 4: Amazon SimpleDB
Common Terms
• Domain: SimpleDB
storage container ~ table
• Item: my domain A
attributes
~ table rows accessed by
ID ~ primary key }
items
• Attribute:
(multiple) values
~ table columns; every item
may have a different set of up
to 256 attributes my domain B
• Value: ...
each Attribute may have
multiple Values, always
varchar(1024)[]
- Slide 5: SimpleDB @
no code
no code
no code
no code
no code
no code
no code
(amazon_sdb)
rich API*
simply working!
*) defect release 0.6.5 when evaluated, but newer release available (not re-tested yet)
- Slide 6: Amazon SimpleDB API
• Domain level
• CREATE, LIST, DELETE
• Item level
• GET, PUT, DELETE attributes with values
• QUERY* for unordered item IDs by
attribute values within one domain
*) lexicographical =, !=, <, > <=, >=, STARTS-WITH,
AND, OR, NOT, INTERSECTION / UNION
• Beware: Eventual Consistency Approach!
- Slide 7: Almost
RESTful
- Slide 8: Mapping RESTful URLs
HTTP/REST SimpleDB
GET
/domain?query QUERY
GET
/domain/itemID GET ATTRIBUTES
POST
/domain/itemID PUT ATTRIBUTES
PUT
/domain/itemID PUT ATTRIBUTES
(replace)
DELETE
/domain/itemID DELETE ATTRIBUTES
- Slide 9: Mapping RESTful URLs
Emulating multiple resources in one domain via _resource attribute
HTTP/REST SimpleDB
GET
/domain/resource?query QUERY
GET
/domain/resource/itemID GET ATTRIBUTES
POST
/domain/resource/itemID PUT ATTRIBUTES
PUT
/domain/resource/itemID PUT ATTRIBUTES
(replace)
DELETE
/domain/resource/itemID DELETE ATTRIBUTES
- Slide 10: A Bridge to Rails
ActiveResource
„Rails XML“
HTTP/REST
?
AWS
SDB Proxy
Server*
„AWS XML“
HTTP/SDB API
SimpleDB
*) http://inside.glnetworks.de/2008/01/20/bridging-rails-to-amazon-simpledb-using-activeresource/
- Slide 11: AWS SDB Proxy Plugin I
• Install aws-sdb gem
gem install aws-sdb
• Install aws_sdb_proxy plugin:
script/plugin install http://rug-b.rubyforge.org/svn/aws_sdb_proxy
• Configure config/aws_sdb_proxy.yml
development:
aws_access_key_id: <your amazon aws key>
aws_secret_access_key: <your amazon aws secret key>
port: 8888
• Create new domain on Amazon SimpleDB
rake aws_sdb:create_domain DOMAIN=ActiveResourceStore
• Start AWS SDB Proxy
rake aws_sdb:start_proxy_in_foreground
- Slide 12: AWS SDB Proxy Plugin II
• Create demo ActiveResource model
class Post < ActiveResource::Base
self.site = \"http://localhost:8888\"
self.prefix = \"/ActiveResourceStore/\"
end
• Testdrive in script/console
>> p = Post.create(:title => 'My first SimpleDB post')
=> #<Post:0x198ceec @prefix_options={}, @attributes={...}>
>> p.body = 'Content is king'
=> \"Content is king\"
>> p.save
=> true
>> Post.find(:first, :params => { :title => 'My first SimpleDB post' })
=> #<Post:0x18efef8 @prefix_options={}, @attributes={...}>
- Slide 13: Vision: Fully Virtualized
Scalable Stack...
• Building blocks for AWS-only web app
deployment:
• Static assets/content in S3
• As many app servers as needed on EC2
• Structured data persisted in SimpleDB
• All client/server interactions via SQS
Note: XmlHttpRequest cross-site restrictions must be examined
- Slide 14: Q &A
! Martin Rehfeld
http://inside.glnetworks.de
martin.rehfeld@glnetworks.de