27
OVERVIEW Igor Moochnick Director, Cloud Platforms BlueMetal Architects [email protected] Blog: igorshare.wordpress.com

RavenDB overview

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: RavenDB overview

OVERVIEW

Igor MoochnickDirector, Cloud PlatformsBlueMetal [email protected]

Blog: igorshare.wordpress.com

Page 2: RavenDB overview

BlueMetal Capabilities

UX

Social

Services

Data

Creative & Interactive ServicesMobile ApplicationsWeb & RIA Clients

Enterprise CollaborationSocial PlatformsInformation Management

Application ModernizationServer-side Application ComponentsPrivate, Public or Hybrid Cloud

Relational Database EnginesBusiness Analytics and InsightsNoSQL Data Platforms M

icro

soft

Pla

tform

sA

pp

le,

Am

azo

n a

nd

Leadin

g

Pla

tform

s O

pen

Sou

rce S

oft

ware

THEMES FOCUS AREAS PLATFORMS

Deep

Dis

covery

& B

usi

ness

A

lign

ment

Ag

ile,

Sm

all

Team

s w

ith H

igh

Velo

city

Inte

gra

ted

Cre

ati

ve &

Eng

ineeri

ng

APPROACH

Page 3: RavenDB overview

Why work with us?

• Our model is based on a deep connection to our customer’s true needs

3 We are a relationship-driven partner not a transactional services firm

3 Our relationships are based on high integrity, ethics & mutual success

3 Deep discovery “Seek first to understand” – listen, then synthesize

3 We never lead with a solution - first understand the true business problem then design the solution that exactly meets the customer’s needs

• Our capabilities approach is unique to marketplace:

3 Senior level, extremely talented individuals that can operate at high velocity

3 Team model where we operate at a high rate of speed: force multiplier

3 Integrated Platform approach where we offer end to end solutions

3 Differentiated Creative connected to Engineering resulting in shipping what we design

Page 4: RavenDB overview

Sweet Spots

Web Related Data, such as user sessions, shopping cart, etc.

Dynamic Entities, such as user-customizable entities, entities with a large number of optional fields, etc.

Persisted View Models

Large Data Sets - known to scale in excess of 1 terabyte (on a single machine with thousands writes/sec) and trivial to shard the database across multiple machines

Page 5: RavenDB overview

Modeling

Stop thinking relational

Start thinking about how your data will be used Usage scenarios Optimize for reads? Writes?

Think about your domain objects and business logic in native .Net (POCO) classes

Deformalize if needed

Reference entities to other entities, or collections of them

Identify aggregate root(s)

Page 6: RavenDB overview

Modes of operations

Windows Service

Console App (debug mode)

Embedded

IIS App (ASP.NET Service)

On the cloud (Azure, RavenNest)

Page 7: RavenDB overview

RavenDB Design Guidelines

Self optimizing, zero admin

Eventual consistency

Extensible

Fluent simple API

Page 8: RavenDB overview

Client API

Lightweight

Silverlight

Embedded

RavenLight

Page 9: RavenDB overview

Sessions

Manages UoW (Units of Work)

Cheap to create

Transactional

Manages IDs, tracking

Page 10: RavenDB overview

Don’t shoot yourself in the foot

Will get you first 128 results (unbounded result set protection)

Don’t forget to commit your changes by calling SaveChanges()

30 operations per session (client/server chatter protection)

Automatic batching

No locking

Page 11: RavenDB overview

Advanced API

2nd level – Session level

3rd level – DatabaseCommands

Document store level

Thin wrapper around HTTP API

NOT Transactional

Page 12: RavenDB overview

Queries

Strongly typed

Linq

Works against Lucene indexes

Feeds back into index updates

By design, results may be stale, but you’ll know about it

Page 13: RavenDB overview

Indexes

Dynamic, created on-the-fly - temporary

Becomes static, if you insist (suggested for production)

Rich Actions: Map Reduce Transform (live projections) Field Paging

Spatial index

Page 14: RavenDB overview

Linq Queries

// Filter by property valuevar posts = from post in session.Query<BlogPost>() where post.Subject == "NoSQL Update" select post;

