SlideShare a Scribd company logo
1 of 49
Download to read offline
Why we chose
   mongodb
for guardian.co.uk
           Graham Tackley
Web Platform Team Lead, guardian.co.uk
“It is not the strongest of the species that
survives, nor the most intelligent. It is the one
       that is most adaptable to change.”
Early Period

         circa ’95

The “Lash It Together” era
Early Period (95, the “Lash It Together” era)


 Perl, CGI, apache

  Experimental
Manual processes
Bespoke software

 RDBMS, scripts
  & static files
Mid Period

      circa ’00

The “Vendor CMS” era
Mid Period: 2000s (The “Vendor CMS era”)


 Vignette / AOLserver
 TCL, Apache, Oracle

  Platform for online
       publishing

Initially scales well with
acceleration in delivery
        of features
Mid Period: 2000s (The “Vendor CMS era”)


 Surprise! Vendor’s CMS
doesn’t do what we want!

 Mish-mash in templates:
 HTML, JavaScript, TCL,
      SQL, PL-SQL

No model in app tier, only
in RDBMS schema created
    in Oracle Designer
Mid Period: 2000s (The “Vendor CMS era”)
Mid Period: 2000s (The “Vendor CMS era”)
Mid Period: 2000s (The “Vendor CMS era”)



After a few years, very
   difficult to extend

  Database schema
becomes fixed due to
  dependencies in
     templates
Mid Period: 2000s (The “Vendor CMS era”)




If you can’t change the
        system:
Modern Period

       circa ’05-09

The “J2EE Monolithic” era
Why we chose mongodb for guardian.co.uk
Web server       Web server         Web server



  I bring you NEWS!!!
App server      App server          App server




                 Oracle


         CMS                  Data feeds
Web server         Web server         Web server
              Modern java app
  I bring you NEWS!!!
App server      App server            App server
           Spring / Hibernate

                 DDD / TDD

             Strong Oracle in java
                    model

 Database abstracted away with ORM
         CMS                    Data feeds
Problems
Each release involves schema upgrade

Schema upgrade = downtime for journalists
Complexity still increasing:

               300+ tables,
  10,000 lines of hibernate XML config
1,000 domain objects mapped to database
   70,000 lines of domain object code
      Very tight binding to database
ORM not really masking complexity:

 Database has strong influence on domain model: many
domain objects made more complex mapping joins in
                      RDBMS

Complex hibernate features used, interceptors, proxies

               Complex caching strategy
                Lots of optimisations

                    And:
We still hand code complex queries in SQL!
Load becoming an issue

RDBMS difficult to scale
Partial NoSQL

       circa ’09-10

The “Sticking Plaster” era
Introduce yet more caching to patch up load problems




                       Text




                   Introduction of memcached
Decouple applications from database by building APIs

Power APIs using alternative, more scalable technologies

         APIs used to scale out database reads

               Writes still go to RDBMs
Content API
Mutualised news!
   http://content.guardianapis.com

   Read API delivered using Apache Solr

              Hosted in EC2

    Document oriented search engine

      Scales well for read operations
Core
                             Api
   Web servers

                            Solr/API
    App server
                            Solr/API
Memcached (20Gb)
                            Solr/API

     rdbms         Solr
                            Solr/API

                            Solr/API

     CMS                  Cloud, EC2
Mutualised news!
We’ve solved our load problem (for now)

                 but

       Increased our complexity
Mutualised news!
      We now have 3 models!

           RDBMS tables

            Java Objects

             JSON API
Mutualised news!
Mutualised news!
Mutualised news!
MutualisedAPI is very simple
           JSON news!

Multiple domain concepts expressed in single document

     Can be designed in forwardly extensible way

What if the JSON API was our primary model?
Full NoSQL

    in development

The “It’s the future!” era
Database selection


      Simple keystore. Too simple?



     Huge scalability. Do we need it?
        Schema design difficult.


    Simple to use, can execute similar
           queries to RDBMs
