Contents

CS186-L20: NoSQL

Scaling Relational Databases isn’t always the best option

including partitioning and replication

BUT, consistency is hard to enforce!

/databasel20/image.png

Taxonomy of NoSQL Data Models

Key-Value Stores

1
2
Map<Key, Value>
get/put

Distribution / Partitioning, just using hash function

  • if no replication, key k is stored on $h(k)$ node
  • if multi-way replication, key k is stored on $h_i(k), i=1,2,…,n$ nodes

/databasel20/image-1.png

Extensible Record Stores

/databasel20/image-2.png the idea is that do not use a simple key to lookup 🤔

Document Stores

JSON Documents

using JSON as example /databasel20/image-3.png

/databasel20/image-4.png

/databasel20/image-5.png do not store replicated key!

JSON is a Tree 🪵, Self-describing 💬, and Flexible 🔥

can store Json in RDBMS

1
2
SELECT # FROM people
WHERE person @> '{"name": "John Doe", "age": 30}';

mapping between JSON and Relational Data

Relational Data Model ===> JSON Document easy, note that replicated key can be handled by using a array [ ]

JSON Document ===> Relational Data Model

  • using NULL to represent missing values
  • nested or replicated data? hard to handle! multi-tables may help 🤔

/databasel20/image-6.png

Introduction to MongoDB

/databasel20/image-7.png 基本语法

select and find

/databasel20/image-8.png /databasel20/image-9.png

1
2
db.collection.find(<predicate>, optional<projection>) 
db.inventory.find({}) // return all documents

/databasel20/image-10.png /databasel20/image-11.png

Limit and sort

/databasel20/image-12.png

MQL Aggregations and Updates

/databasel20/image-13.png /databasel20/image-14.png

unwind

/databasel20/image-15.png

update

/databasel20/image-16.png /databasel20/image-17.png

MongoDB internals

/databasel20/image-18.png