Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2011-MongoDC-Storage.pdf
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
mongodb
July 12, 2011
Programming
180
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2011-MongoDC-Storage.pdf
mongodb
July 12, 2011
More Decks by mongodb
See All by mongodb
NoSQL Now! 2012
mongodb
18
3.4k
MongoDB 2.2 At the Silicon Valley MongoDB User Group
mongodb
9
1.5k
Turning off the LAMP Hunter Loftis, Skookum Digital Works
mongodb
2
1.6k
Mobilize Your MongoDB! Developing iPhone and Android Apps in the Cloud Grant Shipley, Red Hat
mongodb
0
570
Beanstalk Data - MongoDB In Production Chris Siefken, CTO Beanstalk Data
mongodb
0
580
New LINQ support in C#/.NET driver Robert Stam, 10gen
mongodb
9
41k
Welcome and Keynote Aaron Heckman, 10gen
mongodb
0
550
Webinar Introduction to MongoDB's Java Driver
mongodb
1
1.3k
Webinar Intro to Schema Design
mongodb
4
1.8k
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
920
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
180
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
200
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
150
関数型プログラミングのメリットって何だろう?
wanko_it
0
200
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
160
テーブルをDELETEした
yuzneri
0
110
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
170
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
230
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
510
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
The Limits of Empathy - UXLibs8
cassininazir
1
550
Prompt Engineering for Job Search
mfonobong
0
380
Code Reviewing Like a Champion
maltzj
528
40k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Optimizing for Happiness
mojombo
378
71k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Transcript
Eliot Horowitz @eliothorowitz MongoDC June 27, 2011 Storage and Journalling
Directory Layout -rw------- 1 erh admin 64M Jun 26 00:15
test.0 -rw------- 1 erh admin 128M Jun 21 00:20 test.1 -rw------- 1 erh admin 256M Jun 26 00:15 test.2 -rw------- 1 erh admin 512M Jun 21 00:20 test.3 -rw------- 1 erh admin 1.0G Jun 26 00:15 test.4 -rw------- 1 erh admin 2.0G Jun 25 23:08 test.5 -rw------- 1 erh admin 16M Jun 26 00:15 test.ns •Separate files per database •Aggressive preallocation •Always spare file
Internal File Format • Files broken into extents • A
collection has 1 to many extents • Grow exponentially up to 2gb (max file size as well) • Indexes have different extents than data
Sample Extents > db.foo.validate( { full : true } ).extents.forEach(
function(z){ print( z.loc + "\t\t" + z.size ); } ) 0:3000 20480 0:12000 81920 0:26000 327680 0:76000 1310720 0:1da000 5242880 0:76a000 6291456 0:d6a000 7553024 0:16de000 9064448 0:1f83000 10878976 0:29e3000 13058048 1:2000 15671296 1:ef4000 18808832 1:29e4000 22573056 1:3f6b000 27090944 1:5941000 32509952
Index Extents > db.system.namespaces.find() { "name" : "test2.foo" } {
"name" : "test2.system.indexes" } { "name" : "test2.foo.$_id_" } > db["foo.$_id_"].validate( { full : true } ).extents.forEach( function(z){ print( z.loc + "\t\t" + z.size ); } ) 0:9000 36864 0:1b6000 147456 0:6da000 589824 0:149e000 2359296 1:20e4000 9437184
Memory Mapped • All data files memory mapped • Virtual
size = total data size + overhead • Journaled virtual size = ( total data size * 2 ) + overhead • fsync every 60 seconds (--syncdelay)
Journalling • Write ahead log • Operations written to journal
before memory mapped regions • Once journal written, data safe unless hardware problem
When is Data Written • Journal flushed every 100ms or
100mb written • j=true flag to force a journal flush
Journal Admin • /journal sub directory in <dbpath> (/data/ db)
• 3 1gb files that get rotated • Can symlink to a different spindle
Performance • On 99.9% read systems, no impact • Write
performance 5-30% slowdown on same drive • Using separate drive as low as 3%
When to use • Single node - required for any
data integrity • Replica Set - at least 1 node • All nodes for large data sets removes need for large resyncs
Fragmentation • Files can get fragmented over time if documents
change size • Need to improve free list
Compacting • 1.8 and previous: repairDatabase • 2.0+ : compact
command
drop/dropDatabase • drop: frees extents, not data files • dropDatabase:
frees files
update and moves • Updates can make documents bigger •
Moves are more expensive than other operations
padding • adaptive padding between 1.0 and 2.0 • manual
control coming
Download MongoDB http://www.mongodb.org and let us know what you think
@eliothorowitz @mongodb 10gen is hiring! http://www.10gen.com/jobs