MongoDB

 Mutualised news! database
     Document oriented
       Stores parsed JSON documents

        Can express complex queries

      Can be flexible about consistency

Malleable schema: can easily change at runtime

    Can work at both large & small scales
Flexible Schema


Mutualised news!
Flexible Schema


Mutualised news!
Flexible Schema


Mutualised news!
Can easily represent different classes of tag as
                 documents

    Both documents can be inserted into
             same collection

    Far simpler than equivalent hibernate
       mapped subclass configuration
Flexible Schema

        Simple to query:
Mutualised news!
Flexible Schema

              Simple to query:
Mutualised news!
            Query operators:
  $ne, $nin, $all, $exists, $gt, $lt, $gte ...
Modifying the schema


Mutualised news!
Modifying the schema


Mutualised news!
Modifying the schema


Mutualised news!
The first project: Identity

Current login/registration system still in TCL/PL-SQL

          3M+ users in relational database

          Very complex schema + PL-SQL

               New system required

      Can we migrate from Oracle to NoSql?
Build API that can support both backends


    Registration app         guardian.co.uk




                       API             This bit is hard!


                                       Oracle
Build API that can support both backends


    Registration app         guardian.co.uk




                       API



         MongoDB                       Oracle
Migrate using API & decommision


 Registration app         guardian.co.uk




                    API



      MongoDB
Add new stuff!


    Registration app           guardian.co.uk




                         API



MongoDB                Solr?                    Redis?
MongoDB

Simple, flexible schema with similar query & indexing to
                        RDBMS
              Great at small or large scale
            Easy for developers to get going
         Commercial support available (10Gen)
        One day may power all of guardian.co.uk

No transactions / joins: developers must cater for this

Produces a net reduction in lines of code / complexity
Shameless plugs




     http://content.guardianapis.com

              We’re hiring:
  http://www.gnmcareers.co.uk ref JS323



graham.tackley@guardian.co.uk - @tackers

More Related Content

What's hot

Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB
Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB
Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB MongoDB
 
Intro to Ruby on Rails
Intro to Ruby on RailsIntro to Ruby on Rails
Intro to Ruby on RailsMark Menard
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBMongoDB
 
Project Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SProject Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SThoughtWorks
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swaggerTony Tam
 
Constructing Web APIs with Rack, Sinatra and MongoDB
Constructing Web APIs with Rack, Sinatra and MongoDBConstructing Web APIs with Rack, Sinatra and MongoDB
Constructing Web APIs with Rack, Sinatra and MongoDBOisin Hurley
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Shaer Hassan
 
Effectively Deploying MongoDB on AEM
Effectively Deploying MongoDB on AEMEffectively Deploying MongoDB on AEM
Effectively Deploying MongoDB on AEMNorberto Leite
 
Melbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBMelbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBYuval Ararat
 
XML and Web Services with Groovy
XML and Web Services with GroovyXML and Web Services with Groovy
XML and Web Services with GroovyPaul King
 
Ruby on Rails Security
Ruby on Rails SecurityRuby on Rails Security
Ruby on Rails Securityamiable_indian
 
RESTful web service with JBoss Fuse
RESTful web service with JBoss FuseRESTful web service with JBoss Fuse
RESTful web service with JBoss Fuseejlp12
 
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...AOE
 
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...Amazon Web Services Korea
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integrationprajods
 
Cloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinCloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinJoshua Long
 
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container ServicePlay Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container ServiceJosh Padnick
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content RepositoryGabriel Walt
 
Apache Etch Introduction @ FOSDEM 2011
Apache Etch Introduction @ FOSDEM 2011Apache Etch Introduction @ FOSDEM 2011
Apache Etch Introduction @ FOSDEM 2011grandyho
 

What's hot (20)

Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB
Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB
Webinar: Adobe Experience Manager Clustering Made Easy on MongoDB
 
