Android and Amazon SimpleDB

Download Report

Transcript Android and Amazon SimpleDB

Integrating an App with Amazon
Web Services SimpleDB
“A Matter of Choices”
Presented by Mark Maslyn – [email protected]
Amazon Web Services Menu
Amazon Web Service Databases
• RDB (Relational Database)
• S3 (Large Object Database)
• SimpleDB (NoSQL Database)
Amazon SimpleDB
• NoSQL Database – Non Relational
• Distributed - Highly Scalable, Highly
Reliable, Incremental Writes
• Primarily for Database Reads
• RESTful Calls Passing Credentials and
Query
• Very Low Cost – First 25 Hours Free Each
Month.
SimpleDB Language Support
Whoa… Non – Relational ???
From WikiMedia Commons
NoSQL Databases
• Use “Domains” Instead of “Tables”
• Don’t Have Fixed Schemas – Easily Add or
Remove Columns
• Variable Number of Fields per Record (Row)
• Each Record is a List of Name / Value Pairs
• Everything is a String
• Record Indexed By A Unique Item ID
• Implements Most SQL Calls
• Maintained By Amazon Web Services
Android to Amazon Database Model
Data Request
Data Response
Android Phone
Amazon SimpleDB Cloud
For UI and Display
For Database Heavy Lifting
Each Does What It Does Best !
Images From HTC and WikiMedia
Remote Database Example: Kooaba
From www.kooaba.com
Kooaba Architecture
From www.kooaba.com
My Application – Oil Well Information
•
•
•
•
Location (Latitude / Longitude)
Well Status
Land Survey Boundaries
Must Have the Ability to “Drill Down” for
More Information
Drilling For Oil
A
B
C
D
Amount of Data Generated Depends On How Deep
the Well is Drilled
Example NoSQL Row For Geologic
Formation Names and Depths
Item
Key
Name1
Value1
Name2
Value2
Name3
Value3
“05-10123”, “BLAINE”, “1464”,”ATOKA”,”4744”,”MORROW”,”4854”
Coding the Connection
From Android
Image From http://www.vpnchoice.com/blog/wp-content/uploads/2011/06/android-vpn-300x187.jpg
Connecting to Amazon SimpleDB
private static AmazonSimpleDB sdb = null;
public static AmazonSimpleDB getInstance() {
if ( sdb == null ) {
// pass in the authenication credentials
sdb = new AmazonSimpleDBClient( AWSDemo.credentials );
// set the node we want to use
sdb.setEndpoint("sdb.us-west-1.amazonaws.com");
}
return sdb;
}
Creating SimpleDB Domains From Android
public void createDomain(String domainName)
{
sdb.createDomain(new CreateDomainRequest(domainName));
}
Inserting Records From Android
// each row is keyed with a “replaceable” item id followed by
// attributes i.e. name / value pairs
// construct a list of items to be inserted
List<ReplaceableItem> dataList = new ArrayList<ReplaceableItem>();
// populate the list using the item id and the attribute name / value pairs
dataList.add(new ReplaceableItem(“05-123”).withAttributes(
new ReplaceableAttribute(DBFields.STATE, “CO”, true),
new ReplaceableAttribute(DBFields.COUNTY, “Weld”, true),
new ReplaceableAttribute(DBFields.DRILLING_DATE, “05-11-2011”, true));
// batch insert the list into the SimpleDB database
sdb.batchPutAttributes(new BatchPutAttributesRequest(“my_domain”, dataList ));
Retrieving Data From Amazon
// build your SQL select statement
String selectExpression = "select * from " + domain + " where
itemName() = '“05-123’”;
// construct a select request
SelectRequest selectRequest = new SelectRequest(selectExpression);
// retrieve a list of matching items (records)
List<Item> itemList = sdb.select(selectRequest).getItems();
// loop through each record and extract the attributes from each item
for (int i = 0; i < itemList.size(); i++)
{
Item item = (Item) itemList.get(i);
ArrayList<Attribute> attributeList = (ArrayList<Attribute>)
item.getAttributes();
}
Question:
Since Android Devices Can Use the
Internal SQLite Database…
When I Would I Use the Internal
Database and When Would I Use the
Amazon Cloud Database ?
It Depends On…
• Size of Your Database – Size Does Matter
• APK Maximum of 30 MB – Cloud
Unlimited
• Whether the Data is Static or Subject to
Change
• Whether You Need an Internet Connection
For Access
• Whether You Require Authentication
My Choices: Local vs. Remote
LOCAL
REMOTE
Android SQLite Database
Amazon SimpleDB
100,000 Colorado Wells
100,000 Colorado Wells
Latitude
Longitude
Status Value
Detailed Well Information
4 MB
54 Colorado Counties
Land Survey Information
12 MB
21 MB
Locally Stored Data
• Well Type / Location
• Land Grid
Internet (Remotely) Accessed Data
• Authentication as part
of RESTful Model
• Drill Down – Provide
More Detailed
Information
• No Limit on Amount of
Data Accessible
For Further Information
Amazon Web Services For SDK’s, Tutorials,
Case Studies and Sample Code :
http://aws.amazon.com
Mark Maslyn: [email protected]