Introduction to RavenDB

1dfad8107453e0f493ff1a6a8e48d503?s=47 Jaime
February 28, 2014

Introduction to RavenDB

An introductory view into the world of NoSQL and RavenDB.

1dfad8107453e0f493ff1a6a8e48d503?s=128

Jaime

February 28, 2014
Tweet

Transcript

  1. 2.

    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. 4.

    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. 5.

    Contents • NoSQL? • What is RavenDB? • RavenDB .NET

    API • RavenDB REST API • Installing RavenDB • Replication and Sharding
  4. 6.
  5. 7.

    In the beginning… the year 1970 of our Lord …

    20 years of kicking ass… Edgar Frank Codd
  6. 10.

    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!
  7. 11.

    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??
  8. 12.

    Why Sql ? :-) • ACID • Consistency • More

    mature • More Common Competence • Better tooling • Can handle all kinds of queries • SQL
  9. 15.

    Ravendb • Document Database • No schema • Store objects

    as JSON documents • Query using LINQ • Built-in REST API Wonderfultastic!
  10. 16.

    Ravendb • ACID document transactions • BASE index querying •

    Self-optimizes based on usage • High scalability • Replication and sharding out of the box • Safe by default
  11. 18.

    Ravendb documents • An object stored in RavenDB is called

    a document • Documents need not be flat unlike rows in RDBMS • Persisted as JSON
  12. 19.

    Ravendb documents • Documents can be [logically] grouped in collections

    • Collections are defined as metadata • Indexes filter by collections
  13. 20.

    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)
  14. 22.

    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
  15. 23.
  16. 26.

    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
  17. 27.

    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” }
  18. 28.

    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)
  19. 30.

    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...
  20. 31.
  21. 33.

    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!
  22. 36.

    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
  23. 38.

    Extend Ravendb via Bundles • Compression • Encryption • Expiration

    • Versioning • Quotas • Periodic Backups • Authorization • etc http://ravendb.net/docs/2.5/server/extending/bundles
  24. 41.

    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
  25. 44.
  26. 47.

    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
  27. 48.

    Ravendb documentation • RavenDB Documentation • https://ravendb.net/docs • RavenDB YouTube

    channel • http://www.youtube.com/playlist?list=PL7E1E1A49999CB0F5
  28. 49.
  29. 50.

    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