Intro to Ruby on Rails
Intro to Ruby on RailsIntro to Ruby on Rails
Intro to Ruby on Rails
 
Apache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDBApache Jackrabbit Oak on MongoDB
Apache Jackrabbit Oak on MongoDB
 
Project Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SProject Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G S
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
 
Constructing Web APIs with Rack, Sinatra and MongoDB
Constructing Web APIs with Rack, Sinatra and MongoDBConstructing Web APIs with Rack, Sinatra and MongoDB
Constructing Web APIs with Rack, Sinatra and MongoDB
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09
 
Effectively Deploying MongoDB on AEM
Effectively Deploying MongoDB on AEMEffectively Deploying MongoDB on AEM
Effectively Deploying MongoDB on AEM
 
Melbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBMelbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDB
 
XML and Web Services with Groovy
XML and Web Services with GroovyXML and Web Services with Groovy
XML and Web Services with Groovy
 
Ruby on Rails Security
Ruby on Rails SecurityRuby on Rails Security
Ruby on Rails Security
 
RESTful web service with JBoss Fuse
RESTful web service with JBoss FuseRESTful web service with JBoss Fuse
RESTful web service with JBoss Fuse
 
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
 
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...
[AWS Dev Day] 이머징 테크 | Libra 소스코드분석 및 AWS에서 블록체인 기반 지불 시스템 최적화 방법 - 박혜영 AWS 솔...
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integration
 
Deep Dive into AWS Fargate
Deep Dive into AWS FargateDeep Dive into AWS Fargate
Deep Dive into AWS Fargate
 
Cloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and VaadinCloud Foundry, Spring and Vaadin
Cloud Foundry, Spring and Vaadin
 
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container ServicePlay Framework + Docker + CircleCI + AWS + EC2 Container Service
Play Framework + Docker + CircleCI + AWS + EC2 Container Service
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content Repository
 
Apache Etch Introduction @ FOSDEM 2011
Apache Etch Introduction @ FOSDEM 2011Apache Etch Introduction @ FOSDEM 2011
Apache Etch Introduction @ FOSDEM 2011
 

Viewers also liked

The Future of Work
The Future of WorkThe Future of Work
The Future of WorkAchievers
 
Gear Cutting Presentation for Polytechnic College Students of India
Gear Cutting Presentation for Polytechnic College Students of IndiaGear Cutting Presentation for Polytechnic College Students of India
Gear Cutting Presentation for Polytechnic College Students of Indiakichu
 
Introduction To Software Engineering
Introduction To Software EngineeringIntroduction To Software Engineering
Introduction To Software EngineeringLeyla Bonilla
 
Fintech and Transformation of the Financial Services Industry
Fintech and Transformation of the Financial Services IndustryFintech and Transformation of the Financial Services Industry
Fintech and Transformation of the Financial Services IndustryRobin Teigland
 
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)MaRS Discovery District
 
Introductory Lecture on photography
Introductory Lecture on photographyIntroductory Lecture on photography
Introductory Lecture on photographyAditya Rao
 
Water Balance Analysis
Water Balance AnalysisWater Balance Analysis
Water Balance AnalysisC. P. Kumar
 
Disruptive Innovation, Kodak and digital imaging
Disruptive Innovation, Kodak and digital imagingDisruptive Innovation, Kodak and digital imaging
Disruptive Innovation, Kodak and digital imagingChris Sandström
 
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)Jodie Harper
 
Social Media Crisis Management: Three Case Studies
Social Media Crisis Management: Three Case StudiesSocial Media Crisis Management: Three Case Studies
Social Media Crisis Management: Three Case StudiesElisha Tan
 
FMCG / CPG Consumer Trends 2015 - Product Innovations of the Year
FMCG / CPG Consumer Trends 2015 - Product Innovations of the YearFMCG / CPG Consumer Trends 2015 - Product Innovations of the Year
FMCG / CPG Consumer Trends 2015 - Product Innovations of the YearBrand Genetics
 
