WebFund 2016W Lecture 11: Difference between revisions
Added partial in class notes. |
Added more in-class notes. |
||
| Line 31: | Line 31: | ||
- concurrent access | - concurrent access | ||
- data persistence | - 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 | |||
</pre> | </pre> | ||
Revision as of 20:20, 23 February 2016
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