Introduction to Document Databases with RavenDB

27
Introduction to Document Databases with RavenDB David Green @davidjeet

description

Introduction to Document Databases with RavenDB. David Green @ davidjeet. Agenda. NoSql databases Prereqs CAP Theory Features of Document Databases Features of RavenDB Getting Started – Deployment Raven Studio Code Demo 1 – CRUD + Http API - PowerPoint PPT Presentation

Transcript of Introduction to Document Databases with RavenDB

Page 1: Introduction to Document Databases with RavenDB

Introduction to Document Databases with RavenDB

David Green@davidjeet

Page 2: Introduction to Document Databases with RavenDB

Agenda NoSql databases Prereqs CAP Theory Features of Document Databases Features of RavenDB Getting Started – Deployment Raven Studio Code Demo 1 – CRUD + Http API Code Demo 2 – MVC3 Template, Indexes, Map-Reduce,

Lucene, Http API Extras

Page 3: Introduction to Document Databases with RavenDB

Pre-Reqs: What you need to know

• .NET Framework, C# 3.5/4.0

• Basic familiarity with LINQ & lambda expressions

• Maybe some JavaScript (if you want to use HTTP API)

Page 4: Introduction to Document Databases with RavenDB

NoSQL databases

Graph Key-value store

Object Document

Page 5: Introduction to Document Databases with RavenDB

Document databases• Key/Value: A document database is, at its core, a key/value

store with one major exception.

• Format: Instead of just storing any blob in it, a document db requires that the data will be store in a format that the database can understand (XML, JSON, Binary JSON, etc.)

• Schema Free: A document database is schema free, that is, you don’t have to define your schema ahead of time and adhere to that.

• Relationships Not Enforced: It does not, however, support relations. Each document is standalone. There is nothing to enforce relational integrity.

• Benefit: The major benefit of using a document database comes from the fact that while it has all the benefits of a key/value store, you aren’t limited to just querying by key.Excerpts from: http://ayende.com/blog/4459/that-no-sql-thing-document-databases

Page 6: Introduction to Document Databases with RavenDB

CAP Theory

Page 7: Introduction to Document Databases with RavenDB
Page 8: Introduction to Document Databases with RavenDB

Id Title Author Price33 “War & Peace” “Leo Tolstoy” 29.99

Books/33

Id Title Author417 “Pro ASP.NET MVC 4” Adam

Freeman

Books/417

Id Title Price Inventory

59 “Poke the Box”

7.18 100

Books/59

Example of a schema-less table

Page 9: Introduction to Document Databases with RavenDB

RavenDB• RavenDB is a document database system

• Created by Oren Eini (Ayende Rahein)

• Beyond just being your typical database, it is also a web server.

• Uses LINQ for querying (i.e. Map-Reduce).

• Uses Lucene search engine.

• Supported in MVC4, WebForms, Winforms, Console…everything

• RavenDB is optimized for reading. (some Document databases optimized for write)

• Adheres to some BASE principles:

• Basic Availability• Soft-state• Eventual consistency

Page 10: Introduction to Document Databases with RavenDB

Getting Started - DeploymentRaven DB has four different methods for deployment:

1. Server mode (console, not to be used in production)

2. IIS

3. Windows service

4. Embedded

Page 11: Introduction to Document Databases with RavenDB

Getting Started - Server Mode1. Create (or use an existing) a new solution + project

that will be using RavenDB. It doesn’t matter what kind of project this is (i.e. console, WinForms, ASP.NET, etc.)

2. With NuGet package manager, search on “RavenDB” and you can select from:

1. Raven (Embedded)2. Raven (Client)3. Raven (Server)Select the third option “Raven” which will install the server piece in the packages folder of your solution.

Page 12: Introduction to Document Databases with RavenDB

Getting Started - Server Mode

Page 13: Introduction to Document Databases with RavenDB

Raven Studio (like SSMS)http://localhost:8080/raven/studio.html

It’s Silverlight based (make sure you have Silverlight installed)

It *sometimes* auto-launches when firing up the console:

1. In Solution Explorer, right-clickOpen File In Windows Explorer

2. Navigate to packages/RavenDB.x.y.zzz/server

3. Create a .cmd file (notepad) with the following line:start Raven.Server.exe --debug –browser

4. Use the .cmd file you just created to launch the console (it will also launch the browser)

Page 14: Introduction to Document Databases with RavenDB

Basic CRUD Demo – Music Store• Read (w/o model)

• Read (basic)

• Read (dynamic index)

• Create

• Update

• Delete

Page 15: Introduction to Document Databases with RavenDB

Set “Target Framework” for Console Apps

Page 16: Introduction to Document Databases with RavenDB

Advanced Demo – StackExchange• Using a Base Controller (MVC3)

• Handling Joins

• Map-Reduce

• Indexes