Correlation and regression
Correlation and regressionCorrelation and regression
Correlation and regressionKhalid Aziz
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5Alphorm
 
Are Content Strategists the Next Corporate Rock Stars?
Are Content Strategists the Next Corporate Rock Stars?Are Content Strategists the Next Corporate Rock Stars?
Are Content Strategists the Next Corporate Rock Stars?Mark Fidelman
 

Viewers also liked (20)

The Future of Work
The Future of WorkThe Future of Work
The Future of Work
 
Office 365: Do’s and Don’ts, Lessons learned from the field
Office 365: Do’s and Don’ts, Lessons learned from the fieldOffice 365: Do’s and Don’ts, Lessons learned from the field
Office 365: Do’s and Don’ts, Lessons learned from the field
 
Water Quality Control and Treatment Water Treatment
Water Quality Control and Treatment Water Treatment Water Quality Control and Treatment Water Treatment
Water Quality Control and Treatment Water Treatment
 
Gear Cutting Presentation for Polytechnic College Students of India
Gear Cutting Presentation for Polytechnic College Students of IndiaGear Cutting Presentation for Polytechnic College Students of India
Gear Cutting Presentation for Polytechnic College Students of India
 
Introduction To Software Engineering
Introduction To Software EngineeringIntroduction To Software Engineering
Introduction To Software Engineering
 
Fintech and Transformation of the Financial Services Industry
Fintech and Transformation of the Financial Services IndustryFintech and Transformation of the Financial Services Industry
Fintech and Transformation of the Financial Services Industry
 
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)
Go-To-Market Strategy - Entrepreneurship 101 (2012/2013)
 
Pneumonia
Pneumonia Pneumonia
Pneumonia
 
Introductory Lecture on photography
Introductory Lecture on photographyIntroductory Lecture on photography
Introductory Lecture on photography
 
Principles of design
Principles of designPrinciples of design
Principles of design
 
Water Balance Analysis
Water Balance AnalysisWater Balance Analysis
Water Balance Analysis
 
Disruptive Innovation, Kodak and digital imaging
Disruptive Innovation, Kodak and digital imagingDisruptive Innovation, Kodak and digital imaging
Disruptive Innovation, Kodak and digital imaging
 
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)
Stress At Work (Tips to Reduce and Manage Job and Workplace Stress)
 
Social Media Crisis Management: Three Case Studies
Social Media Crisis Management: Three Case StudiesSocial Media Crisis Management: Three Case Studies
Social Media Crisis Management: Three Case Studies
 
State of Startups 2016
State of Startups 2016State of Startups 2016
State of Startups 2016
 
Process sequence of weaving
Process sequence of weavingProcess sequence of weaving
Process sequence of weaving
 
FMCG / CPG Consumer Trends 2015 - Product Innovations of the Year
FMCG / CPG Consumer Trends 2015 - Product Innovations of the YearFMCG / CPG Consumer Trends 2015 - Product Innovations of the Year
FMCG / CPG Consumer Trends 2015 - Product Innovations of the Year
 
Correlation and regression
Correlation and regressionCorrelation and regression
Correlation and regression
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5
 
Are Content Strategists the Next Corporate Rock Stars?
Are Content Strategists the Next Corporate Rock Stars?Are Content Strategists the Next Corporate Rock Stars?
Are Content Strategists the Next Corporate Rock Stars?
 

Similar to Why we chose mongodb for guardian.co.uk

Moving from Relational to Document Store
Moving from Relational to Document StoreMoving from Relational to Document Store
Moving from Relational to Document StoreGraham Tackley
 
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukRoger Xia
 
No SQL at The Guardian
No SQL at The GuardianNo SQL at The Guardian
No SQL at The GuardianMat Wall
 
NoSql presentation
NoSql presentationNoSql presentation
NoSql presentationMat Wall
 
MongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewMongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewPierre Baillet
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on RailsViridians
 
