Notes
In-class Notes
Lecture 11
----------
Databases
/var/spool/mail
- where email is stored
- one file per user
my mail inbox in /var/spool/mail/soma
Who accesses this file?
- mail client
- mail server
What happens if the mail server delivers mail while I'm going
through my email (deleting, filing)
- unless you lock it, you lose mail, mail client will overwrite
inbox and delete new messages
- solution: lock the inbox
create a soma.lock file
(inside it has the process ID of the accessing process)
This is a bad idea that does not scale
Instead, use a database
- concurrent access
- data persistence
What kind of database?
- key-value stores
like a filesystem for very small files,
with search
- document store <-- we'll use this
values have structure
can index on values
- relational database
sets of tables
tables have rows and columns
relations between tables
example: names and addresses
- rows are individual people
- columns are first name, last name, address, city, etc.
relation example: customers and purchases
- each purchase (invoice) has item purchased, price, and
customer ID
- customer table connects customer ID and name, address, etc
We're going to use MongoDB, a document store, not a relational
database.
- stores JSON-like documents
- scriptable in JavaScript
If we were to use a relational database, we'd have to learn SQL
- Structured Query Language
- many man implementations
Oracle, MySQL (MariaDB), PostgreSQL, MS SQL Server, SQLite, etc
- you mainly need a relational database to handle transactions
Transaction
- what if a change to a database involves multiple tables?
- a transaction ensures all tables are changed or none are
Classic example: airline tickets
Tables:
- seat reservations
- payment
- customer info
When you buy a ticket, you want to change all three
A transaction ensures atomic behavior
all happen or none happen
MongoDB Relational DB
Document => row
Collection => table
Web Architecture
----------------
web browser (interprets HTML, CSS, JavaScript)
|
| HTTP
|
web server (runs arbitrary code, in this class JavaScript in node)
|
| SQL or MongoDB protocol
|
database (persistent store, allows concurrent access safely)