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
Look Ma! No more blobs
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Aparna Chaudhary
April 27, 2013
Technology
1
2.3k
Look Ma! No more blobs
Binary storage using GridFS.
Aparna Chaudhary
April 27, 2013
Tweet
Share
More Decks by Aparna Chaudhary
See All by Aparna Chaudhary
Understanding JVM
aparnachaudhary
0
170
Esper - Complex Event Processing
aparnachaudhary
1
310
Other Decks in Technology
See All in Technology
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
530
Databricksアシスタントが自分で考えて動く時代に! エージェントモード体験もくもく会
taka_aki
0
360
[AEON TECH HUB #24] お客様の長期的興味の理解に向けて
alpicola
0
120
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
1
220
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
3.9k
楽しく学ぼう!ネットワーク入門
shotashiratori
0
320
わたしがセキュアにAWSを使えるわけないじゃん、ムリムリ!(※ムリじゃなかった!?)
cmusudakeisuke
1
440
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
260
事例に見るスマートファクトリーへの道筋〜工場データをAI Readyにする実践ステップ〜
hamadakoji
0
230
Datadog の RBAC のすべて
nulabinc
PRO
3
350
EMからICへ、二周目人材としてAI全振りのプロダクト開発で見つけた武器
yug1224
5
480
JAWS DAYS 2026 ExaWizards_20260307
exawizards
0
340
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
150
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Designing Experiences People Love
moore
143
24k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
820
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
So, you think you're a good person
axbom
PRO
2
1.9k
A Soul's Torment
seathinner
5
2.4k
The browser strikes back
jonoalderson
0
770
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
120
Transcript
Look Ma! No more blobs Aparna Chaudhary NoSQL matters, @Cologne
Germany 2013
EMBRACE POLYGLOT PERSISTENCE! STOP RDBMS ABUSE! KNOW YOUR USE CASE
Parse Extract Store Read XML We don't do rocket science...
Use Case Runtime support for document types Metadata definition provided at runtime Document type names - max 50 char Look up content based on metadata RA
Challenges Storage of up to one million documents of 10KB
to 2GB per document type per year Write 1MB < x msec Retrieve 1MB < y msec ......and details RA But…the Numbers make it interesting...
How? File System MongoDB RDBMS JCR Document Management
if you want to store files, its logical to use
file system. ain't it? File System ✓ Ease of Use ✓ No special skill-set ✓ Backup and Recovery ✓ It’s free!
How do I name them? Support for metadata storage? Performance
with too many small files? Query - Administration? High Availability? Limitation on total number of files?
Relational database Integrity Consistency Durability Atomicity Joins Backups High Availability
You name it, We have it! RDBMS Aggregations
RDBMS Developer’s Perspective
Challenge #1 RA We need runtime support for document type.
RA We need runtime support for document type.
Challenge #1 DOC_1 DOC_2 DOC_3 DOC_4 DOC_5 DOC_6 Dynamic DDL
Generation DOC_1 DOC_2 DOC_3 DOC_4 DOC_5 DOC_6 Dynamic DDL Generation
Challenge #1 String concatenations are ugly… DEV String concatenations are
ugly… DEV
Challenge #1 Let's build a utility. DEV Let's build a
utility. DEV
Challenge #1 More Work More Work
Challenge #2 RA Document type is 50 char long RA
Document type is 50 char long
Challenge #2 TABLE NAME LIMITS Wait… SQL-92 says 128 Char
? We rule. Let's support only 30 char. TABLE NAME LIMITS Wait… SQL-92 says 128 Char ? We rule. Let's support only 30 char.
Challenge #2 DOC_TYPE_MAPPING Let's create a mapping table. DEV DOC_TYPE_MAPPING
Let's create a mapping table. DEV
Challenge #2 Ugly unreadable table names! Ugly unreadable table names!
So...finally... Read XML Dynamic DDL generation Document Type Alias DocumentType
Defined Yes No Extract Metadata Store Metadata Store Content Simple use case becomes complex...
Remember... Our Challenge QA Let's see if we are in
spec for response time. Aah..what about performance now? DEV
MongoDB Document Based GridFS B-Tree Dynamic Schema JSON BSON Query
Scalable http://www.10gen.com/presentations/storage-engine-internals Joins Complex Transaction
F1 F2 F3 F4 F5 ID1 ID2 ID3 ID4 ID5
F1 F1 F1 F1 F2 F2 F3 F4 F5 F6 F2 F3 F4 F5 Fx F8 F3 F9 F7 Concepts Database Collection Collection Collection Collection Collection Collection Database Collection Collection Collection Collection Collection Collection Database Collection Collection Collection Collection Collection Collection Database Collection Collection Collection Collection Collection Collection Table = Collection Column = Field Row = Document Database = Database
GridFS MongoDB divides the large content into chunks Stores Metadata
and Chunks separately http://docs.mongodb.org/manual/core/gridfs/
> mybucket.files { "_id" : ObjectId("514d5cb8c2e6ea4329646a5c"), "chunkSize" : NumberLong(262144), "length"
: NumberLong(103015), "md5" : "34d29a163276accc7304bd69c5520e55", "filename" : "health_record_2.xml", "contentType" : application/xml, "uploadDate" : ISODate("2013-03-23T07:41:44.907Z"), "aliases" : null, "metadata" : { "fname" : "Aparna", "lname" : "Chaudhary","country" : "Netherlands" } } ObjectId - 12 Byte BSON: 4 Byte - Seconds since Epoch 3 Byte - Machine Id 2 Byte - Process Id 3 Byte - Counter
> mybucket.chunks { "_id" : ObjectId("514d5cb8c2e6ea4329646a5d"), "files_id" : ObjectId("514d5cb8c2e6ea4329646a5c"), "n"
: 0, "data" : BinData(0,...) }
? I'm storing 10KB file, but would it use 256KB
on disk? Last Chunk = FileSize % 256 + Metadata overhead 256 1128KB 256 256 256 104 + x 10KB 10 + x Chunk is as big as it needs to be...
Challenge #1 DEV MongoDB supports Dynamic Schema. You can use
collection per docType and they are created dynamically. RA We need runtime support for document type.
Challenge #2 RA Document type is 50 char long DEV
MongoDB namespace can be up to 123 char.
So...finally... Simple use case remains simple...well becomes simpler... Read XML
Extract Metadata Store Metadata & Content
Remember... Our Challenge QA Let's see if we are in
spec for response time. DEV Performance test is part of our definition of 'DONE'
BEcause seeing is believing! Demo ‣ GridFS 2.4.0 ‣ PostgreSQL
9.2 ‣ Spring Data ‣ JMeter 2.7 ‣ Mac OS X 10.8.3 2.3GHz Quad-Core Intel Core i7, 16GB RAM https://github.com/aparnachaudhary/nosql-matters-demo
EMBRACE POLYGLOT PERSISTENCE! STOP RDBMS ABUSE! KNOW YOUR USE CASE
@aparnachaudhary
Java Developer, Data Lover Eindhoven, Netherlands http://blog.aparnachaudhary.com/ @aparnachaudhary Thank You!