Modern Architectures with Spring and JavaScript
Modern Architectures with Spring and JavaScriptModern Architectures with Spring and JavaScript
Modern Architectures with Spring and JavaScriptmartinlippert
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsSteven Francia
 
DAT101 Understanding AWS Database Options - AWS re: Invent 2012
DAT101 Understanding AWS Database Options - AWS re: Invent 2012DAT101 Understanding AWS Database Options - AWS re: Invent 2012
DAT101 Understanding AWS Database Options - AWS re: Invent 2012Amazon Web Services
 
What is Amazon Web Services & How to Start to deploy your apps ?
What is Amazon Web Services & How to Start to deploy your apps ?What is Amazon Web Services & How to Start to deploy your apps ?
What is Amazon Web Services & How to Start to deploy your apps ?Sébastien ☁ Stormacq
 
AWS Webcast - Understanding database options
AWS Webcast - Understanding database optionsAWS Webcast - Understanding database options
AWS Webcast - Understanding database optionsAmazon Web Services
 
DAT322_The Nanoservices Architecture That Powers BBC Online
DAT322_The Nanoservices Architecture That Powers BBC OnlineDAT322_The Nanoservices Architecture That Powers BBC Online
DAT322_The Nanoservices Architecture That Powers BBC OnlineAmazon Web Services
 
JAX 2012: Moderne Architektur mit Spring und JavaScript
JAX 2012: Moderne Architektur mit Spring und JavaScriptJAX 2012: Moderne Architektur mit Spring und JavaScript
JAX 2012: Moderne Architektur mit Spring und JavaScriptmartinlippert
 
Scaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinScaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinAmazon Web Services
 
Scaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinScaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinIan Massingham
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN StackRob Davarnia
 
Aws-What You Need to Know_Simon Elisha
Aws-What You Need to Know_Simon ElishaAws-What You Need to Know_Simon Elisha
Aws-What You Need to Know_Simon ElishaHelen Rogers
 
Netflix in the Cloud at SV Forum
Netflix in the Cloud at SV ForumNetflix in the Cloud at SV Forum
Netflix in the Cloud at SV ForumAdrian Cockcroft
 

Similar to Why we chose mongodb for guardian.co.uk (20)

Moving from Relational to Document Store
Moving from Relational to Document StoreMoving from Relational to Document Store
Moving from Relational to Document Store
 
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
 
No SQL at The Guardian
No SQL at The GuardianNo SQL at The Guardian
No SQL at The Guardian
 
NoSql presentation
NoSql presentationNoSql presentation
NoSql presentation
 
MongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewMongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of view
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on Rails
 
Modern Architectures with Spring and JavaScript
Modern Architectures with Spring and JavaScriptModern Architectures with Spring and JavaScript
Modern Architectures with Spring and JavaScript
 
Understanding Database Options
Understanding Database OptionsUnderstanding Database Options
Understanding Database Options
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS Applications
 
DAT101 Understanding AWS Database Options - AWS re: Invent 2012
DAT101 Understanding AWS Database Options - AWS re: Invent 2012DAT101 Understanding AWS Database Options - AWS re: Invent 2012
DAT101 Understanding AWS Database Options - AWS re: Invent 2012
 
Intro to Sails.js
Intro to Sails.jsIntro to Sails.js
Intro to Sails.js
 
What is Amazon Web Services & How to Start to deploy your apps ?
What is Amazon Web Services & How to Start to deploy your apps ?What is Amazon Web Services & How to Start to deploy your apps ?
What is Amazon Web Services & How to Start to deploy your apps ?
 
AWS Webcast - Understanding database options
AWS Webcast - Understanding database optionsAWS Webcast - Understanding database options
AWS Webcast - Understanding database options
 
DAT322_The Nanoservices Architecture That Powers BBC Online
DAT322_The Nanoservices Architecture That Powers BBC OnlineDAT322_The Nanoservices Architecture That Powers BBC Online
DAT322_The Nanoservices Architecture That Powers BBC Online
 
