SlideShare a Scribd company logo
MongoDB Chunks
Jason Terpko
MongoDB Chunks – Distribution, Splitting, and Merging
NoSQL DBA, Rackspace/ObjectRocket
www.linkedin.com/in/jterpko, jason.terpko@rackspace.com
My Story
• Started out in relational databases in public education then financial
services
• Next came online media distribution combined with a paywall
• For analytics, started working with columnar databases and engines with
compression
• Made the switch to NoSQL at ObjectRocket by Rackspace
Overview
• MongoDB and Sharding
• What is a chunk in MongoDB?
• Chunk Distribution and Scaling MongoDB
• Use Cases For Splitting
• Use Cases For Merging
• Reconsidering Your Shard Key
Documents
• Common MongoDB BSON Types
• ObjectId
• String
• Integer
• Double
• NumberLong
• Date
• Boolean
• Null
• Array
{
"_id" : ObjectId("570680d891442f6efaff2005"),
"n" : "John Doe",
"a" : 45,
"h" : 5.9,
"w" : NumberLong(165),
"u" : ISODate("2016-01-07T15:46:32.085Z"),
"ac" : true,
"nn" : null,
"z" : [
"10013",
"10018"
]
}
MongoDB Sharded Cluster
s1 s2
What is a Chunk?
config.chunks
{
"_id" : "mydb.mycoll-uuid_"00005cf6-1217-4414-935b-
cf1bde09cc77"",
"lastmod" : Timestamp(1, 5),
"lastmodEpoch" : ObjectId("570733145f2bf94777a62155"),
"ns" : "mydb.mycoll",
"min" : {
"uuid" : "00005cf6-1217-4414-935b-cf1bde09cc77"
},
"max" : {
"uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e"
},
"shard" : ”s1"
}
Use Cases For Splitting (Case 1)
s1 s2
80% 20%
Unbalanced
Operations
Use Cases For Splitting (Case 1)
Profiler Example :
db.system.profile.aggregate([
{$match: { $and: [ {op:"update"}, {ns : "mydb.mycoll"} ] }}, {$group: { "_id":"$query.uuid",
count:{$sum:1}}},
{$sort: {"count": -1}}, {$limit : 5 } ]);
{
"result" : [
{
"_id" : "00005cf6-1217-4414-935b-
cf1bde09cc77",
"count" : 28672
},
..........
],
"ok" : 1
}
Use Cases For Splitting (Case 1)
{
"_id" : "mydb.mycoll-uuid_"00005cf6-1217-4414-935b-cf1bde09cc77"",
"lastmod" : Timestamp(1, 5),
"lastmodEpoch" : ObjectId("570733145f2bf94777a62155"),
"ns" : "mydb.mycoll",
"min" : {
"uuid" : "00005cf6-1217-4414-935b-cf1bde09cc77"
},
"max" : {
"uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e"
},
"shard" : ”s1"
}
{ “uuid” : “7800e10e-273d-4186-bca7-9e3f6647d33a”, …
{ “uuid” : “7801a55e-e326-4cdb-a5fb-a5d133016f13” , …
{ “uuid” : “7801c3d5-8506-4715-934b-ad66904ae01e” , …
{ “uuid” : “7801ff57-50b7-4505-9557-06058cc8ff80” , …
sh.splitAt(
)
Unbalanced
Operations
Moving the Chunks
db.runCommand({
"moveChunk" : "mydb.mycoll",
"bounds" : [
{
"uuid" : "7fe55742-7879-44bf-9a00-462a0284c982"
},
{
"uuid" : "ffffe5bc-d04d-4fcf-b8e2-283fa5998079"
}
],
"to" : "s2",
"_secondaryThrottle" : true
});
Example Command:
Use Cases For Splitting (Case 2)
s1 s2
s1 s2
Unbalanced
Resources
Use Cases For Splitting (Case 2)
Unbalanced Resources – Jumbo
Chunks
• Requirements
• Larger than db.settings.find({"_id" :
"chunksize"})
• Or contains 250,000 or more documents
• Causes
• Importing of data
• Config metadata lock
• Compound Shard Key
• Identifying
• sh.status(true)
• moveChunk()
• count() or Aggregation Pipeline
• ObjectRocket Utility : ChunkHunter.py*
• Rectifying
• sh.splitAt() and sh.splitFind()
• ObjectRocket Utilities : ChunkManager.py*
• Data reduction
• Re-sharding the collection
*https://github.com/objectrocket/Utils
Splitting : Identifying and Rectifying
Aggregation Example:
ObjectRocket Utils :
ChunkManager.py ChunkHunter.py ChunkSplitter.pyCn
t
exit
db.mycoll.aggregate([{$group: {"_id": {"uuid": "$uuid"}, "count": {$sum: 1}}},{$sort: {"count": -1}},{$lim
db.adminCommand({ dataSize: "mydb.mycoll", keyPattern: { "uuid" : 1 },
min: { "uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e" },
max: { "uuid" : "7fe55742-7879-44bf-9a00-462a0284c982" } })
Data Size:
Use Cases For Splitting (Case 3)
s1 s2
100%
New and Small
Collections
Use Cases For Splitting (Case 3)
New and Small Collections
• Considerations
– Workload
– Shard Key
– Shard Count
– Current Collection Size
– Expected Collection Size
• Command
db.runCommand( { shardCollection: "mydb.mycoll", key: { ”uuid": "hashed" }, numInitialChunks :
1024 } )
• Calculating The Value
(size_in_mb / chunk_size) * 2
Use Cases For Merging
s1 s2
80% 20%
s1 s2
Unbalanced
Operations
Unbalanced
Resources
Empty Chunks
{ "uuid" : "00005cf6-....." } -->> { "uuid" : "7fe55637-....." } on :
s1
100K Docs
@ 45MB
{ "uuid" : "7fe55637-....." } -->> { "uuid" : "7fe55742-....." } on :
s2
0 Docs
@ 0MB
Use Cases For Merging (Deletes)
Unexpected remove()
Operations
insert()
& split
insert()
& split
insert() -> split ->
remove()
insert() -> split ->
remove()
s1 s2 s3 s4
Merging Process
How we have resolved this with JavaScript in past:
1. Check Balancer State
2. Read in empty chunks from ChunkHunter.py results
collection
3. Locate adjacent chunk
4. If empty and adjacent chunks reside on the same shard,
merge
5. Else move chunk to the shard with the adjacent chunk, then
merge
What have we learned from the current process?
Use Cases For Merging (TTL)
TTL : db.mycoll.ensureIndex( { "ca": 1 }, { expireAfterSeconds:
5227200 } )
splitVector
& split
moveChunk()
s1 s2 s3 s4
Chunk Size and Splits
How frequently are chunks being split?
• Global Change
• split & splitVector
• Decreasing the size
• Increased the size
Review Your Shard Key
How frequently does this occur?
• Is this a re-occurring problem?
• What impact does it have to your business?
• Re-analyzing your structure, workload, and access patterns
• What method will you use to re-shard a sharded collection?
ObjectRocket by Rackspace
Questions?
• MongoDB
• Sharding
• Chunks
• Splitting Chunks
• Merging Chunks
• ObjectRocket
• Rackspace

More Related Content

What's hot (20)

PPTX
New Indexing and Aggregation Pipeline Capabilities in MongoDB 4.2
Antonios Giannopoulos
 
PDF
Using MongoDB with Kafka - Use Cases and Best Practices
Antonios Giannopoulos
 
PPTX
Unqlite
Paul Myeongchan Kim
 
ODP
Elastic Search
NexThoughts Technologies
 
PDF
MongoDB Performance Tuning
MongoDB
 
PPTX
Bucket your partitions wisely - Cassandra summit 2016
Markus Höfer
 
PPTX
Advanced Sharding Features in MongoDB 2.4
MongoDB
 
PPTX
Choosing a Shard key
MongoDB
 
PPTX
Tag based sharding presentation
Juan Antonio Roy Couto
 
PDF
Tweaking perfomance on high-load projects_Думанский Дмитрий
GeeksLab Odessa
 
PPTX
Back to Basics, webinar 2: La tua prima applicazione MongoDB
MongoDB
 
PDF
Optimizing Slow Queries with Indexes and Creativity
MongoDB
 
PPTX
Mongo db pefrormance optimization strategies
ronwarshawsky
 
PDF
Elasticsearch War Stories
Arno Broekhof
 
PDF
ManetoDB: Key/Value storage, BigData in Open Stack_Сергей Ковалев, Илья Свиридов
GeeksLab Odessa
 
PDF
NoSQL and JavaScript: a Love Story
Alexandre Morgaut
 
PDF
MongoDB for Analytics
MongoDB
 
PDF
JEEConf. Vanilla java
Dmitriy Dumanskiy
 
PDF
Time Series Processing with Solr and Spark
Josef Adersberger
 
PPTX
Back to Basics Webinar 3: Introduction to Replica Sets
MongoDB
 
New Indexing and Aggregation Pipeline Capabilities in MongoDB 4.2
Antonios Giannopoulos
 
Using MongoDB with Kafka - Use Cases and Best Practices
Antonios Giannopoulos
 
Elastic Search
NexThoughts Technologies
 
MongoDB Performance Tuning
MongoDB
 
Bucket your partitions wisely - Cassandra summit 2016
Markus Höfer
 
Advanced Sharding Features in MongoDB 2.4
MongoDB
 
Choosing a Shard key
MongoDB
 
Tag based sharding presentation
Juan Antonio Roy Couto
 
Tweaking perfomance on high-load projects_Думанский Дмитрий
GeeksLab Odessa
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
MongoDB
 
Optimizing Slow Queries with Indexes and Creativity
MongoDB
 
Mongo db pefrormance optimization strategies
ronwarshawsky
 
Elasticsearch War Stories
Arno Broekhof
 
ManetoDB: Key/Value storage, BigData in Open Stack_Сергей Ковалев, Илья Свиридов
GeeksLab Odessa
 
NoSQL and JavaScript: a Love Story
Alexandre Morgaut
 
MongoDB for Analytics
MongoDB
 
JEEConf. Vanilla java
Dmitriy Dumanskiy
 
Time Series Processing with Solr and Spark
Josef Adersberger
 
Back to Basics Webinar 3: Introduction to Replica Sets
MongoDB
 

Similar to MongoDB Chunks - Distribution, Splitting, and Merging (20)

PPTX
MongoDB Days Silicon Valley: MongoDB and the Hadoop Connector
MongoDB
 
PDF
Mongodb debugging-performance-problems
MongoDB
 
PDF
Scaling MongoDB; Sharding Into and Beyond the Multi-Terabyte Range
MongoDB
 
PDF
Nodejs性能分析优化和分布式设计探讨
flyinweb
 
PDF
rsyslog v8: more than just syslog!
Yury Bushmelev
 
ODP
Beyond PHP - it's not (just) about the code
Wim Godden
 
PPTX
Mongo Sharding: Case Study
Will Button
 
PDF
Robert Pankowecki - Czy sprzedawcy SQLowych baz nas oszukali?
SegFaultConf
 
PDF
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack
 
PPTX
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA
 
PDF
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
MongoDB
 
PPTX
Letgo Data Platform: A global overview
Ricardo Fanjul Fandiño
 
PDF
Deep Learning in Spark with BigDL by Petar Zecevic at Big Data Spain 2017
Big Data Spain
 
PPTX
ETL with SPARK - First Spark London meetup
Rafal Kwasny
 
PDF
Blazing Fast Analytics with MongoDB & Spark
MongoDB
 
PDF
10 Key MongoDB Performance Indicators
iammutex
 
PPTX
SQL vs NoSQL
Jacinto Limjap
 
PDF
Scalding big ADta
b0ris_1
 
PDF
He stopped using for/while loops, you won't believe what happened next!
François-Guillaume Ribreau
 
PDF
marko_go_in_badoo
Marko Kevac
 
MongoDB Days Silicon Valley: MongoDB and the Hadoop Connector
MongoDB
 
Mongodb debugging-performance-problems
MongoDB
 
Scaling MongoDB; Sharding Into and Beyond the Multi-Terabyte Range
MongoDB
 
Nodejs性能分析优化和分布式设计探讨
flyinweb
 
rsyslog v8: more than just syslog!
Yury Bushmelev
 
Beyond PHP - it's not (just) about the code
Wim Godden
 
Mongo Sharding: Case Study
Will Button
 
Robert Pankowecki - Czy sprzedawcy SQLowych baz nas oszukali?
SegFaultConf
 
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack
 
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
MongoDB
 
Letgo Data Platform: A global overview
Ricardo Fanjul Fandiño
 
Deep Learning in Spark with BigDL by Petar Zecevic at Big Data Spain 2017
Big Data Spain
 
ETL with SPARK - First Spark London meetup
Rafal Kwasny
 
Blazing Fast Analytics with MongoDB & Spark
MongoDB
 
10 Key MongoDB Performance Indicators
iammutex
 
SQL vs NoSQL
Jacinto Limjap
 
Scalding big ADta
b0ris_1
 
He stopped using for/while loops, you won't believe what happened next!
François-Guillaume Ribreau
 
marko_go_in_badoo
Marko Kevac
 
Ad

Recently uploaded (20)

PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
Ad

MongoDB Chunks - Distribution, Splitting, and Merging

  • 1. MongoDB Chunks Jason Terpko MongoDB Chunks – Distribution, Splitting, and Merging NoSQL DBA, Rackspace/ObjectRocket www.linkedin.com/in/jterpko, [email protected]
  • 2. My Story • Started out in relational databases in public education then financial services • Next came online media distribution combined with a paywall • For analytics, started working with columnar databases and engines with compression • Made the switch to NoSQL at ObjectRocket by Rackspace
  • 3. Overview • MongoDB and Sharding • What is a chunk in MongoDB? • Chunk Distribution and Scaling MongoDB • Use Cases For Splitting • Use Cases For Merging • Reconsidering Your Shard Key
  • 4. Documents • Common MongoDB BSON Types • ObjectId • String • Integer • Double • NumberLong • Date • Boolean • Null • Array { "_id" : ObjectId("570680d891442f6efaff2005"), "n" : "John Doe", "a" : 45, "h" : 5.9, "w" : NumberLong(165), "u" : ISODate("2016-01-07T15:46:32.085Z"), "ac" : true, "nn" : null, "z" : [ "10013", "10018" ] }
  • 6. What is a Chunk? config.chunks { "_id" : "mydb.mycoll-uuid_"00005cf6-1217-4414-935b- cf1bde09cc77"", "lastmod" : Timestamp(1, 5), "lastmodEpoch" : ObjectId("570733145f2bf94777a62155"), "ns" : "mydb.mycoll", "min" : { "uuid" : "00005cf6-1217-4414-935b-cf1bde09cc77" }, "max" : { "uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e" }, "shard" : ”s1" }
  • 7. Use Cases For Splitting (Case 1) s1 s2 80% 20% Unbalanced Operations
  • 8. Use Cases For Splitting (Case 1) Profiler Example : db.system.profile.aggregate([ {$match: { $and: [ {op:"update"}, {ns : "mydb.mycoll"} ] }}, {$group: { "_id":"$query.uuid", count:{$sum:1}}}, {$sort: {"count": -1}}, {$limit : 5 } ]); { "result" : [ { "_id" : "00005cf6-1217-4414-935b- cf1bde09cc77", "count" : 28672 }, .......... ], "ok" : 1 }
  • 9. Use Cases For Splitting (Case 1) { "_id" : "mydb.mycoll-uuid_"00005cf6-1217-4414-935b-cf1bde09cc77"", "lastmod" : Timestamp(1, 5), "lastmodEpoch" : ObjectId("570733145f2bf94777a62155"), "ns" : "mydb.mycoll", "min" : { "uuid" : "00005cf6-1217-4414-935b-cf1bde09cc77" }, "max" : { "uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e" }, "shard" : ”s1" } { “uuid” : “7800e10e-273d-4186-bca7-9e3f6647d33a”, … { “uuid” : “7801a55e-e326-4cdb-a5fb-a5d133016f13” , … { “uuid” : “7801c3d5-8506-4715-934b-ad66904ae01e” , … { “uuid” : “7801ff57-50b7-4505-9557-06058cc8ff80” , … sh.splitAt( ) Unbalanced Operations
  • 10. Moving the Chunks db.runCommand({ "moveChunk" : "mydb.mycoll", "bounds" : [ { "uuid" : "7fe55742-7879-44bf-9a00-462a0284c982" }, { "uuid" : "ffffe5bc-d04d-4fcf-b8e2-283fa5998079" } ], "to" : "s2", "_secondaryThrottle" : true }); Example Command:
  • 11. Use Cases For Splitting (Case 2) s1 s2 s1 s2 Unbalanced Resources
  • 12. Use Cases For Splitting (Case 2) Unbalanced Resources – Jumbo Chunks • Requirements • Larger than db.settings.find({"_id" : "chunksize"}) • Or contains 250,000 or more documents • Causes • Importing of data • Config metadata lock • Compound Shard Key • Identifying • sh.status(true) • moveChunk() • count() or Aggregation Pipeline • ObjectRocket Utility : ChunkHunter.py* • Rectifying • sh.splitAt() and sh.splitFind() • ObjectRocket Utilities : ChunkManager.py* • Data reduction • Re-sharding the collection *https://github.com/objectrocket/Utils
  • 13. Splitting : Identifying and Rectifying Aggregation Example: ObjectRocket Utils : ChunkManager.py ChunkHunter.py ChunkSplitter.pyCn t exit db.mycoll.aggregate([{$group: {"_id": {"uuid": "$uuid"}, "count": {$sum: 1}}},{$sort: {"count": -1}},{$lim db.adminCommand({ dataSize: "mydb.mycoll", keyPattern: { "uuid" : 1 }, min: { "uuid" : "7fe55637-74c0-4e51-8eed-ab6b411d2b6e" }, max: { "uuid" : "7fe55742-7879-44bf-9a00-462a0284c982" } }) Data Size:
  • 14. Use Cases For Splitting (Case 3) s1 s2 100% New and Small Collections
  • 15. Use Cases For Splitting (Case 3) New and Small Collections • Considerations – Workload – Shard Key – Shard Count – Current Collection Size – Expected Collection Size • Command db.runCommand( { shardCollection: "mydb.mycoll", key: { ”uuid": "hashed" }, numInitialChunks : 1024 } ) • Calculating The Value (size_in_mb / chunk_size) * 2
  • 16. Use Cases For Merging s1 s2 80% 20% s1 s2 Unbalanced Operations Unbalanced Resources Empty Chunks { "uuid" : "00005cf6-....." } -->> { "uuid" : "7fe55637-....." } on : s1 100K Docs @ 45MB { "uuid" : "7fe55637-....." } -->> { "uuid" : "7fe55742-....." } on : s2 0 Docs @ 0MB
  • 17. Use Cases For Merging (Deletes) Unexpected remove() Operations insert() & split insert() & split insert() -> split -> remove() insert() -> split -> remove() s1 s2 s3 s4
  • 18. Merging Process How we have resolved this with JavaScript in past: 1. Check Balancer State 2. Read in empty chunks from ChunkHunter.py results collection 3. Locate adjacent chunk 4. If empty and adjacent chunks reside on the same shard, merge 5. Else move chunk to the shard with the adjacent chunk, then merge What have we learned from the current process?
  • 19. Use Cases For Merging (TTL) TTL : db.mycoll.ensureIndex( { "ca": 1 }, { expireAfterSeconds: 5227200 } ) splitVector & split moveChunk() s1 s2 s3 s4
  • 20. Chunk Size and Splits How frequently are chunks being split? • Global Change • split & splitVector • Decreasing the size • Increased the size
  • 21. Review Your Shard Key How frequently does this occur? • Is this a re-occurring problem? • What impact does it have to your business? • Re-analyzing your structure, workload, and access patterns • What method will you use to re-shard a sharded collection?
  • 23. Questions? • MongoDB • Sharding • Chunks • Splitting Chunks • Merging Chunks • ObjectRocket • Rackspace