SlideShare uma empresa Scribd logo
1 de 25
Click to edit Master title style
The Knot Search Platform
MongoLA 2013
About Us
           •   Weddings, Newlyweds, Babies, Style
           •   NYSE-traded under "XOXO"
           •   Founded in 1996 as AOL Channel
           •   11 million uniques / month


                   •   Articles / Blogs CMS
                   •   Photo Galleries
                   •   Membership / Favorites
                   •   Community Forums
                   •   Planning Tools
                   •   Local Directory
                   •   Gift Registry
                   •   Ecommerce



           If you haven't heard of us… watch out, your
           girlfriend probably has!
About Me

           Jason Sirota
 Director of Software Architecture
    XO Group Inc. (The Knot)




                                       jsirota@xogrp.com
                                     http://jasonsirota.com/
                                           @jasonsirota
Current Arch: Sharded By Business Line
  Consumer




                                                                                                                         My
                   Content   National      Tools        Comm.        Memb.           eComm     Registry    Local
                                                                                                                       Account
                     UX        UX         UX / API       UX          UX / API          UX      UX / API   UX / API
                                                                                                                         UX


                  Content    National    Tools        Comm.         Memb.           eComm      Registry   Local       My Acct.
                  Business   Business    Business     Business      Business        Business   Business   Business    Business
                  Logic      Logic       Logic        Logic         Logic           Logic      Logic      Logic       Logic




                                                      Comm-         Member-                               Local
                  Sitecore   National    Tools                                      Ecom       Registry               CES/ATS
                                                      unity         ship                                  Profiles
                  (SQL)      (SQL)       (SQL)                                      (SQL)      (Oracle)               (SQL)
                                                      (SQL)         (SQL)                                 (SQL)
      Databases




                                        UW            UGC
                  ODB                                                                          GR360
                                        (SQL)         Photos
                  (SQL)                                                                        (MySQL)
                                                      (SQL)



                                                       Pluck




                                                                                                                     Responsys
  Enterprise




                     CRM      GP        FatTail      GP Man




                                                                 Business Intelligence
Migrating to OSS and Cloud
   Consumer
   Solutions




   Web APIs
   AWS Elastic Beanstalk
   Federated via Apigee Services



   Caching                     Document Data   Relationships   Free-Text Search   Data Analysis   Key/Value Data
   Couchbase                   MongoDB         Neo4j           Solr               Hadoop          DynamoDB


   Relational Data
   SQL Server




   Enterprise Service Bus
   MSMQ (On-Premise)
   SQS (Cloud)
Why MongoDB?

Document DB Decided First: Schemaless Design


