13. Anforderungen
an ein verteiltes System
Consistency
Konsistenz
Partition
Availability
Tolerance Verfügbarkeit
Ausfalltoleranz
14. CAP Theorem
› 2000: E. Brewer, N. Lynch
› You can satisfy
at most 2 out of the 3 requirements
15. Consistency
› The system is in a consistent state after an operation
› All clients see the same data
› Strong consistency (ACID)
vs. eventual consistency (BASE)
ACID: Atomicity, Consistency, Isolation and Durability
BASE: Basically Available, Soft state, Eventually consistent
16. Availability
› System is “always on”, no downtime
› Node failure tolerance
– all clients can find some available replica
› Software/hardware upgrade tolerance
17. Partition tolerance
› System continues to function even when
split into disconnected subsets (network disruption)
› Not only for reads, but writes as well
31. “Map Reduce is the Uzi of aggregation
tools. Everything described with count,
distinct and group can be done with
MapReduce, and more.”
Kristina Chadorow, Michael Dirolf in MongoDB – The Definitive Guide
36. RavenDb
› Written by Oren Eini aka Ayende Rahien
› Hibernating Rhinos
› Rhino Mocks & Rhino.ServiceBus
› Written in C#
37. Deployment
› Get it via NuGet
› Change defaults in Raven.Server.exe.config
› It’s safe by default
› Just run the Raven.Server.exe in the /server/ folder
38.
39. Safe by default
› Useful defaults
› E.g. Limited page size – No Accidental SELECT *
› ACID
› Client / Server
› Cross shard
40. Units
› Documents
› Collections
› Indexes
› Attachments
41. Designed to “just work”
› Schema Free
› Hardly any mapping required
› dynamic (C# 4) yields great power
42. Designed to “just work”
› Sleek Client API
› Fluent API
› Unit of Work Pattern
› Extensible – Plugin Support
43. Makes developers happy
› Testable
› Interfaces all over
› In-Memory Database
› Extensible – Plugin Support
44. APIs
› Native .NET Client API
› HTTP API (Pseudo REST)
45. Indexes
› Written as Linq Queries
› Indexed with Lucene .NET
› Lucene Syntax for querying
46. “While being RESTful is a goal of the
HTTP API, it is secondary to the goal of
exposing easy to use and powerful
functionality”
Ayende Rahien on the HTTP API - http://ravendb.net/documentation/docs-http-api-restful
47. HTTP API
› Caching
› E-Tags
› Lucene Queries possible
C:>curl -X GET http://localhost:8080/docs/Categories/1 -i
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
ETag: 00000000-0000-0200-0000-000000000004
{
"Name" : "Normal Importance",
"Color" : "green"
}