// Filter by rangevar posts = from post in session.Query<BlogPost>() where post.NumberOfWords > 50 select post;

// Filter by nested (calculated) propertyvar posts = from post in session.Query<BlogPost>() where post.Comments.Count > 2 select post;

Page 15: RavenDB overview

Queries

// Filter by property valuevar posts = session.Query<BlogPost>() .Where(post => post.Subject == "NoSQL Update");

// Filter by rangevar posts = session.Query<BlogPost>() .Where(post => post.NumberOfWords > 50);

// Filter by nested (calculated) propertyvar posts = session.Query<BlogPost>() .Where(post => post.Comments.Count > 2);

Page 16: RavenDB overview

Paging

You can skip and pick any number of entities from the returned Query result

Use Skip() and Take() to control the size of the result set

// If a Page has 10 records, to get the 4th page -var posts = session.Query<BlogPost>() .Skip(30) // Skip 3 pages worth of posts .Take(10) // Select next page .ToArray(); // Execute query

Page 17: RavenDB overview

Efficient loads

Improves normalized data access

Include relevant information with your query results

// Request to include Author with the Post resultvar post = session.Include<BlogPost>(post => post.Author.Id) .Load ("BlogPosts/34");

var author = session.Load<Author>(post.Author.Id);

Page 18: RavenDB overview

BLOBs / Attachments

Can store and manage large binary BLOBs

// Store BLOB/Attachmentbyte[] data = new byte[] { ... };documentStore.DatabaseCommands.PutAttachment("videos/2", null, data, new RavenJObject {{"Title", "Birthday song"}});

// Get BLOB/Attachmentvar attachment = documentStore.DatabaseCommands.GetAttachment("videos/1");

Page 19: RavenDB overview

Polymorphism

No required inheritance association

// Query against unified indexvar result = session.Query<dynamic, EverytingByName>();

foreach (dynamic animal in result)Console.WriteLine(animal.Name);

For more watch webcast …

Page 20: RavenDB overview

Extensibility

MEF (Managed Extensibility Framework)

Triggers

PUT triggers DELETE triggers Read triggers Index update triggers

Request Responders

Custom Serialization/Deserialization

Page 21: RavenDB overview

Plugins

// RavenDB pluginpublic class DocSize : RequestResponder{

public override void Respond(IHttpContext context) { ... }

public override string UrlPattern { get { return "/blobsize/(.+)"; } }

public override string[] SupportedVerbs { get { return new[] {"GET"}; } }}

Page 22: RavenDB overview

Bundles

Drop-in plugins (MEF, .NET)

Write your own

Available Authentication Authorization Cascade delete Expiration Quotas Replication Versioning

Page 23: RavenDB overview

Replication Between Servers

Implemented as a plug-in (Raven.Bundles.Replication.dll)

Tracks the server the document was originally written on.

The replication bundle uses this information to determine if a replicated document is conflicting with the existing document.

Supported by the client API

Detects that an instance is replicating to another set of instances.

When that instance is down, will automatically shift to the other instances.

Page 24: RavenDB overview

Given this document…

And this index…

Gives this table output

http://ravendb.net/bundles/index-replication

Replication to Relational DB

Page 25: RavenDB overview

Sharding

Sharding refers to horizontal partitioning of data across multiple machines.

The idea is to split the load across many commodity machines, instead of buying huge expensive machines.

Raven has full support for sharding, and you can utilize sharding out of the box.

Page 26: RavenDB overview

Advanced

Single document patch

Attachments (BLOBs)

Transactions (transaction scope)

Batching

Lucene Query (parser syntax)

Query statistics

Page 27: RavenDB overview

Learn More!

Raven DB Home Pagehttp://ravendb.net/

Raven DB: An Introduction http://www.codeproject.com/KB/cs/RavenDBIntro.aspx

Herding Code 83: Ayende Rahien on RavenDB http://herdingcode.com/?p=255

Raven posts from Ayende Rahienhttp://ayende.com/Blog/category/564.aspx

Raven posts from Rob Ashton http://codeofrob.com/category/13.aspx

RavenDB - The Lost Session