Rootconf 2019

On infrastructure security, DevOps and distributed systems.

MongoDB WiredTiger or Not

Submitted by Gaurav Tayal (@gauravtayal) on Jan 16, 2019

Section: Crisp talk of 20 mins duration Technical level: Intermediate Status: Rejected

Abstract

Introduction:
MongoDB has made wiredtiger its default storage engine from mongo version3.0 and from version 4.0 it has depricated MMAPv1 storage engine. This talk is to walk through our journey of upgrading mongo storage engine with problems.

Scale: We are a gaming company making mass market social game. Handling above changes in production handling 1TB data scale.

Outline

Our Requirements
- 2 TB of data with 20GB index size and scale of 5k op/sec and 50/50 read and write. - Latency requirement is under 10ms on avg.

Tech Stack
- Sharded mongo cluster with 3 shards and each shard equivalent to 3 server (1 primary, 1 secondary and 1 arbiter).

Ingestion/query
– Supporting millions of Daily user with a max scale of 5k Ops/sec.

Problem Statement

  • MMAPV1: provide collection level locking, hence throughput of application is always limited else you need to increased size of box to scale or add shard.
  • WiredTiger: the journey to evaluate and try to fit it was not easy with the problems inside engine and according to our use case

Conclusion
- Database handling is not tricky but being the backbone of most request people are usually afraid to touch it and make changes which can solve your problems

Requirements

Have a basic understanding of Database and storage engine, and undertand some challenges of operating them at scale.

Speaker bio

I am senior software engineer at Moonfrog, India’s top mobile gaming company. I am responsible for leading Tech of one of the biggest game available on facebook instant game platform (Ludo club). In the last 6 years as an engineer, I have been mostly solving scaling challenges.

Comments

{{ gettext('Login to leave a comment') }}

{{ gettext('You need to be a participant to comment.') }}

{{ formTitle }}
{{ gettext('Post a comment...') }}
{{ gettext('New comment') }}

{{ errorMsg }}