JAX 2012: Moderne Architektur mit Spring und JavaScript
JAX 2012: Moderne Architektur mit Spring und JavaScriptJAX 2012: Moderne Architektur mit Spring und JavaScript
JAX 2012: Moderne Architektur mit Spring und JavaScript
 
Scaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinScaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit Dublin
 
Scaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit DublinScaling on AWS for the First 10 Million Users at Websummit Dublin
Scaling on AWS for the First 10 Million Users at Websummit Dublin
 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
 
Aws-What You Need to Know_Simon Elisha
Aws-What You Need to Know_Simon ElishaAws-What You Need to Know_Simon Elisha
Aws-What You Need to Know_Simon Elisha
 
Netflix in the Cloud at SV Forum
Netflix in the Cloud at SV ForumNetflix in the Cloud at SV Forum
Netflix in the Cloud at SV Forum
 

More from Graham Tackley

Newsgeist 2017 - Ignite Talk
Newsgeist 2017 - Ignite TalkNewsgeist 2017 - Ignite Talk
Newsgeist 2017 - Ignite TalkGraham Tackley
 
How elasticsearch powers the Guardian's newsroom
How elasticsearch powers the Guardian's newsroomHow elasticsearch powers the Guardian's newsroom
How elasticsearch powers the Guardian's newsroomGraham Tackley
 
Scala: simplifying development at guardian.co.uk
Scala: simplifying development at guardian.co.ukScala: simplifying development at guardian.co.uk
Scala: simplifying development at guardian.co.ukGraham Tackley
 
Java to Scala: Why & How
Java to Scala: Why & HowJava to Scala: Why & How
Java to Scala: Why & HowGraham Tackley
 
LSUG: How we (mostly) moved from Java to Scala
LSUG: How we (mostly) moved from Java to ScalaLSUG: How we (mostly) moved from Java to Scala
LSUG: How we (mostly) moved from Java to ScalaGraham Tackley
 

More from Graham Tackley (6)

Newsgeist 2017 - Ignite Talk
Newsgeist 2017 - Ignite TalkNewsgeist 2017 - Ignite Talk
Newsgeist 2017 - Ignite Talk
 
How elasticsearch powers the Guardian's newsroom
How elasticsearch powers the Guardian's newsroomHow elasticsearch powers the Guardian's newsroom
How elasticsearch powers the Guardian's newsroom
 
Scala: simplifying development at guardian.co.uk
Scala: simplifying development at guardian.co.ukScala: simplifying development at guardian.co.uk
Scala: simplifying development at guardian.co.uk
 
Java to Scala: Why & How
Java to Scala: Why & HowJava to Scala: Why & How
Java to Scala: Why & How
 
LSUG: How we (mostly) moved from Java to Scala
LSUG: How we (mostly) moved from Java to ScalaLSUG: How we (mostly) moved from Java to Scala
LSUG: How we (mostly) moved from Java to Scala
 
Java to scala
Java to scalaJava to scala
Java to scala
 

Recently uploaded

OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 

Recently uploaded (20)

OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 

