WebFund 2016W Lecture 11
Video
The video for the lecture given on February 23, 2016 is now available.
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)