mongodb at community engine

40
MongoDB at Community Engine

Upload: mathraq

Post on 30-Oct-2014

14 views

Category:

Technology


0 download

DESCRIPTION

This talk will cover lessons learned at Community Engine regarding MongoDB, including: why we moved away from an Hybrid solution using SQL and MongoDB; an outline of the technologies and what we learned using MongoDB on Amazon Web Services; the MongoDB C# driver; MongoDB with SOLR for Full Text Search; how we do migration, deployment and more.

TRANSCRIPT

Page 1: MongoDB at community engine

MongoDB at

Community Engine

Page 2: MongoDB at community engine

About me

Lead platform engineer [email protected]@mathieukempe

Page 3: MongoDB at community engine

Agenda

Brain dump on our experience with MongoDB• Why NoSQL• Why we chose MongoDB• Moving away from an hybrid solution• MongoDB and Amazon• SOLR and MongoDB• Ease of development• Zero downtime database deployment

Page 4: MongoDB at community engine

About Community Engine• Social network based on locality and

small business• Launching in April• Built on:

• ASP.NET MVC 3• Amazon Web services• MongoDB• SOLR• Mahout• …

Page 5: MongoDB at community engine

NoSQL?

• How to store the big amounts of data required in social networking applications

• Data complexity, NoSQL handle hierarchical and graph data structures better

• Change management is always difficult with RDBMS

• Scaling

Page 6: MongoDB at community engine

Why we chose MongoDB?

• Reviewed different products RavenDB, CouchDB...• Selected MongoDB because we had the best

experience– Very easy to install and get started– Great developer experience– Replication very easy to setup– Good documentation– Much of the convenience of SQL, Dynamic

Queries, Indexing

Page 7: MongoDB at community engine
Page 8: MongoDB at community engine

Why Hybrid?

• Team had a lot of experience with SQL Server and Entity Framework

• Reporting• Transaction

Page 9: MongoDB at community engine
Page 10: MongoDB at community engine

No more SQL Server• Simplify our infrastructure• Easier to Backup• Better performance, not slowed down by SQL

Server, too many queries joined in the application

• Development speed• Lower cost

Page 11: MongoDB at community engine

Transaction?

Transactions we could go around that using the atomic document updates and a good schema design

MongoDB supports atomic operations on single document.

When transactions across documents are neededTwo phase commits

Page 12: MongoDB at community engine

Hosting with Amazon Web Service

• Elasticity and scalability• Configure MongoDB using Amazon EC2 instance

bundled into an AMI.• 64 bits EC2 instance• Raid10 + EBS volumes• Multi-datacenter 3-node replica set in different

availability zone• Use secondaries for zero downtime backup• We are not yet using sharded replica sets

Page 13: MongoDB at community engine
Page 14: MongoDB at community engine

What about durability?

Use journalingUse replica sets

Page 15: MongoDB at community engine

Critical writes

Verify that replication is working at write time

mongodb://host1,host2,host3/?safe=true;w=2;

•safe=true : Use safemode•w=2: wmode, connect to a replica set waiting for replication to succeed on the majority of nodes

Page 16: MongoDB at community engine
Page 17: MongoDB at community engine
Page 18: MongoDB at community engine
Page 19: MongoDB at community engine
Page 20: MongoDB at community engine
Page 21: MongoDB at community engine

Why we kept SOLR?

• Right tool for the right job• Proven technology• SOLR best solution for Full Text Indexing• Faceted search, Spelling suggestions… • Team already skilled with SOLR• SOLR scales well

Page 22: MongoDB at community engine

MongoDB/SOLR How we do it

Page 23: MongoDB at community engine

MongoDB/SOLR How we do it

Page 24: MongoDB at community engine

MongoDB/SOLR How we do it

Page 25: MongoDB at community engine

MongoDB/SOLR How we do it

Page 26: MongoDB at community engine

MongoDB/SOLR How we do it

Page 27: MongoDB at community engine

Ease of development

Page 28: MongoDB at community engine

Hierarchical data in SQL Server

Page 29: MongoDB at community engine

Single table

Page 30: MongoDB at community engine

Mongo Database Schema

Using Type discriminator

{"_id" : ObjectId("4f504e7acd3e1c190ce04198"),"_t" : "PhotoSpark","Photo" : "MyMotorcycle.png ""DateCreated" : ISODate("2012-02-24T09:23:12.246Z")

}{

"_id" : ObjectId("4f504e7ccd3e1c190ce04199"),"_t" : "PostSpark","Body" : "Hello World“" DateCreated" : ISODate("2012-02-28T10:44:12.858Z")

}

Page 31: MongoDB at community engine
Page 32: MongoDB at community engine
Page 33: MongoDB at community engine
Page 34: MongoDB at community engine

               

Views               

               

               

Page 35: MongoDB at community engine

Deployment of database with zero downtime

• We release every week• We aim at zero downtime• Our domain model change often

Page 36: MongoDB at community engine

Deployment of database with zero downtime

Make sure that our code can handle both "versions" of the data structure

When saving we updates to the new structure

Page 37: MongoDB at community engine

Deployment of database with zero downtime

• Use a migration script

Page 38: MongoDB at community engine

Expansion Script Deploy new version Compression Script

t

Deployment of database with zero downtime

Page 39: MongoDB at community engine

Questions?

Page 40: MongoDB at community engine

Thank you!

[email protected]@mathieukempe