Why we chose mongodb for guardian.co.uk

  • 1. Why we chose mongodb for guardian.co.uk Graham Tackley Web Platform Team Lead, guardian.co.uk
  • 2. “It is not the strongest of the species that survives, nor the most intelligent. It is the one that is most adaptable to change.”
  • 3. Early Period circa ’95 The “Lash It Together” era
  • 4. Early Period (95, the “Lash It Together” era) Perl, CGI, apache Experimental Manual processes Bespoke software RDBMS, scripts & static files
  • 5. Mid Period circa ’00 The “Vendor CMS” era
  • 6. Mid Period: 2000s (The “Vendor CMS era”) Vignette / AOLserver TCL, Apache, Oracle Platform for online publishing Initially scales well with acceleration in delivery of features
  • 7. Mid Period: 2000s (The “Vendor CMS era”) Surprise! Vendor’s CMS doesn’t do what we want! Mish-mash in templates: HTML, JavaScript, TCL, SQL, PL-SQL No model in app tier, only in RDBMS schema created in Oracle Designer
  • 8. Mid Period: 2000s (The “Vendor CMS era”)
  • 9. Mid Period: 2000s (The “Vendor CMS era”)
  • 10. Mid Period: 2000s (The “Vendor CMS era”) After a few years, very difficult to extend Database schema becomes fixed due to dependencies in templates
  • 11. Mid Period: 2000s (The “Vendor CMS era”) If you can’t change the system:
  • 12. Modern Period circa ’05-09 The “J2EE Monolithic” era
  • 14. Web server Web server Web server I bring you NEWS!!! App server App server App server Oracle CMS Data feeds
  • 15. Web server Web server Web server Modern java app I bring you NEWS!!! App server App server App server Spring / Hibernate DDD / TDD Strong Oracle in java model Database abstracted away with ORM CMS Data feeds
  • 17. Each release involves schema upgrade Schema upgrade = downtime for journalists
  • 18. Complexity still increasing: 300+ tables, 10,000 lines of hibernate XML config 1,000 domain objects mapped to database 70,000 lines of domain object code Very tight binding to database
  • 19. ORM not really masking complexity: Database has strong influence on domain model: many domain objects made more complex mapping joins in RDBMS Complex hibernate features used, interceptors, proxies Complex caching strategy Lots of optimisations And: We still hand code complex queries in SQL!
  • 20. Load becoming an issue RDBMS difficult to scale
  • 21. Partial NoSQL circa ’09-10 The “Sticking Plaster” era
  • 22. Introduce yet more caching to patch up load problems Text Introduction of memcached
  • 23. Decouple applications from database by building APIs Power APIs using alternative, more scalable technologies APIs used to scale out database reads Writes still go to RDBMs
  • 24. Content API Mutualised news! http://content.guardianapis.com Read API delivered using Apache Solr Hosted in EC2 Document oriented search engine Scales well for read operations
  • 25. Core Api Web servers Solr/API App server Solr/API Memcached (20Gb) Solr/API rdbms Solr Solr/API Solr/API CMS Cloud, EC2
  • 26. Mutualised news! We’ve solved our load problem (for now) but Increased our complexity
  • 27. Mutualised news! We now have 3 models! RDBMS tables Java Objects JSON API
  • 31. MutualisedAPI is very simple JSON news! Multiple domain concepts expressed in single document Can be designed in forwardly extensible way What if the JSON API was our primary model?
  • 32. Full NoSQL in development The “It’s the future!” era
  • 33. Database selection Simple keystore. Too simple? Huge scalability. Do we need it? Schema design difficult. Simple to use, can execute similar queries to RDBMs
  • 34. MongoDB Mutualised news! database Document oriented Stores parsed JSON documents Can express complex queries Can be flexible about consistency Malleable schema: can easily change at runtime Can work at both large & small scales
  • 37. Flexible Schema Mutualised news! Can easily represent different classes of tag as documents Both documents can be inserted into same collection Far simpler than equivalent hibernate mapped subclass configuration
  • 38. Flexible Schema Simple to query: Mutualised news!
  • 39. Flexible Schema Simple to query: Mutualised news! Query operators: $ne, $nin, $all, $exists, $gt, $lt, $gte ...
  • 43. The first project: Identity Current login/registration system still in TCL/PL-SQL 3M+ users in relational database Very complex schema + PL-SQL New system required Can we migrate from Oracle to NoSql?
  • 44. Build API that can support both backends Registration app guardian.co.uk API This bit is hard! Oracle
  • 45. Build API that can support both backends Registration app guardian.co.uk API MongoDB Oracle
  • 46. Migrate using API & decommision Registration app guardian.co.uk API MongoDB
  • 47. Add new stuff! Registration app guardian.co.uk API MongoDB Solr? Redis?
  • 48. MongoDB Simple, flexible schema with similar query & indexing to RDBMS Great at small or large scale Easy for developers to get going Commercial support available (10Gen) One day may power all of guardian.co.uk No transactions / joins: developers must cater for this Produces a net reduction in lines of code / complexity
  • 49. Shameless plugs http://content.guardianapis.com We’re hiring: http://www.gnmcareers.co.uk ref JS323 graham.tackley@guardian.co.uk - @tackers

