Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to RavenDB

February 28, 2014

Introduction to RavenDB

An introductory view into the world of NoSQL and RavenDB.


February 28, 2014

More Decks by Jaime

Other Decks in Programming


  1. Once upon a midnight dreary, while I pondered, weak and

    weary, Over many a quaint and curious volume of forgotten lore-- While I nodded, nearly napping, suddenly there came a tapping, As of some one gently rapping, rapping at my chamber door. "'Tis some visiter," I muttered, "tapping at my chamber door-- Only this and nothing more."
  2. Jaime González García Enthusiastic Software developer! Works at Medius R&D

    building a SPA... ... but also started jaimegonzalezgarcia.com Blogs at barbarianmeetscoding.com likes... fantasy sci-fi drawing Malin ???
  3. Contents • NoSQL? • What is RavenDB? • RavenDB .NET

    API • RavenDB REST API • Installing RavenDB • Replication and Sharding
  4. In the beginning… the year 1970 of our Lord …

    20 years of kicking ass… Edgar Frank Codd
  5. What is NoSql today? • Big term used to refer

    to all non relational DBs (RDMBS’s) • Big hype • In general: • No relational • No schema • High availability and scalability (Web Scale) • Eventual consistency • No SQL (generally) …just like html5… Villaine hipsters!
  6. Why Nosql ? Why Document Stores? • Simplicity • Developer

    friendly • No impedance mismatch (SQL != OOD) • No schema, less friction • Scalability: replication and sharding • Great APIs • Right tool for the job Databases for developers??
  7. Why Sql ? :-) • ACID • Consistency • More

    mature • More Common Competence • Better tooling • Can handle all kinds of queries • SQL
  8. Ravendb • Document Database • No schema • Store objects

    as JSON documents • Query using LINQ • Built-in REST API Wonderfultastic!
  9. Ravendb • ACID document transactions • BASE index querying •

    Self-optimizes based on usage • High scalability • Replication and sharding out of the box • Safe by default
  10. Ravendb documents • An object stored in RavenDB is called

    a document • Documents need not be flat unlike rows in RDBMS • Persisted as JSON
  11. Ravendb documents • Documents can be [logically] grouped in collections

    • Collections are defined as metadata • Indexes filter by collections
  12. Ravendb documents • Each document has its own unique document

    ID • If we try to store two entities with the same id -> overwrite • By convention ID = collectionName/entityId (users/1) • By default entity id’s are generated (auto-incremented)
  13. Modeling in Ravendb • Documents are not flat, you can

    store complex structures • RavenDB is not relational • A document is an independent entity • Include all details you need within the document • This is good for sharding • References are not enforced by the DB • If following DDD, an Aggregrate is a document • This pretty much enforces DDD uses of aggregates from the dB • Use aggregate to enforce invariants to store information safely
  14. Ravendb .net api • Unit of Work • Change tracking,

    transactions, batching, etc • Feels like Entity Framework or NHibernate • IDocumentSession (unit of work) • IDocumentStore (session factory, singleton) • Query with LINQ • Works with pure POCOs • Available on NuGet
  15. A Poco’s life in Ravendb C# class Public class Raven

    { public string Name {get;set;} } POCO var myCuteRaven= new Raven {Name = “Kiwi”} (Plain Old CLR Object) Document instantiate ravens/1 { “Name”: “Kiwi” }
  16. Ravendb .net api – Querying • Every query uses and

    index • Static indexes persisted in the DB • Dynamic indexes created on the fly • Based on the queries that you do • Self-optimization based on usage • Eventual Consistency • Stale better than offline • BASE (Basically Available, Soft State, Eventual Consistency)
  17. Ravendb .net api – Other cool stuff • Uses Lucene

    as search engine • Can easily add attachments to documents • Profiling • Fully customizable • cache • Max number of request per session • Key generator • conventions • etc...
  18. Ravendb Rest api • Documents in RavenDB feel a lot

    like resources... • Built-in REST api for CRUD operations over documents! You could run your whole single page application against Ravendb!
  19. Installing Ravendb • Client-Server • Install and start the service

    manually • Install as a windows service • Deploy it on IIS • DaaS (Database as a Service) (IaaS ) • Embedded in your .NET Application
  20. Extend Ravendb via Bundles • Compression • Encryption • Expiration

    • Versioning • Quotas • Periodic Backups • Authorization • etc http://ravendb.net/docs/2.5/server/extending/bundles
  21. Scaling Ravendb • Replication and Sharding out of the box

    • Sharding • Native • Partition contents of a ravendb database across several machines • Replication • Replicate contents of a ravendb database • As a bundle • Can replicate to SQL Server http://ravendb.net/docs/2.5/server/scaling-out
  22. On NoSql • NoSQL databases Explained • http://www.mongodb.com/learn/nosql • Pluralsight

    - NoSQL the big picture • http://pluralsight.com/training/Courses/TableOfContents/nosql-big-pic • Pluralsight - Understanding NoSQL • http://pluralsight.com/training/Courses/TableOfContents/understanding-nosql
  23. Ravendb documentation • RavenDB Documentation • https://ravendb.net/docs • RavenDB YouTube

    channel • http://www.youtube.com/playlist?list=PL7E1E1A49999CB0F5
  24. Ravendb courses • Pluralsight - Introduction to RavenDB • http://pluralsight.com/training/Courses/TableOfContents/ravendb

    • Pluralsight - A Tour of RavenDB (with Ayende!!) • http://pluralsight.com/training/Courses/TableOfContents/tekpub-ravendb