•   RavenDB (C#)                                 •   MongoDB
    –   Worked well with C# LINQ                     –   Mature Document Data Store
    –   Cross-collection Joins (but slow..)          –   Enterprise-level Support
    –   Very new to NoSQL Landscape                  –   High user-base
    –   Limited to C# and REST interface             –   LINQ and JSON-based querying
                                                     –   Locking issues resolved
                                                     –   GeoSearching
•   Couchbase 2.0
                                                     –   AWS I/O issues N/A
    –   Already familiar with Ops from Caching
    –   Masterless horizontal scaling
    –   Still in Beta during choice
    –   Map/Reduce-based queries only
Started this Migration with our
      Search Application
Many Data Stores



 Gowns   Products   Photos   Local Directory   Articles/Blogs   ECommerce   User Photos




                             "Gown"
Message-oriented Realtime Publishing
I hope you guys can read JSON
Message Format
 Message: {
      EntityId: "6765aec7-370d-4f1d-82d2-97647ccea94e",
      SearchType: "Product",
      Title: "Sloan by Sottero and Midgley",
      Url:"http://www.theknot.com/wedding-dress/sottero-midgley/sloansottero",

      //Images appear in the Image Search
      Images:[{
           Id: "04ed3a07-fcb5-41da-aa74-11214dcc8e27",
           Url: "http://xoedge.com/objects/0031/0107148/main_image.jpg",
      }],

      //Used for Solr Indexing
      Categories:["Gowns","Fashion"],
      Tags: ["modern","romantic"],
      Facets:[
           "Color":["White","Ivory"]
      ],
      Attributes: {
           "FeaturedVendor": true
      },
 }
Message-oriented Realtime Publishing
Persister
  "EntityMappings": [{                                                            Configure…
       "SearchType": "LocalProfile",
       "PersistenceType": "XO.Vendors.Core.Domain.Profile, XO.Vendors.Core",
       "MongoDatabase": "search",
       "MongoCollection": "profiles"
  }




  namespace XO.Vendors.Core.Domain
  {
      public class Profile : Entity, IReviewAggreate
      {
          public Address Address { get; set; }                                    …Define…
          public string Headline { get; set; }
          public List<Guid> ImageIds { get; set; }
          public string ImageId { get; set; }




  var server = MongoServer.Create(ConfigurationManager.ConnectionStrings["MongoDB"].ToString());
  var db = server.GetDatabase(config.MongoDatabase);
  var collection = db.GetCollection(config.MongoCollection);
  collection.Save(entity);
                                                                                       …Save.
Document Structure
Message-oriented Realtime Publishing
Search API
MongoDB Challenges
• UUID Endianness
  – Write C# GUID to Mongo
  – Retrieve UUID from Python, reverses
    Endianness, different value out

  def upendUUID(orig):
     return uuid.UUID(bytes=orig.bytes_le)


• C# Driver logged phantom errors at first:
  – "Could not Find MongoDB"
  – No other indicators of outage
Demo?
MongoDB Instances


                    • 1 Replica Set

                    • 5 MongoDB Instances

                    • 3 Availability Zones

                    • 20 EBS Volumes (R10)

                    • 250 IOPS per Volume

                    • EBS Snapshot Backups

                    • S3 Data Dump
Tested Traffic: Queries per Minute
Actual Traffic: Queries per Minute
How to lie with statistics…




           what we tested…



                             …what we got
Jason Sirota
 Director of Software Architecture
    XO Group Inc. (The Knot)




                                       jsirota@xogrp.com
The Knot                             http://jasonsirota.com/
                                           @jasonsirota

Mais conteúdo relacionado

Mais procurados

Please Don't Touch the Slow Parts V3
Please Don't Touch the Slow Parts V3Please Don't Touch the Slow Parts V3
Please Don't Touch the Slow Parts V3Federico Galassi
 
Java overview the piramide of success
Java overview the piramide of successJava overview the piramide of success
Java overview the piramide of successArtem Bilan
 
HTML5 소개 및 배우기- HTML5 Open Conference
HTML5 소개 및 배우기- HTML5 Open ConferenceHTML5 소개 및 배우기- HTML5 Open Conference
HTML5 소개 및 배우기- HTML5 Open ConferenceChanny Yun
 
Yahoo Pipes Middleware In The Cloud
Yahoo Pipes Middleware In The CloudYahoo Pipes Middleware In The Cloud
Yahoo Pipes Middleware In The CloudConSanFrancisco123
 
Designing Ajax Principles And Patterns For Designing Rich Internet Appl...
Designing  Ajax  Principles And  Patterns For Designing  Rich  Internet  Appl...Designing  Ajax  Principles And  Patterns For Designing  Rich  Internet  Appl...
Designing Ajax Principles And Patterns For Designing Rich Internet Appl...Manikanda kumar
 
OSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialOSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialSteven Francia
 
Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Chris Richardson
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5Doris Chen
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web appsyoavrubin
 
Modern Database Systems (for Genealogy)
Modern Database Systems (for Genealogy)Modern Database Systems (for Genealogy)
Modern Database Systems (for Genealogy)Steven Francia
 
Presenter manual web designing (specially for summer interns)
Presenter manual web designing (specially for summer interns)Presenter manual web designing (specially for summer interns)
Presenter manual web designing (specially for summer interns)XPERT INFOTECH
 

Mais procurados (13)

No sql way_in_pg
No sql way_in_pgNo sql way_in_pg
No sql way_in_pg
 
Please Don't Touch the Slow Parts V3
Please Don't Touch the Slow Parts V3Please Don't Touch the Slow Parts V3
Please Don't Touch the Slow Parts V3
 
Java overview the piramide of success
Java overview the piramide of successJava overview the piramide of success
Java overview the piramide of success
 
HTML5 소개 및 배우기- HTML5 Open Conference
HTML5 소개 및 배우기- HTML5 Open ConferenceHTML5 소개 및 배우기- HTML5 Open Conference
HTML5 소개 및 배우기- HTML5 Open Conference
 
Yahoo Pipes Middleware In The Cloud
Yahoo Pipes Middleware In The CloudYahoo Pipes Middleware In The Cloud
Yahoo Pipes Middleware In The Cloud
 
Designing Ajax Principles And Patterns For Designing Rich Internet Appl...
Designing  Ajax  Principles And  Patterns For Designing  Rich  Internet  Appl...Designing  Ajax  Principles And  Patterns For Designing  Rich  Internet  Appl...
Designing Ajax Principles And Patterns For Designing Rich Internet Appl...
 
OSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB TutorialOSCON 2012 MongoDB Tutorial
OSCON 2012 MongoDB Tutorial
 
Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)Developing polyglot applications on Cloud Foundry (#oredev 2012)
Developing polyglot applications on Cloud Foundry (#oredev 2012)
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5
 
Please dont touch-3.5
Please dont touch-3.5Please dont touch-3.5
Please dont touch-3.5
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web apps
 
Modern Database Systems (for Genealogy)
Modern Database Systems (for Genealogy)Modern Database Systems (for Genealogy)
Modern Database Systems (for Genealogy)
 
Presenter manual web designing (specially for summer interns)
Presenter manual web designing (specially for summer interns)Presenter manual web designing (specially for summer interns)
Presenter manual web designing (specially for summer interns)
 

Semelhante a Sharded By Business Line: Migrating to a Core Database using MongoDB and Solr

OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web Simulator
OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web SimulatorOSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web Simulator
OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web SimulatorGail Frederick
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repositorynobby
 
Jcon2020 keynote-high-performance-java-cloud-native
Jcon2020 keynote-high-performance-java-cloud-nativeJcon2020 keynote-high-performance-java-cloud-native
Jcon2020 keynote-high-performance-java-cloud-nativeMarkus Kett
 
AWS Summit Berlin 2012 Talk on Web Data Commons
AWS Summit Berlin 2012 Talk on Web Data CommonsAWS Summit Berlin 2012 Talk on Web Data Commons
AWS Summit Berlin 2012 Talk on Web Data CommonsHannes Mühleisen
 
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012Amazon Web Services
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applicationsSC5.io
 
Cloud Computing BP-Study 20090319
Cloud Computing BP-Study 20090319Cloud Computing BP-Study 20090319
Cloud Computing BP-Study 20090319Yukio Andoh
 
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing It
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing ItYou Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing It
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing ItAleksandr Yampolskiy
 
Engineering practices in big data storage and processing
Engineering practices in big data storage and processingEngineering practices in big data storage and processing
Engineering practices in big data storage and processingSchubert Zhang
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Pierre Joye
 
Application design for the cloud using AWS
Application design for the cloud using AWSApplication design for the cloud using AWS
Application design for the cloud using AWSJonathan Holloway
 
Jeff Barr Amazon Services Cloud Computing
Jeff Barr Amazon Services Cloud ComputingJeff Barr Amazon Services Cloud Computing
Jeff Barr Amazon Services Cloud Computingdeimos
 
Netflix on Cloud - combined slides for Dev and Ops
Netflix on Cloud - combined slides for Dev and OpsNetflix on Cloud - combined slides for Dev and Ops
Netflix on Cloud - combined slides for Dev and OpsAdrian Cockcroft
 
Introducing React to GraysOnline
Introducing React to GraysOnlineIntroducing React to GraysOnline
Introducing React to GraysOnlineJoseph Ni
 
Software Architecture
Software ArchitectureSoftware Architecture
Software ArchitectureYoav Avrahami
 
Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested John Culviner
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1James Pearce
 

Semelhante a Sharded By Business Line: Migrating to a Core Database using MongoDB and Solr (20)

Web 2.0 Futures
Web 2.0 FuturesWeb 2.0 Futures
Web 2.0 Futures
 
OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web Simulator
OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web SimulatorOSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web Simulator
OSCON 2012: Design and Debug HTML5 Apps for Devices with RIB and Web Simulator
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
 
Jcon2020 keynote-high-performance-java-cloud-native
Jcon2020 keynote-high-performance-java-cloud-nativeJcon2020 keynote-high-performance-java-cloud-native
Jcon2020 keynote-high-performance-java-cloud-native
 
AWS Summit Berlin 2012 Talk on Web Data Commons
AWS Summit Berlin 2012 Talk on Web Data CommonsAWS Summit Berlin 2012 Talk on Web Data Commons
AWS Summit Berlin 2012 Talk on Web Data Commons
 
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012
AWS Customer Presentation: Freie Univerisitat - Berlin Summit 2012
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applications
 
Cloud Computing BP-Study 20090319
Cloud Computing BP-Study 20090319Cloud Computing BP-Study 20090319
Cloud Computing BP-Study 20090319
 
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing It
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing ItYou Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing It
You Too Can Be a Radio Host Or How We Scaled a .NET Startup And Had Fun Doing It
 
Engineering practices in big data storage and processing
Engineering practices in big data storage and processingEngineering practices in big data storage and processing
Engineering practices in big data storage and processing
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18
 
Application design for the cloud using AWS
Application design for the cloud using AWSApplication design for the cloud using AWS
Application design for the cloud using AWS
 
Jeff Barr Amazon Services Cloud Computing
Jeff Barr Amazon Services Cloud ComputingJeff Barr Amazon Services Cloud Computing
Jeff Barr Amazon Services Cloud Computing
 
Netflix on Cloud - combined slides for Dev and Ops
Netflix on Cloud - combined slides for Dev and OpsNetflix on Cloud - combined slides for Dev and Ops
Netflix on Cloud - combined slides for Dev and Ops
 
Introducing React to GraysOnline
Introducing React to GraysOnlineIntroducing React to GraysOnline
Introducing React to GraysOnline
 
Log Analysis At Scale
Log Analysis At ScaleLog Analysis At Scale
Log Analysis At Scale
 
Netflix in the cloud 2011
Netflix in the cloud 2011Netflix in the cloud 2011
Netflix in the cloud 2011
 
Software Architecture
Software ArchitectureSoftware Architecture
Software Architecture
 
Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested Node.js and MongoDB from scratch, fully explained and tested
Node.js and MongoDB from scratch, fully explained and tested
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 

Mais de MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump StartMongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB
 

Mais de MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Sharded By Business Line: Migrating to a Core Database using MongoDB and Solr

  • 1. Click to edit Master title style The Knot Search Platform MongoLA 2013
  • 2. About Us • Weddings, Newlyweds, Babies, Style • NYSE-traded under "XOXO" • Founded in 1996 as AOL Channel • 11 million uniques / month • Articles / Blogs CMS • Photo Galleries • Membership / Favorites • Community Forums • Planning Tools • Local Directory • Gift Registry • Ecommerce If you haven't heard of us… watch out, your girlfriend probably has!
  • 3. About Me Jason Sirota Director of Software Architecture XO Group Inc. (The Knot) jsirota@xogrp.com http://jasonsirota.com/ @jasonsirota
  • 4. Current Arch: Sharded By Business Line Consumer My Content National Tools Comm. Memb. eComm Registry Local Account UX UX UX / API UX UX / API UX UX / API UX / API UX Content National Tools Comm. Memb. eComm Registry Local My Acct. Business Business Business Business Business Business Business Business Business Logic Logic Logic Logic Logic Logic Logic Logic Logic Comm- Member- Local Sitecore National Tools Ecom Registry CES/ATS unity ship Profiles (SQL) (SQL) (SQL) (SQL) (Oracle) (SQL) (SQL) (SQL) (SQL) Databases UW UGC ODB GR360 (SQL) Photos (SQL) (MySQL) (SQL) Pluck Responsys Enterprise CRM GP FatTail GP Man Business Intelligence
  • 5. Migrating to OSS and Cloud Consumer Solutions Web APIs AWS Elastic Beanstalk Federated via Apigee Services Caching Document Data Relationships Free-Text Search Data Analysis Key/Value Data Couchbase MongoDB Neo4j Solr Hadoop DynamoDB Relational Data SQL Server Enterprise Service Bus MSMQ (On-Premise) SQS (Cloud)
  • 6. Why MongoDB? Document DB Decided First: Schemaless Design • RavenDB (C#) • MongoDB – Worked well with C# LINQ – Mature Document Data Store – Cross-collection Joins (but slow..) – Enterprise-level Support – Very new to NoSQL Landscape – High user-base – Limited to C# and REST interface – LINQ and JSON-based querying – Locking issues resolved – GeoSearching • Couchbase 2.0 – AWS I/O issues N/A – Already familiar with Ops from Caching – Masterless horizontal scaling – Still in Beta during choice – Map/Reduce-based queries only
  • 7. Started this Migration with our Search Application
  • 8.
  • 9.
  • 10. Many Data Stores Gowns Products Photos Local Directory Articles/Blogs ECommerce User Photos "Gown"
  • 12. I hope you guys can read JSON
  • 13. Message Format Message: { EntityId: "6765aec7-370d-4f1d-82d2-97647ccea94e", SearchType: "Product", Title: "Sloan by Sottero and Midgley", Url:"http://www.theknot.com/wedding-dress/sottero-midgley/sloansottero", //Images appear in the Image Search Images:[{ Id: "04ed3a07-fcb5-41da-aa74-11214dcc8e27", Url: "http://xoedge.com/objects/0031/0107148/main_image.jpg", }], //Used for Solr Indexing Categories:["Gowns","Fashion"], Tags: ["modern","romantic"], Facets:[ "Color":["White","Ivory"] ], Attributes: { "FeaturedVendor": true }, }
  • 15. Persister "EntityMappings": [{ Configure… "SearchType": "LocalProfile", "PersistenceType": "XO.Vendors.Core.Domain.Profile, XO.Vendors.Core", "MongoDatabase": "search", "MongoCollection": "profiles" } namespace XO.Vendors.Core.Domain { public class Profile : Entity, IReviewAggreate { public Address Address { get; set; } …Define… public string Headline { get; set; } public List<Guid> ImageIds { get; set; } public string ImageId { get; set; } var server = MongoServer.Create(ConfigurationManager.ConnectionStrings["MongoDB"].ToString()); var db = server.GetDatabase(config.MongoDatabase); var collection = db.GetCollection(config.MongoCollection); collection.Save(entity); …Save.
  • 19. MongoDB Challenges • UUID Endianness – Write C# GUID to Mongo – Retrieve UUID from Python, reverses Endianness, different value out def upendUUID(orig): return uuid.UUID(bytes=orig.bytes_le) • C# Driver logged phantom errors at first: – "Could not Find MongoDB" – No other indicators of outage
  • 20. Demo?
  • 21. MongoDB Instances • 1 Replica Set • 5 MongoDB Instances • 3 Availability Zones • 20 EBS Volumes (R10) • 250 IOPS per Volume • EBS Snapshot Backups • S3 Data Dump
  • 24. How to lie with statistics… what we tested… …what we got
  • 25. Jason Sirota Director of Software Architecture XO Group Inc. (The Knot) jsirota@xogrp.com The Knot http://jasonsirota.com/ @jasonsirota

Notas do Editor

  1. Maintained by different teams in different physical locations – NY, Texas, China
  2. Idempotency and a Parallel Persistor – GUIDs generated off the source system, natural key or hash keyTime-based – last update for that guid wins
  3. Business Entity vs. a technical entity
  4. Idempotency and a Parallel Persistor – GUIDs generated off the source system, natural key or hash keyTime-based – last update for that guid wins
  5. We let the Mongo Driver serialize the C# object
  6. Images in a separate collectionList of Ids in main documentMongoView ScreenshotsMongoHacker Extension
  7. Idempotency and a Parallel Persistor – GUIDs generated off the source system, natural key or hash keyTime-based – last update for that guid wins
  8. Very small amount of traffic, IOPS not yet a conernWe haven&apos;t seen sporadic io latency in AWS reported by other companies
  9. Mongo holding data for all logging and event informationLabel Queries per Second
  10. Here they are on the same graph
  11. Click through fast