Editor's Notes

  1. \n\n
  2. Theme: evolution of platform\nadapting to change is critical - will start with some history as to how we adapted to chg\n\n
  3. \n
  4. Ancient system\nScripts & database\nBespoke software, changes difficult\n
  5. \n
  6. Site oriented to broadcast publishing model\nCMS helps. No longer lashing things together \n\n
  7. Template & rdbms oriented design, and TCL = no real domain model\nHeavyweight schema change process\n\n
  8. This is from a TEMPLATE!\nscroll down to reveal HTML\n(about 10,000 of these)\n
  9. bottom of template\nabout 10,000 of these!\n\n
  10. Can’t change schema easily, to many dependencies in templates\n\n
  11. dodo\ne.g. at start just articles; now video, interactives, audio, galleries, live blogs...\n
  12. \n
  13. “Web 2.0”, community, RSS, discoverability, tagging.\n\n
  14. Very standard 3 tier application\nScale application servers on load\nCaching local to application server at first. Memcached added later\nRead heavy, broadcast model. Almost no writes compared to reads\n\n
  15. Very standard 3 tier application\nScale application servers on load\nCaching local to application server at first. Memcached added later (in next era!)\nRead heavy, broadcast model. Almost no writes compared to reads\n\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. Talk: beginning to use NoSql in real organisation. Change in journalism affecting platform\n\n
  22. We don’t have a scale problem with current application & model\n(Interesting fact: small dip at end is actually period of very high load. Caching works)\n\n
  23. Talk: beginning to use NoSql in real organisation. Change in journalism affecting platform\n\n
  24. Most of our new features - and partners - drive from the content api\n
  25. Introduction of memcached & Solr\nSolr hosted in the cloud (EC2)\n
  26. “Out” service\n
  27. \n
  28. Most recent content\n\n
  29. Most recent content with tags, fields\n(this is pretty well how we went live with the content api)\n\n\n
  30. Single article with media\nExtensible schema, eg: adding geotagging to images. Hard in DB, easy in JSON\nThis document represents at least 30 database tables!\n\n\n
  31. \n\n
  32. \n
  33. Couch used at BBC. To simple.\nCassandra: Impressive. Do we need it? Schema design tricky.\nMongoDB: Not a huge mindset change. Devs working in a few days\n
  34. Not a million miles from a RDBMS\nSimpler\n
  35. Experiments with mongodb & content API\nGuardian site categorises content with tags\nTone tag represents “editorial tone” of content\n(SKIP IF LESS THAN 10 MINS TO GO!)\n\n
  36. Different tag types can have different schemas\nKeywords (subjects) are in a section, music / madonna\n\n
  37. \n\n
  38. \n\n
  39. \n\n
  40. Suppose we want to add external musicbrainz ID to tag?\nAn update can modify the schema at runtime. No downtime.\n\n
  41. Where clause: id\n$push atomically ads external reference onto tag\n\n
  42. Resulting document now looks like this\n\n
  43. Migration project, not green fields\n
  44. REST API\nMapped initially just to oracle, then (next slide) to both datastores\nIntegration tested\n\n
  45. API supports both data stores - lazy migration\nCurrently writing this - so far 60-70% less code for mongo version\n\n
  46. Then batch migration and bye bye oracle\n
  47. In the future?\n\n
  48. \n\n
  49. \n\n