Session Title
Download
Report
Transcript Session Title
Windows Azure:
Is the Relational
Database Dead?
Benjamin Day
http://benday.com
Who am I?
Owner, Benjamin Day Consulting, Inc.
– Email: [email protected]
– Web: http://www.benday.com
– Blog: http://blog.benday.com
Trainer, Consultant
– Visual Studio Team System, Team Foundation Server
Microsoft MVP for VSTS
Microsoft VSTS/TFS Customer Advisory Council
Microsoft Cloud Services Advisory Group
Leader of Beantown.NET INETA User Group
Agenda
Big thanks to
– Steve Marx @ Microsoft
– Manuvir Das @ Microsoft
– David Aiken @ Microsoft
Is the relational database dead?
What is Windows Azure?
Develop Your Application
Deploy To Staging and Production
Some Stuff To Think About
Is the relational database dead?
It depends.
(Probably not.)
Cloud will change everything.
Relational database “best practices” are
probably dead…
…at least in the cloud.
AZURE
The Azure Platform
The Azure Platform
The “cloud” in Cloud Services?
Think data-center somewhere on the internet
Allows you to run your app
Allows you to read and write data
Ok. So what’s Windows Azure?
Microsoft’s “cloud”
– Every cloud has an Azure lining?
Custom version of Windows
– Optimized for utility computing applications
– Always runs virtualized on the Azure Fabric
Azure Fabric
– Runs instances of your apps
– Handles “everything”
Azure Storage
Azure SDK for Visual Studio
Why Azure?
“I’ve got my awesome data-center so…”
No more worrying about…
– Buying, configuring, maintaining hardware
– Buying, configuring, maintaining the operating system
– Network infrastructure
•Routers, Switches, Load Balancers
– Your data-center’s power and internet connections
– Failovers
Worry less about…
– App deployment
– Capacity planning
Focus on writing your app
Simple Scale Out
Changes in traffic
Need more
servers?
Need fewer
servers?
I want everything…
…and it should be easy.
Azure let’s you worry about writing your app
Don’t have to learn a whole bunch of new
stuff
Leverage your existing dev skills
Azure: The Developer View
Write it in Visual Studio
– New project types
– Debug your code
.NET, ASP.NET, WCF, IIS7, LINQ
Azure Storage
– Database in the cloud
– (with a few caveats)
Desktop development versions of
– Azure Fabric
– Azure Storage
Demo 1: Hello, World
Hello, World: Discuss.
Doesn’t look like much but…
– that’s “internet scale”-able
– Highly available
Mostly stuff you already know
Debugging In The Cloud
We can debug a service in Visual Studio
How do you debug a service that has been
deployed?
– Answer: you don’t
Logging is the answer
RoleManager.WriteToLog(eventLogName,
message)
– Event log name values: Error, Information, Warning,
Debug, Critical
Demo 1.1: Hello World + Logging
AZURE STORAGE
Azure Storage
Simple database in the cloud
– Tables (aka. “structured storage”)
– Blobs
– Queues
You don’t worry about replication
Scales like nobody’s business
Development version
– DevelopmentStorage.exe
– Uses SQL Server Express
Table Storage
Every row has RowKey & Partition Key
RowKey = primary key
PartitionKey
– Helps you tell Azure how to scale your data
– You have to think about how you’ll be querying
– By State? By Hour? Other?
RowKey
PartitionKey
FirstName
LastName
1
MA
Ben
Day
2
MA
John
Malkovich
3
WA
Bill
Gates
4
CA
Steve
Jobs
PartitionKey
Your partitions could be on different servers
Best practice: If you know your PartitionKey,
add it to the WHERE clause
No PartitionKey in the WHERE insane table
scans
Recommendation: More partitions is
(probably) better
Think hard about your partition key in the
beginning
– Else, roll your own re-partitioning
Column Data Types
Partition key and Row key
– String (up to 64KB)
Other properties
– String (up to 64KB)
– Binary (up to 64KB)
– Bool
– DateTime
– GUID
– Int
– Int64
– Double
Demo 2: Azure Table Storage
RELATIONAL VS CLOUD
What is “relational”
Tables, Rows, & Columns
– All rows in the table have the same column
structure
– You design the database BEFORE you add the
data
Relationships between the tables
Constraints on the columns
Normalization eliminates duplicate data
– Data “nuggets” stored in one place only
– Makes it clear what the definitive version is
Relational in your app
Data is organized for the sake of the data
rather than the sake of the app
– App is temporary but Schema is forever.
– Represents itself as normalization and
relationships between the tables
Scales nicely on a single node but going to
a cluster, it gets ugly
Relational DB Engine Does A Lot
Non-trivial
SELECT p.FirstName, p.LastName,
ph.PhoneNumber
FROM
Person p
LEFT JOIN
Phone ph
ON
p.Id = ph.PersonId
WHERE
p.LastName LIKE 'D%'
Performance Issues in Relational
Avoiding duplication can cause
performance issues
De-normalizing
If you de-normalize and duplicate some
data:
– you can lower the number of required to build an
"object"
– You can lower the amount of "heavy lifting" that
the db has to do to retrieve your data
That JOIN isn't easy
Indexes help but it still is a lot of work
Why Stored Procedures? (1 of 2)
Abstraction between the app & data
Externalize the queries
– Remove them from the code
– Makes the queries live with the data more
"database me me me!"
Why Stored Procedures? (2 of 2)
Security
– lock down direct access to the tables
– Users get rights to specific procs
Performance
– Less compelling: cached execution plan
• Largely irrelevant after SQL Server 7
– More compelling: the query logic is near the
data
Stored Procedures In The Cloud
Azure can distribute physical location of data
by partition key
– Is the stored proc near the data anymore?
(Well, that pretty much wraps it up for stored
procedures.)
What you won’t get in Azure Storage
Stored Procedures
Views
Triggers
Foreign Keys
Database enforced referential integrity
User defined indexes
– (Maybe later.)
While I’ve “dissed” relational…
I’m not saying “skip best practices.”
Don’t put everything in the same table
You’ll still have relationships between tables
– …the relationships just won’t be enforced by the DB
THE VERDICT?
WHAT DO YOU THINK?
OK. MOVING ON.
MORE THAN JUST ASPX
Utility Compute without a UI
Azure uses the concept of “Roles”
Hello, World used a “Web Role”
The other role is a “Worker Role”
– Think windows service in the cloud
Web & Worker
Demo 3: Worker Role and a Queue
In a web role, create an ASP.NET page
– Creates a queue
– Writes to a queue
– Gets queue depth
Worker Role
– Reads the queue
– “Processes” the message
DEPLOYMENT
Demo 4: Deploy To The Cloud
Change the storage config to use production
servers
MISCELLANEOUS
Things to think about
No foreign keys
No triggers
No stored procedures
In Table storage, strings can only be 64k
– You’ll need to use a mix of Blob and Tables
Think hard about what config values you put
in web.config/app.config vs
ServiceConfiguration.cscfg
The Big Questions
When?
– Sometime in 2009
An actual Service Level Agreement (SLA)
More data-centers
– Now in US only
– Global at go-live
What will it cost?
– It will depend on what you use
More resources
My Blog
– http://blog.benday.com
– Sample code
– More Azure content to come…
Steve Marx’s blog
– http://blog.smarx.com/
– Evangelist for the Azure team
Azure.com
Final questions?
Who am I?
Owner, Benjamin Day Consulting, Inc.
– Email: [email protected]
– Web: http://www.benday.com
– Blog: http://blog.benday.com
Trainer, Consultant
– Visual Studio Team System, Team Foundation Server
Microsoft MVP for VSTS
Microsoft VSTS/TFS Customer Advisory Council
Microsoft Cloud Services Advisory Group
Leader of Beantown.NET INETA User Group