SlideShare a Scribd company logo
MongoSF 4/30/2010From MySQL to MongoDBMigrating a Live ApplicationTony Tam
What is WordnikProject to track language like GPS for EnglishDictionary is a road block to the languageRoughly 200 new words created dailyLanguage is not staticCapture information about all wordsMeaning is often undefined in traditional senseMachines can determine meaning through analysisNeeds LOTS of data
Why should You careEvery Developer can use a Robust Language API!Wordnik migrated to MongoDB> 5 Billion documents> 1.2 TBZero application downtimeLearn from our Experience
WordnikNot just a website!But we have oneLaunched Wordnik entirely on MySQLHit road bumps with insert speed ~4B rows on MyISAMtablesTables locked for 10’s of seconds during insertsBut we need more data!Created elaborate update schemes to work around itLost lots of sleep babysitting servers while researching LT solution
Wordnik + MongoDBWhat are our storage needs?Database vs. Application LogicNo PK/FK constraintsNo Stored ProceduresConsistency?Lots of R&DTried most all noSQL solutions
Migrating Storage EnginesMany parts to this effortSetup & AdministrationSoftware DesignOptimizationMany types of data at WordnikCorpusStructured HierarchicalDataUser DataMigrated #1 & #2
Server InfrastructureWordnik is Heavily Read-onlyMaster / Slave deploymentLooking at replica pairsMongoDB loves system resourcesWordnik runs dedicated boxes to avoid other apps being sent to disk (aka time-out)Memory + Disk = Happy MongoMany X the disk space of MySQLEasy pill to swallow until…
Server InfrastructurePhysical Hardware2 x 4 core CPU, 32gb RAM, FC SANHad bad luck on VMs(you might not)Disk speed => performance
Software DesignTwo distinct use cases for MongoDBIdentical structure, different storage engineSame underlying objects, same storage fidelity (largelykey/value)Hierarchical data structureSame underlying objects, document-oriented storage
Software DesignCreate BasicDBObjects from POJOs and used collection methodsBasicDBObjectdbo = new BasicDBObject("sentence",s.getSentence()) .append("rating",s.getRating()).append(...);ID Generation to manage unique _ID valuesAnalogous to MySQL AutoIncrement behaviorCompatible with MySQL Ids (more later)dbo.append("_ID", getId());collection.save(dbo);Implemented all CRUD methods in DAOSwappable between MongoDB and MySQL at runtime
Software DesignKey-Value storage use caseEasy as implementing new DAOsSentenceHandlerh = new MongoDBSentenceHandler();Save methods construct BasicDBObject and call save() on collectionImplement same interfaceSame methods against DAO between MySQL and MongoDB versionsData Abstraction 101
Software DesignWhat about bulk inserts?FAF Queued approachAdd objects to queue, return to callerEvery X seconds, process queueAll objects from same collection are appended to a single List<DBObject>Call collection.insert(…) before 2M charactersReduces network overheadVery fast inserts
Software DesignHierarchical Data done more elegantlyWordnik Dictionary ModelJava POJOs already had JAXB annotationsPart of public REST apiUsed Mysql12+ tables13 DAOs2500 lines of code50 requests/second uncachedMemcache needed to maintain reasonable speed
Software DesignTMGO
Software DesignMongoDB’s Document Storage let us…Turn the Objects into JSON via Jackson Mapper (fasterxml.com)Call saveSupport all fetch types, enhanced filters1000 requests / secondNo explicit cachingNo less scary code
Software DesignSaving a complex objectString rawJSON = getMapper().writeValueAsString(veryComplexObject);collection.save(newBasicDBOBject(getId(),JSON.parse(rawJSON));Fetching complex objectBasicDBObjectdbo = cursor.next();ComplexObjectobj = getMapper().readValue(dbo.toString(), ComplexObject.class);No joins, 20x faster
Migrating DataMigrating => existing data logicUse logic to select DAOs appropriatelyRead from old, write with newGreat system test for MongoDBSentenceHandlermysqlSh = new MySQLSentenceHandler();SentenceHandlermongoSh = new MongoDbSentenceHandler();while(hasMoreData){mongoSh.asyncWrite(mysqlSh.next());    ...}
Migrating DataWordnik moved 5 billion rows from MySQLSustained 100,000 inserts/secondMigration tool was CPU boundID generation logic, among otherWordnik reads MongoDB fastRead + create java objects @ 250k/second (!)
Going live to ProductionChoose your use case carefully if migrating incrementallyScary no matter whatTest your perf monitoring system first!Use your DAOs from migrationTurn on MongoDB on one server, monitor, tune (rollback, repeat)Full switch over when comfortable
Going live to ProductionReally?SentenceHandlerh = null;if(useMongoDb){h = new MongoDbSentenceHandler();}else{h = new MySQLDbSentenceHandler();}return h.find(...);
Optimizing PerformanceHome-grown connection poolingMaster onlyConnectionManager.getReadWriteConnection()Slave onlyConnectionManager.getReadOnlyConnection()Round-robin all servers, bias on slavesConnectionManager.getConnection()
Optimizing PerformanceCachingHad complex logic to handle cache invalidationOut-of-process caches are not freeMongoDB loves your RAMLet it do your LRU cache (it will anyway)HardwareDo not skimp on your disk or RAMIndexesSchema-less designEven if no values in any document, needs to read document schema to check
Optimizing PerformanceDisk spaceSchemaless => schema per document (row)Choose your mappings wisely({veryLongAttributeName:true}) => more disk space than ({vlan:true})
Optimizing PerformanceA Typical Day at the Office for MongoDBAPI call rate: 47.7 calls/sec
Other TipsData TypesUse caution when changingDBObjectobj = cur.next();long id = (Long) obj.get(“IWasAnIntOnce”)Attribute namesDon’t change w/o migrating existing data!WTFDMDG????
What’s next?GridFSStore audio files on diskRequires clustered file system for shared accessCapped Collections (rolling out this week)UGC from MySQL => MongoDBBeg/Bribe 10gen for some Features
Questions?

More Related Content

What's hot (20)

PPTX
Running MongoDB in the Cloud
Tony Tam
 
PPTX
ElasticSearch for data mining
William Simms
 
KEY
Living with SQL and NoSQL at craigslist, a Pragmatic Approach
Jeremy Zawodny
 
PPTX
How to migrate your existing MongoDB and Cassandra Apps to Azure Cosmos DB
Microsoft Tech Community
 
PDF
ManetoDB: Key/Value storage, BigData in Open Stack_Сергей Ковалев, Илья Свиридов
GeeksLab Odessa
 
KEY
Sphinx at Craigslist in 2012
Jeremy Zawodny
 
PDF
Realtime Search Infrastructure at Craigslist (OpenWest 2014)
Jeremy Zawodny
 
PDF
Tweaking perfomance on high-load projects_Думанский Дмитрий
GeeksLab Odessa
 
PPTX
Dev Jumpstart: Build Your First App with MongoDB
MongoDB
 
ODP
MySQL And Search At Craigslist
Jeremy Zawodny
 
PPTX
Lightning talk: elasticsearch at Cogenta
Yann Cluchey
 
PDF
Mongo presentation conf
Shridhar Joshi
 
PPTX
An Introduction to MongoDB Compass
MongoDB
 
PPTX
Concurrency Patterns with MongoDB
Yann Cluchey
 
PPTX
Fusion-io and MySQL at Craigslist
Jeremy Zawodny
 
PDF
Nosql why and how on Microsoft Azure
Vito Flavio Lorusso
 
PPT
Intergalactic data speak_highload++_20131028
David Fetter
 
PPTX
Node js crash course session 5
Abdul Rahman Masri Attal
 
PDF
tdtechtalk20160330johan
Johan Gustavsson
 
PDF
Intro Couchdb
selvamanisampath
 
Running MongoDB in the Cloud
Tony Tam
 
ElasticSearch for data mining
William Simms
 
Living with SQL and NoSQL at craigslist, a Pragmatic Approach
Jeremy Zawodny
 
How to migrate your existing MongoDB and Cassandra Apps to Azure Cosmos DB
Microsoft Tech Community
 
ManetoDB: Key/Value storage, BigData in Open Stack_Сергей Ковалев, Илья Свиридов
GeeksLab Odessa
 
Sphinx at Craigslist in 2012
Jeremy Zawodny
 
Realtime Search Infrastructure at Craigslist (OpenWest 2014)
Jeremy Zawodny
 
Tweaking perfomance on high-load projects_Думанский Дмитрий
GeeksLab Odessa
 
Dev Jumpstart: Build Your First App with MongoDB
MongoDB
 
MySQL And Search At Craigslist
Jeremy Zawodny
 
Lightning talk: elasticsearch at Cogenta
Yann Cluchey
 
Mongo presentation conf
Shridhar Joshi
 
An Introduction to MongoDB Compass
MongoDB
 
Concurrency Patterns with MongoDB
Yann Cluchey
 
Fusion-io and MySQL at Craigslist
Jeremy Zawodny
 
Nosql why and how on Microsoft Azure
Vito Flavio Lorusso
 
Intergalactic data speak_highload++_20131028
David Fetter
 
Node js crash course session 5
Abdul Rahman Masri Attal
 
tdtechtalk20160330johan
Johan Gustavsson
 
Intro Couchdb
selvamanisampath
 

Similar to From MySQL to MongoDB at Wordnik (Tony Tam) (20)

PPTX
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
DATAVERSITY
 
KEY
Hybrid MongoDB and RDBMS Applications
Steven Francia
 
PPTX
Techorama - Evolvable Application Development with MongoDB
bwullems
 
ODP
No More SQL
Glenn Street
 
PPTX
Bangalore Executive Seminar 2015: Business Transformation Case Study - Tecnotree
MongoDB
 
PPT
MongoDb - Details on the POC
Amardeep Vishwakarma
 
PPTX
Webinar: Migrating from RDBMS to MongoDB
MongoDB
 
PPTX
MongoDB Schema Design by Examples
Hadi Ariawan
 
PDF
MongoDB Basics
Sarang Shravagi
 
PDF
Introduction to MongoDB
Mike Dirolf
 
PDF
How to Get Started with Your MongoDB Pilot Project
DATAVERSITY
 
PPTX
Mongo db intro.pptx
JWORKS powered by Ordina
 
PDF
Mongodb Introduction
Raghvendra Parashar
 
PDF
Mongodb in-anger-boston-rb-2011
bostonrb
 
PPTX
Munching the mongo
VulcanMinds
 
PDF
What Drove Wordnik Non-Relational?
DATAVERSITY
 
PPTX
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
MongoDB
 
PPT
No SQL and MongoDB - Hyderabad Scalability Meetup
Hyderabad Scalability Meetup
 
KEY
Mongo Seattle - The Business of MongoDB
Justin Smestad
 
PPTX
MongoDB 2.4 and spring data
Jimmy Ray
 
A Case Study of NoSQL Adoption: What Drove Wordnik Non-Relational?
DATAVERSITY
 
Hybrid MongoDB and RDBMS Applications
Steven Francia
 
Techorama - Evolvable Application Development with MongoDB
bwullems
 
No More SQL
Glenn Street
 
Bangalore Executive Seminar 2015: Business Transformation Case Study - Tecnotree
MongoDB
 
MongoDb - Details on the POC
Amardeep Vishwakarma
 
Webinar: Migrating from RDBMS to MongoDB
MongoDB
 
MongoDB Schema Design by Examples
Hadi Ariawan
 
MongoDB Basics
Sarang Shravagi
 
Introduction to MongoDB
Mike Dirolf
 
How to Get Started with Your MongoDB Pilot Project
DATAVERSITY
 
Mongo db intro.pptx
JWORKS powered by Ordina
 
Mongodb Introduction
Raghvendra Parashar
 
Mongodb in-anger-boston-rb-2011
bostonrb
 
Munching the mongo
VulcanMinds
 
What Drove Wordnik Non-Relational?
DATAVERSITY
 
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
MongoDB
 
No SQL and MongoDB - Hyderabad Scalability Meetup
Hyderabad Scalability Meetup
 
Mongo Seattle - The Business of MongoDB
Justin Smestad
 
MongoDB 2.4 and spring data
Jimmy Ray
 
Ad

More from MongoSF (20)

PPTX
Webinar: Typische MongoDB Anwendungsfälle (Common MongoDB Use Cases) 
MongoSF
 
PPTX
Schema design with MongoDB (Dwight Merriman)
MongoSF
 
KEY
C# Development (Sam Corder)
MongoSF
 
KEY
Flexible Event Tracking (Paul Gebheim)
MongoSF
 
KEY
Administration (Eliot Horowitz)
MongoSF
 
PDF
Ruby Development and MongoMapper (John Nunemaker)
MongoSF
 
PDF
MongoHQ (Jason McCay & Ben Wyrosdick)
MongoSF
 
KEY
Administration
MongoSF
 
KEY
Sharding with MongoDB (Eliot Horowitz)
MongoSF
 
KEY
Practical Ruby Projects (Alex Sharp)
MongoSF
 
PDF
Implementing MongoDB at Shutterfly (Kenny Gorman)
MongoSF
 
PDF
Debugging Ruby (Aman Gupta)
MongoSF
 
PPTX
Indexing and Query Optimizer (Aaron Staple)
MongoSF
 
PPTX
MongoDB Replication (Dwight Merriman)
MongoSF
 
PDF
Zero to Mongo in 60 Hours
MongoSF
 
KEY
Building a Mongo DSL in Scala at Hot Potato (Lincoln Hochberg)
MongoSF
 
KEY
PHP Development with MongoDB (Fitz Agard)
MongoSF
 
PPT
Java Development with MongoDB (James Williams)
MongoSF
 
PPTX
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & M...
MongoSF
 
PDF
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
MongoSF
 
Webinar: Typische MongoDB Anwendungsfälle (Common MongoDB Use Cases) 
MongoSF
 
Schema design with MongoDB (Dwight Merriman)
MongoSF
 
C# Development (Sam Corder)
MongoSF
 
Flexible Event Tracking (Paul Gebheim)
MongoSF
 
Administration (Eliot Horowitz)
MongoSF
 
Ruby Development and MongoMapper (John Nunemaker)
MongoSF
 
MongoHQ (Jason McCay & Ben Wyrosdick)
MongoSF
 
Administration
MongoSF
 
Sharding with MongoDB (Eliot Horowitz)
MongoSF
 
Practical Ruby Projects (Alex Sharp)
MongoSF
 
Implementing MongoDB at Shutterfly (Kenny Gorman)
MongoSF
 
Debugging Ruby (Aman Gupta)
MongoSF
 
Indexing and Query Optimizer (Aaron Staple)
MongoSF
 
MongoDB Replication (Dwight Merriman)
MongoSF
 
Zero to Mongo in 60 Hours
MongoSF
 
Building a Mongo DSL in Scala at Hot Potato (Lincoln Hochberg)
MongoSF
 
PHP Development with MongoDB (Fitz Agard)
MongoSF
 
Java Development with MongoDB (James Williams)
MongoSF
 
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & M...
MongoSF
 
Map/reduce, geospatial indexing, and other cool features (Kristina Chodorow)
MongoSF
 
Ad

Recently uploaded (20)

PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
July Patch Tuesday
Ivanti
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
Biography of Daniel Podor.pdf
Daniel Podor
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
July Patch Tuesday
Ivanti
 

From MySQL to MongoDB at Wordnik (Tony Tam)

  • 1. MongoSF 4/30/2010From MySQL to MongoDBMigrating a Live ApplicationTony Tam
  • 2. What is WordnikProject to track language like GPS for EnglishDictionary is a road block to the languageRoughly 200 new words created dailyLanguage is not staticCapture information about all wordsMeaning is often undefined in traditional senseMachines can determine meaning through analysisNeeds LOTS of data
  • 3. Why should You careEvery Developer can use a Robust Language API!Wordnik migrated to MongoDB> 5 Billion documents> 1.2 TBZero application downtimeLearn from our Experience
  • 4. WordnikNot just a website!But we have oneLaunched Wordnik entirely on MySQLHit road bumps with insert speed ~4B rows on MyISAMtablesTables locked for 10’s of seconds during insertsBut we need more data!Created elaborate update schemes to work around itLost lots of sleep babysitting servers while researching LT solution
  • 5. Wordnik + MongoDBWhat are our storage needs?Database vs. Application LogicNo PK/FK constraintsNo Stored ProceduresConsistency?Lots of R&DTried most all noSQL solutions
  • 6. Migrating Storage EnginesMany parts to this effortSetup & AdministrationSoftware DesignOptimizationMany types of data at WordnikCorpusStructured HierarchicalDataUser DataMigrated #1 & #2
  • 7. Server InfrastructureWordnik is Heavily Read-onlyMaster / Slave deploymentLooking at replica pairsMongoDB loves system resourcesWordnik runs dedicated boxes to avoid other apps being sent to disk (aka time-out)Memory + Disk = Happy MongoMany X the disk space of MySQLEasy pill to swallow until…
  • 8. Server InfrastructurePhysical Hardware2 x 4 core CPU, 32gb RAM, FC SANHad bad luck on VMs(you might not)Disk speed => performance
  • 9. Software DesignTwo distinct use cases for MongoDBIdentical structure, different storage engineSame underlying objects, same storage fidelity (largelykey/value)Hierarchical data structureSame underlying objects, document-oriented storage
  • 10. Software DesignCreate BasicDBObjects from POJOs and used collection methodsBasicDBObjectdbo = new BasicDBObject("sentence",s.getSentence()) .append("rating",s.getRating()).append(...);ID Generation to manage unique _ID valuesAnalogous to MySQL AutoIncrement behaviorCompatible with MySQL Ids (more later)dbo.append("_ID", getId());collection.save(dbo);Implemented all CRUD methods in DAOSwappable between MongoDB and MySQL at runtime
  • 11. Software DesignKey-Value storage use caseEasy as implementing new DAOsSentenceHandlerh = new MongoDBSentenceHandler();Save methods construct BasicDBObject and call save() on collectionImplement same interfaceSame methods against DAO between MySQL and MongoDB versionsData Abstraction 101
  • 12. Software DesignWhat about bulk inserts?FAF Queued approachAdd objects to queue, return to callerEvery X seconds, process queueAll objects from same collection are appended to a single List<DBObject>Call collection.insert(…) before 2M charactersReduces network overheadVery fast inserts
  • 13. Software DesignHierarchical Data done more elegantlyWordnik Dictionary ModelJava POJOs already had JAXB annotationsPart of public REST apiUsed Mysql12+ tables13 DAOs2500 lines of code50 requests/second uncachedMemcache needed to maintain reasonable speed
  • 15. Software DesignMongoDB’s Document Storage let us…Turn the Objects into JSON via Jackson Mapper (fasterxml.com)Call saveSupport all fetch types, enhanced filters1000 requests / secondNo explicit cachingNo less scary code
  • 16. Software DesignSaving a complex objectString rawJSON = getMapper().writeValueAsString(veryComplexObject);collection.save(newBasicDBOBject(getId(),JSON.parse(rawJSON));Fetching complex objectBasicDBObjectdbo = cursor.next();ComplexObjectobj = getMapper().readValue(dbo.toString(), ComplexObject.class);No joins, 20x faster
  • 17. Migrating DataMigrating => existing data logicUse logic to select DAOs appropriatelyRead from old, write with newGreat system test for MongoDBSentenceHandlermysqlSh = new MySQLSentenceHandler();SentenceHandlermongoSh = new MongoDbSentenceHandler();while(hasMoreData){mongoSh.asyncWrite(mysqlSh.next()); ...}
  • 18. Migrating DataWordnik moved 5 billion rows from MySQLSustained 100,000 inserts/secondMigration tool was CPU boundID generation logic, among otherWordnik reads MongoDB fastRead + create java objects @ 250k/second (!)
  • 19. Going live to ProductionChoose your use case carefully if migrating incrementallyScary no matter whatTest your perf monitoring system first!Use your DAOs from migrationTurn on MongoDB on one server, monitor, tune (rollback, repeat)Full switch over when comfortable
  • 20. Going live to ProductionReally?SentenceHandlerh = null;if(useMongoDb){h = new MongoDbSentenceHandler();}else{h = new MySQLDbSentenceHandler();}return h.find(...);
  • 21. Optimizing PerformanceHome-grown connection poolingMaster onlyConnectionManager.getReadWriteConnection()Slave onlyConnectionManager.getReadOnlyConnection()Round-robin all servers, bias on slavesConnectionManager.getConnection()
  • 22. Optimizing PerformanceCachingHad complex logic to handle cache invalidationOut-of-process caches are not freeMongoDB loves your RAMLet it do your LRU cache (it will anyway)HardwareDo not skimp on your disk or RAMIndexesSchema-less designEven if no values in any document, needs to read document schema to check
  • 23. Optimizing PerformanceDisk spaceSchemaless => schema per document (row)Choose your mappings wisely({veryLongAttributeName:true}) => more disk space than ({vlan:true})
  • 24. Optimizing PerformanceA Typical Day at the Office for MongoDBAPI call rate: 47.7 calls/sec
  • 25. Other TipsData TypesUse caution when changingDBObjectobj = cur.next();long id = (Long) obj.get(“IWasAnIntOnce”)Attribute namesDon’t change w/o migrating existing data!WTFDMDG????
  • 26. What’s next?GridFSStore audio files on diskRequires clustered file system for shared accessCapped Collections (rolling out this week)UGC from MySQL => MongoDBBeg/Bribe 10gen for some Features