• Lucene Search Engine

• Http API

Page 17: Introduction to Document Databases with RavenDB

Relational View of StackExchange

Page 18: Introduction to Document Databases with RavenDB

MVC3 Template for RavenDB usage

• Can use Singleton Design pattern or Dependency Injection.

• Using a base class for the controller (i.e. “RavenController”)

• Overriding the OnActionExecuting and OnActionExecuted event.

Page 19: Introduction to Document Databases with RavenDB

How to Handle Relationships in RavenDB

Couple of ways to do this:

• One common technique is to use .Include<T>() method.

• Depending on the scenario, de-normalization can be used instead.

Page 20: Introduction to Document Databases with RavenDB

IndexesTwo types of Indexes in RavenDB:

• Static

• Dynamic

There are a few reasons why to prefer static indexes over dynamically created ones:

High latency - Index creation is not a cheap process, and may take a while to execute. Since dynamic indexes are created on the fly on first user query, first non-stale results may take a long time to return. Since dynamic indexes are created as temporary indexes, this is going to be a performance issue on first run.

Flexibility - Static indexes expose much more functionality, like custom sorting, boosting, Full Text Search, Live Projections, spatial search support, and more.

Page 21: Introduction to Document Databases with RavenDB

Map- Reduce

from post in docs.Postsfrom Tag in post.Tagsselect new { Tag, Count = 1 }

from result in resultsgroup result by result.Tag into gselect new{

Tag = g.Key,Count =

(int)g.Sum(x=>x.Count)}

Example: Creating an index called Posts/TagCount

Reduce

Map

Page 22: Introduction to Document Databases with RavenDB

Lucene

Examples:

With “Posts” Collection:• (PostTypeId: 1 AND Title: *relativity*) • (PostTypeId: 1 AND AnswerCount: 6)• Title: “particle energy"~4 //proximity search example

With “Users” Collection:• DisplayName: David~0.4 // fuzzy search example• DisplayName: David~0.8

Syntax: http://www.lucenetutorial.com/lucene-query-syntax.html

Page 23: Introduction to Document Databases with RavenDB

Extras• Additional Resources

• Deleted Scenes

• Behind the camera with David Green

Page 24: Introduction to Document Databases with RavenDB

RavenDB Deployment – Embedded Mode

Page 25: Introduction to Document Databases with RavenDB

Helpful Tools• Couple tools out there – Some are RavenDB specific, others like Fiddler and LinqPad also work well.

• For setup/install:• http://

blogs.hibernatingrhinos.com/5/ravendb-in-practice-part-1-an-introduction-to-ravendb

• http://ravendb.net/docs/intro/quickstart/adding-ravendb-to-your-application• http://www.codecapers.com/post/Using-RavenDB-with-ASPNET-MVC.aspx• http://msdn.microsoft.com/en-us/magazine/hh547101.aspx

• Best Intro:• http://ravendb.net/docs/client-api• http://ravendb.net/docs/http-api• http://ravendb.net/docs/server/deployment• http://ravendb.net/kb/3/using-ravendb-in-an-asp-net-mvc-website• http://

blogs.hibernatingrhinos.com/3073/ravendb-in-practice-part-2-using-the-client-api

• http://www.codeproject.com/Articles/74322/RavenDB-An-Introduction• http://www.codecapers.com/post/Using-RavenDB-with-ASPNET-MVC.aspx• http://

tech-rash.blogspot.com/2012/02/is-raven-db-all-its-cracked-up-to-be.html (review)

• Relations/joins: • http://daniellang.net/how-to-handle-relations-in-ravendb/• http://old.ravendb.net/faq/includes

Helpful Links

Resources

Page 27: Introduction to Document Databases with RavenDB

Pricing/features for RavenDB 1.2RavenDB is being split into three editions:

RavenDB Basic - monthly subscription only (5$ - 512 MB db size limit, 5 databases limit. 10$ - 1GB db size limit, 10 databases limit). A single indexing thread, 2 GB memory limit. 

RavenDB Standard - what we have with RavenDB right now. 6 CPU + 12 GB limit. 999$ for a one time payment - 18 months upgrade protection.  399$ for a yearly subscription - as long as you have a current subscription, you can use the software and get free upgrades. 39$ for a monthly subscription 

RavenDB Enterprise - per core licensing. No limits on CPU / Mem. Additional features, detailed in the previous email.  Per core pricing (# of cores == Environment.ProcessCount) is 699$ per core . 18 months upgrade protection.  299$ per core per year. 79$ per core per quarter 

In addition to that we have two additional licensing modes:1) OEM - embedded only - 1599$ per developer for the first year.  999$ per developer for renewal. 2) Scaleout - bundles of 10, 20 and 50 licenses for scaleout / sharding  scenarios, which are sold at a reduced cost. 

Development will continue to be free! (emphasis added).