com presentations: My new SQL 2 NoSQL talk.: slides/mongodb/acid.xml slides/mongodb/arbitrary-keys1.xml slides/mongodb/availability.xml slides/mongodb/cap.xml slides/mongodb/dinosaur.jpg slides/mongodb/dinosaur.xml slides/mongodb/document.xml slides/mongodb/embed-vs-link.xml slides/mongodb/insert-intro.xml slides/mongodb/mongodb-1nf.xml slides/mongodb/mongodb-2nf.xml slides/mongodb/mongodb-3nf.xml slides/mongodb/mongodb-acid.xml slides/mongodb/no
[email protected] (Derick Rethans)
| Newsgroups | php.pres |
|---|---|
| Message-ID | <[email protected]> |
Commit: eefc03d4c446c730dabe9e87ab4a7bcb5a0e4631 Author: Derick Rethans <[email protected]> Mon, 17 Feb 2014 12:44:46 +0000 Parents: 2f6f7be0e2c9d26930814a143d362c0d5fa6196f Branches: master Link: http://git.php.net/?p=presentations.git;a=commitdiff;h=eefc03d4c446c730dabe9e87ab4a7bcb5a0e4631 Log: My new SQL 2 NoSQL talk. Changed paths: A slides/mongodb/acid.xml A slides/mongodb/arbitrary-keys1.xml A slides/mongodb/availability.xml A slides/mongodb/cap.xml A slides/mongodb/dinosaur.jpg A slides/mongodb/dinosaur.xml M slides/mongodb/document.xml M slides/mongodb/embed-vs-link.xml A slides/mongodb/insert-intro.xml A slides/mongodb/mongodb-1nf.xml A slides/mongodb/mongodb-2nf.xml A slides/mongodb/mongodb-3nf.xml A slides/mongodb/mongodb-acid.xml A slides/mongodb/normal-form.xml A slides/mongodb/normal-form1.xml A slides/mongodb/normal-form2.xml A slides/mongodb/normal-form3.xml A slides/mongodb/nosql-column.xml A slides/mongodb/nosql-document.xml A slides/mongodb/nosql-graph.xml A slides/mongodb/nosql-kv.xml M slides/mongodb/one-to-many4.xml A slides/mongodb/platipus.jpg A slides/mongodb/platipus.xml A slides/mongodb/relational-model.xml M slides/mongodb/repl-features.xml A slides/mongodb/sql2nosql-conclusion.xml A slides/mongodb/update-atomicity.xml A slides/mongodb/update-consistency.xml A slides/mongodb/update-intro.xml A slides/mongodb/writeconcern-consistency-list.xml A slides/mongodb/writeconcern-consistency.xml A sql2nosql-confoo14.xml
diff_eefc03d4c446c730dabe9e87ab4a7bcb5a0e4631.txt
(text/plain, 24 KB)
diff --git a/slides/mongodb/acid.xml b/slides/mongodb/acid.xml
new file mode 100644
index 0000000..b27d910
--- /dev/null
+++ b/slides/mongodb/acid.xml
@@ -0,0 +1,16 @@
+<slide>
+<title>ACID</title>
+
+<blurb>Jim Grey in the late 1970s</blurb>
+
+<list>
+ <bullet>*A*tomicity</bullet>
+ <bullet>*C*onsistency</bullet>
+ <bullet>*I*solation</bullet>
+ <bullet>*D*urability</bullet>
+</list>
+
+<example>
+CREATE TABLE acidtest (A INTEGER, B INTEGER CHECK (A + B = 100));
+</example>
+</slide>
diff --git a/slides/mongodb/arbitrary-keys1.xml b/slides/mongodb/arbitrary-keys1.xml
new file mode 100644
index 0000000..c0fde6a
--- /dev/null
+++ b/slides/mongodb/arbitrary-keys1.xml
@@ -0,0 +1,53 @@
+<slide>
+<title>NoSQL does not mean: No Schema</title>
+
+<div effect="fade-out">
+<example>{
+ person: "derickr",
+ steps_made: {
+ "20140201": 10800,
+ "20140202": 712,
+ }
+}
+</example>
+<list>
+ <bullet>You can not do queries depending on date range</bullet>
+ <bullet>You can not find days with more than 10000 steps</bullet>
+</list>
+</div>
+<div effect="fade-in-out">
+<list>
+<bullet>It's the same idea as doing this in XML:
+<example>
+<steps>
+ <person>derickr</person>
+ <steps_made>
+ <20140201>10800</20140201>
+ <20140202>712</20140202>
+ </steps_made>
+</steps>
+</example></bullet>
+</list>
+</div>
+
+<div effect="fade-in">
+<list>
+<bullet>Do *not* use values as key names</bullet>
+<bullet>Split it up instead:</bullet>
+<bullet><example>
+{
+ person: "derickr",
+ date: "20140201",
+ steps: 10800,
+}
+{
+ person: "derickr",
+ date: "20140202",
+ steps: 5906,
+}
+</example>
+</bullet>
+<bullet>Make sure you can always document your key names</bullet>
+</list>
+</div>
+</slide>
diff --git a/slides/mongodb/availability.xml b/slides/mongodb/availability.xml
new file mode 100644
index 0000000..6d23560
--- /dev/null
+++ b/slides/mongodb/availability.xml
@@ -0,0 +1,12 @@
+<slide>
+<title>Availability/Partition Tolerance (CAP)</title>
+
+<blurb>Different methods</blurb>
+
+<list>
+ <bullet>Master-slave replication</bullet>
+ <bullet>Master-slave replication with Failover</bullet>
+ <bullet>Multi-master replication</bullet>
+ <bullet>Sharding</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/cap.xml b/slides/mongodb/cap.xml
new file mode 100644
index 0000000..633d574
--- /dev/null
+++ b/slides/mongodb/cap.xml
@@ -0,0 +1,15 @@
+<slide>
+<title>CAP</title>
+
+<blurb>Eric Brewer in 2002</blurb>
+
+<list>
+<bullet>*C*onsistency:<br/>A read sees all previously completed
+writes<br/>(Not the same consitency as in ACID)</bullet>
+<bullet>*A*vailability:<br/>Guarantees that every request receives a response
+about whether it was successful or failed</bullet>
+<bullet>*P*artition Tolerance:<br/>Guaranteed properties are maintained even
+when network failures prevent some machines from communicating with
+others.</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/dinosaur.jpg b/slides/mongodb/dinosaur.jpg
new file mode 100644
index 0000000..f0fe067
Binary files /dev/null and b/slides/mongodb/dinosaur.jpg differ
diff --git a/slides/mongodb/dinosaur.xml b/slides/mongodb/dinosaur.xml
new file mode 100644
index 0000000..fca45db
--- /dev/null
+++ b/slides/mongodb/dinosaur.xml
@@ -0,0 +1,4 @@
+<slide>
+<title>The Relational Model</title>
+<image filename="dinosaur.jpg"/>
+</slide>
diff --git a/slides/mongodb/document.xml b/slides/mongodb/document.xml
index a6b1f71..640064b 100644
--- a/slides/mongodb/document.xml
+++ b/slides/mongodb/document.xml
@@ -2,7 +2,6 @@
<title>Documents</title>
<list>
- <bullet>Stored as BSON (Binary JSON)</bullet>
<bullet>Can have embedded documents</bullet>
<bullet>Have a unique ID (the %_id% field)</bullet>
<bullet>Are *schemaless*</bullet>
diff --git a/slides/mongodb/embed-vs-link.xml b/slides/mongodb/embed-vs-link.xml
index e371ea6..266bfe9 100644
--- a/slides/mongodb/embed-vs-link.xml
+++ b/slides/mongodb/embed-vs-link.xml
@@ -4,7 +4,6 @@
<blurb>Embedding</blurb>
<list>
<bullet>Simple data structure</bullet>
- <bullet>Limited to 16MB</bullet>
<bullet>How often do you update?</bullet>
<bullet>Will the document grow and grow?</bullet>
</list>
diff --git a/slides/mongodb/insert-intro.xml b/slides/mongodb/insert-intro.xml
new file mode 100644
index 0000000..9366c46
--- /dev/null
+++ b/slides/mongodb/insert-intro.xml
@@ -0,0 +1,14 @@
+<slide>
+<title>Inserting data</title>
+
+<example>
+db.steps.insert( {
+ person: "derickr",
+ steps_made: {
+ "20140201": 10800,
+ }
+} );
+</example>
+
+<blurb>No schema, and you also don't have to create a database or collection</blurb>
+</slide>
diff --git a/slides/mongodb/mongodb-1nf.xml b/slides/mongodb/mongodb-1nf.xml
new file mode 100644
index 0000000..e10ba3c
--- /dev/null
+++ b/slides/mongodb/mongodb-1nf.xml
@@ -0,0 +1,33 @@
+<slide>
+<title>MongoDB and the First Normal Form</title>
+
+<table>
+<tr><th>Customer ID</th><th>First Name</th><th>Surname</th><th>Telephone Number</th></tr>
+<tr><td>123</td><td>Robert</td><td>Ingram</td><td>861-2025</td></tr>
+<tr><td>456</td><td>Jane</td><td>Wright</td><td>|ff0000|403-1659, 776-4100|</td></tr>
+<tr><td>789</td><td>Maria</td><td>Fernandez</td><td>808-9633</td></tr>
+</table>
+
+<div effect="fade-in">
+<example>
+{
+ "Customer ID": 123,
+ "First Name": "Robert",
+ "Surname": "Ingram",
+ "Telephone Number": '861-2025'
+}
+{
+ "Customer ID": 456,
+ "First Name": "Jane",
+ "Surname": "Wright",
+ "Telephone Number": [ '403-1659', '776-4100' ]
+}
+{
+ "Customer ID": 789,
+ "First Name": "Maria",
+ "Surname": "Fermandez",
+ "Telephone Number": [ '808-9633' ]
+}
+</example>
+</div>
+</slide>
diff --git a/slides/mongodb/mongodb-2nf.xml b/slides/mongodb/mongodb-2nf.xml
new file mode 100644
index 0000000..aea597c
--- /dev/null
+++ b/slides/mongodb/mongodb-2nf.xml
@@ -0,0 +1,33 @@
+<slide>
+<title>MongoDB and the Second Normal Form</title>
+
+<table>
+<tr><th>Employee</th><th>Skill</th><th>Current Work Location</th></tr>
+<tr><td>Brown</td><td>Light Cleaning</td><td>73 Industrial Way</td></tr>
+<tr><td>Brown</td><td>Typing</td><td>|ff0000|73 Industrial Way|</td></tr>
+<tr><td>Harrison</td><td>Light Cleaning</td><td>73 Industrial Way</td></tr>
+<tr><td>Jones</td><td>Shorthand</td><td>114 Main Street</td></tr>
+<tr><td>Jones</td><td>Typing</td><td>|ff0000|114 Main Street|</td></tr>
+<tr><td>Jones</td><td>Whittling</td><td>|ff0000|114 Main Street|</td></tr>
+</table>
+
+<div effect="fade-in">
+<example>
+{
+ "Employee": "Brown",
+ "Skill": [ "Light Cleaning", "Typing" ],
+ "Current Work Location": "73 Industrial Way",
+}
+{
+ "Employee": "Harrison",
+ "Skill": [ "Light Cleaning" ],
+ "Current Work Location": "73 Industrial Way",
+}
+{
+ "Employee": "Jones",
+ "Skill": [ "Shorthand", "Typing", "Whittling" ],
+ "Current Work Location": "114 Main Street",
+}
+</example>
+</div>
+</slide>
diff --git a/slides/mongodb/mongodb-3nf.xml b/slides/mongodb/mongodb-3nf.xml
new file mode 100644
index 0000000..7eeb78c
--- /dev/null
+++ b/slides/mongodb/mongodb-3nf.xml
@@ -0,0 +1,32 @@
+<slide>
+<title>MongoDB and the Third Normal Form</title>
+
+<table>
+<tr><th>Tournament</th><th>Year</th><th>Winner</th><th>Date of Birth</th></tr>
+<tr><td>Indiana Invitational</td><td>1998</td><td>|ff0000|Al Fredrickson|</td><td>|ff0000|21 July 1975|</td></tr>
+<tr><td>Cleveland Open</td><td>1999</td><td>|ff0000|Bob Albertson|</td><td>|ff0000|28 September 1968|</td></tr>
+<tr><td>Des Moines Masters</td><td>1999</td><td>|ff0000|Al Fredrickson|</td><td>|ff0000|21 July 1975|</td></tr>
+<tr><td>Indiana Invitational</td><td>1999</td><td>|ff0000|Chip Masterson|</td><td>|ff0000|14 March 1977|</td></tr>
+</table>
+
+<div effect="fade-in">
+<example>
+{ "Tournament": "Indiana Invitational",
+ "Winners": [
+ { "Year": 1998, "Winner": "Al Fredrickson", "Date of Birth": "21 July 1975" },
+ { "Year": 1999, "Winner": "Chip Masterson", "Date of Birth": "14 March 1977" },
+ ]
+}
+{ "Tournament": "Cleveland Open",
+ "Winners": [
+ { "Year": 1999, "Winner": "Bob Albertson", "Date of Birth": "28 September 1968" },
+ ]
+}
+{ "Tournament": "Des Moines Masters",
+ "Winners": [
+ { "Year": 1999, "Winner": "Al Fredrickson", "Date of Birth": "21 July 1975" },
+ ]
+}
+</example>
+</div>
+</slide>
diff --git a/slides/mongodb/mongodb-acid.xml b/slides/mongodb/mongodb-acid.xml
new file mode 100644
index 0000000..151a2c2
--- /dev/null
+++ b/slides/mongodb/mongodb-acid.xml
@@ -0,0 +1,10 @@
+<slide>
+<title>MongoDB and ACID</title>
+
+<list>
+ <bullet>*A*tomicity</bullet>
+ <bullet>*C*onsitency</bullet>
+ <bullet>*I*solation</bullet>
+ <bullet>*D*urability</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/normal-form.xml b/slides/mongodb/normal-form.xml
new file mode 100644
index 0000000..f4c8df9
--- /dev/null
+++ b/slides/mongodb/normal-form.xml
@@ -0,0 +1,21 @@
+<slide>
+<title>Normalisation</title>
+
+<div effect="fade-out yes">
+<list>
+<bullet>*1NF*: A relation is in first normal form if the domain of each attribute contains only atomic values, and the value of each attribute contains only a single value from that domain.</bullet>
+<bullet>*2NF*: No non-prime attribute in the table is functionally dependent on a proper subset of any candidate key</bullet>
+<bullet>*3NF*: Every non-prime attribute is non-transitively dependent on every candidate key in the table. The attributes that do not contribute to the description of the primary key are removed from the table. In other words, no transitive dependency is allowed.</bullet>
+</list>
+</div>
+<div effect="fade-in">
+<list>
+<bullet>*EKNF*: Elementary Key Normal Form</bullet>
+<bullet>*BCNF*: Boyce–Codd normal form</bullet>
+<bullet>*4NF*: Fourth normal form</bullet>
+<bullet>*5NF*: Fifth normal form</bullet>
+<bullet>*DKNF*: Domain/key normal form</bullet>
+<bullet>*6NF*: Sixth normal form</bullet>
+</list>
+</div>
+</slide>
diff --git a/slides/mongodb/normal-form1.xml b/slides/mongodb/normal-form1.xml
new file mode 100644
index 0000000..13562a1
--- /dev/null
+++ b/slides/mongodb/normal-form1.xml
@@ -0,0 +1,14 @@
+<slide>
+<title>First Normal Form</title>
+
+<blurb>A relation is in first normal form if the domain of each attribute contains
+only atomic values, and the value of each attribute contains only a single
+value from that domain.</blurb>
+
+<table>
+<tr><th>Customer ID</th><th>First Name</th><th>Surname</th><th>Telephone Number</th></tr>
+<tr><td>123</td><td>Robert</td><td>Ingram</td><td>555-861-2025</td></tr>
+<tr><td>456</td><td>Jane</td><td>Wright</td><td>|ff0000|555-403-1659, 555-776-4100|</td></tr>
+<tr><td>789</td><td>Maria</td><td>Fernandez</td><td>555-808-9633</td></tr>
+</table>
+</slide>
diff --git a/slides/mongodb/normal-form2.xml b/slides/mongodb/normal-form2.xml
new file mode 100644
index 0000000..2775a2b
--- /dev/null
+++ b/slides/mongodb/normal-form2.xml
@@ -0,0 +1,16 @@
+<slide>
+<title>Second Normal Form</title>
+
+<blurb>No non-prime attribute in the table is functionally dependent on a
+proper subset of any candidate key</blurb>
+
+<table>
+<tr><th>Employee</th><th>Skill</th><th>Current Work Location</th></tr>
+<tr><td>Brown</td><td>Light Cleaning</td><td>73 Industrial Way</td></tr>
+<tr><td>Brown</td><td>Typing</td><td>|ff0000|73 Industrial Way|</td></tr>
+<tr><td>Harrison</td><td>Light Cleaning</td><td>73 Industrial Way</td></tr>
+<tr><td>Jones</td><td>Shorthand</td><td>114 Main Street</td></tr>
+<tr><td>Jones</td><td>Typing</td><td>|ff0000|114 Main Street|</td></tr>
+<tr><td>Jones</td><td>Whittling</td><td>|ff0000|114 Main Street|</td></tr>
+</table>
+</slide>
diff --git a/slides/mongodb/normal-form3.xml b/slides/mongodb/normal-form3.xml
new file mode 100644
index 0000000..df83b33
--- /dev/null
+++ b/slides/mongodb/normal-form3.xml
@@ -0,0 +1,16 @@
+<slide>
+<title>Third Normal Form</title>
+
+<blurb>Every non-prime attribute is non-transitively dependent on every
+candidate key in the table. The attributes that do not contribute to the
+description of the primary key are removed from the table. In other words, no
+transitive dependency is allowed.</blurb>
+
+<table>
+<tr><th>Tournament</th><th>Year</th><th>Winner</th><th>Winner Date of Birth</th></tr>
+<tr><td>Indiana Invitational</td><td>1998</td><td>|ff0000|Al Fredrickson|</td><td>|ff0000|21 July 1975|</td></tr>
+<tr><td>Cleveland Open</td><td>1999</td><td>|ff0000|Bob Albertson|</td><td>|ff0000|28 September 1968|</td></tr>
+<tr><td>Des Moines Masters</td><td>1999</td><td>|ff0000|Al Fredrickson|</td><td>|ff0000|21 July 1975|</td></tr>
+<tr><td>Indiana Invitational</td><td>1999</td><td>|ff0000|Chip Masterson|</td><td>|ff0000|14 March 1977|</td></tr>
+</table>
+</slide>
diff --git a/slides/mongodb/nosql-column.xml b/slides/mongodb/nosql-column.xml
new file mode 100644
index 0000000..48dc548
--- /dev/null
+++ b/slides/mongodb/nosql-column.xml
@@ -0,0 +1,18 @@
+<slide>
+<title>NoSQL: Column</title>
+
+<blurb>Example implementations:</blurb>
+<list>
+<bullet>Cassandra</bullet>
+<bullet>HBase/Hadoop</bullet>
+</list>
+
+<break/>
+
+<blurb>Data model:</blurb>
+<example>
+{ twitter: [ { "derick" : "derickr" }, { "jeremy" : "jmikola } ] }
+{ email: [ { "derick" : "[email protected]" } ] }
+{ sites: [ { "derick" : [ "http://derickrethans.nl", "http://xdebug.org" ] } ] }
+</example>
+</slide>
diff --git a/slides/mongodb/nosql-document.xml b/slides/mongodb/nosql-document.xml
new file mode 100644
index 0000000..b109989
--- /dev/null
+++ b/slides/mongodb/nosql-document.xml
@@ -0,0 +1,25 @@
+<slide>
+<title>NoSQL: Document</title>
+
+<blurb>Example implementations:</blurb>
+<list>
+<bullet>CouchDB</bullet>
+<bullet>MongoDB</bullet>
+</list>
+
+<break/>
+
+<blurb>Data model:</blurb>
+<example>
+{
+ _id: "derick",
+ twitter: "derickr",
+ email: "[email protected]",
+ sites: [ "http://derickrethans.nl", "http://xdebug.org" ]
+}
+{
+ _id: "jeremy",
+ twitter: "jmikola",
+}
+</example>
+</slide>
diff --git a/slides/mongodb/nosql-graph.xml b/slides/mongodb/nosql-graph.xml
new file mode 100644
index 0000000..7b76c8e
--- /dev/null
+++ b/slides/mongodb/nosql-graph.xml
@@ -0,0 +1,19 @@
+<slide>
+<title>NoSQL: Graph</title>
+
+<blurb>Example implementations:</blurb>
+<list>
+<bullet>neo4j</bullet>
+</list>
+
+<break/>
+
+<blurb>Data model:</blurb>
+<example>
+[ "derick", "follows", "jeremy" ]
+[ "jeremy", "follows", "derick" ]
+[ "derick", "follows", "Queen_UK" ]
+[ "derick", "twitters_with", "derickr" ]
+[ "jeremy", "twitters_with", "jmikola" ]
+</example>
+</slide>
diff --git a/slides/mongodb/nosql-kv.xml b/slides/mongodb/nosql-kv.xml
new file mode 100644
index 0000000..2dc3872
--- /dev/null
+++ b/slides/mongodb/nosql-kv.xml
@@ -0,0 +1,20 @@
+<slide>
+<title>NoSQL: Key/Value</title>
+
+<blurb>Example implementations:</blurb>
+<list>
+<bullet>Memcache</bullet>
+<bullet>Redis</bullet>
+</list>
+
+<break/>
+
+<blurb>Data model:</blurb>
+<example>
+{ "derick-twitter": "derickr" }
+{ "derick-email": "[email protected]" }
+{ "jeremy-twitter": "jmikola" }
+
+{ "derick-sites": [ "http://derickrethans.nl", "http://xdebug.org" ] }
+</example>
+</slide>
diff --git a/slides/mongodb/one-to-many4.xml b/slides/mongodb/one-to-many4.xml
index 776118f..3eb4628 100644
--- a/slides/mongodb/one-to-many4.xml
+++ b/slides/mongodb/one-to-many4.xml
@@ -20,7 +20,6 @@
<blurb>Views collection:</blurb>
<example><![CDATA[
{ article_id: 4, time: 1350297458, ip: "192.168.42.101" },
-{ article_id: 4, time: 1350297729, ip: "192.168.42.103" },
{ article_id: 4, time: 1350298912, ip: "192.168.42.102" },
{ article_id: 7, time: 1350297458, ip: "192.168.42.101" },
]]></example>
diff --git a/slides/mongodb/platipus.jpg b/slides/mongodb/platipus.jpg
new file mode 100644
index 0000000..e93712f
Binary files /dev/null and b/slides/mongodb/platipus.jpg differ
diff --git a/slides/mongodb/platipus.xml b/slides/mongodb/platipus.xml
new file mode 100644
index 0000000..1196ee3
--- /dev/null
+++ b/slides/mongodb/platipus.xml
@@ -0,0 +1,4 @@
+<slide>
+<title>NoSQL</title>
+<image filename="platipus.jpg"/>
+</slide>
diff --git a/slides/mongodb/relational-model.xml b/slides/mongodb/relational-model.xml
new file mode 100644
index 0000000..1046215
--- /dev/null
+++ b/slides/mongodb/relational-model.xml
@@ -0,0 +1,12 @@
+<slide>
+<title>The Relational Model</title>
+
+<blurb>Edgar Codd in 1969</blurb>
+
+<list>
+<bullet>Row</bullet>
+<bullet>Column</bullet>
+<bullet>Table</bullet>
+<bullet>View (Result)</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/repl-features.xml b/slides/mongodb/repl-features.xml
index 966788c..e8563ef 100644
--- a/slides/mongodb/repl-features.xml
+++ b/slides/mongodb/repl-features.xml
@@ -1,5 +1,5 @@
<slide>
-<title>Replicaset features</title>
+<title>MongoDB Replicaset features</title>
<list>
<bullet>A cluster of N servers</bullet>
diff --git a/slides/mongodb/sql2nosql-conclusion.xml b/slides/mongodb/sql2nosql-conclusion.xml
new file mode 100644
index 0000000..8ae2625
--- /dev/null
+++ b/slides/mongodb/sql2nosql-conclusion.xml
@@ -0,0 +1,12 @@
+<slide>
+<title>Wrapping up</title>
+
+<blurb>In NoSQL:</blurb>
+<list>
+ <bullet>No real schema design "theory"</bullet>
+ <bullet>Schema design depends on data access paterns</bullet>
+ <bullet>ACID vs. CAP</bullet>
+ <bullet>Traditional relational database features are replaced by features
+ for scalability</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/update-atomicity.xml b/slides/mongodb/update-atomicity.xml
new file mode 100644
index 0000000..69a383b
--- /dev/null
+++ b/slides/mongodb/update-atomicity.xml
@@ -0,0 +1,39 @@
+<slide>
+<title>Atomicity (ACID): Update operators</title>
+
+<div effect="fade-out">
+<blurb>Don't do this:</blurb>
+<example inline="1">
+$m = new MongoClient;
+$c = $m->demo->steps;
+$r = $c->findOne( [ 'person' => 'derickr' ] );
+*$r['steps_made']["20140202"] = $r['steps_made']["20140202"] + 7124;*
+*$c->update( [ 'person' => 'derickr' ], $r );*
+</example>
+</div>
+
+<div effect="fade-in">
+<blurb>Do this instead:</blurb>
+<example inline="1">
+$m = new MongoClient;
+$c = $m->demo->steps;
+$c->update(
+ [ 'person' => 'derickr' ],
+ [ '$inc' => [ "steps_made.20140202" => 7124 ] ]
+);
+</example>
+
+<blurb>Other operators:</blurb>
+<example inline="1">$c->update(
+ [ 'person' => 'derickr' ],
+ [ *'$addToSet'* => [ 'tags' => 'openstreetmap '] ]
+);</example>
+<example inline="1">$c->update(
+ [ 'person' => 'derickr' ],
+ [ *'$push'* => [ 'tags' => [
+ '$each' => [ 'mongodb', 'xdebug' ],
+ '$slice' => -2
+ ] ] ]
+);</example>
+</div>
+</slide>
diff --git a/slides/mongodb/update-consistency.xml b/slides/mongodb/update-consistency.xml
new file mode 100644
index 0000000..3331586
--- /dev/null
+++ b/slides/mongodb/update-consistency.xml
@@ -0,0 +1,9 @@
+<slide>
+<title>Consistency (ACID): Schemas</title>
+
+<list>
+<bullet>There is no schema</bullet>
+<bullet>There is no schema validation</bullet>
+<bullet>Hence, no ACID consistency</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/update-intro.xml b/slides/mongodb/update-intro.xml
new file mode 100644
index 0000000..9ad7785
--- /dev/null
+++ b/slides/mongodb/update-intro.xml
@@ -0,0 +1,27 @@
+<slide>
+<title>Updating data</title>
+
+<example inline="1">
+$m->demo->steps->update(
+ [ 'person' => "derickr" ],
+ [ '$inc' => [ "steps_made.20140202" => 712 ] ],
+ [ 'upsert' => true ]
+);
+</example>
+<blurb>Record after update:</blurb>
+<example>
+{
+ person: "derickr",
+ steps_made: {
+ "20140201": 10800,
+ "20140202": 712,
+ }
+}
+</example>
+
+<list>
+<bullet>Atomic *per-document* only</bullet>
+<bullet>No transactions</bullet>
+<bullet>Can't use other field names in updates</bullet>
+</list>
+</slide>
diff --git a/slides/mongodb/writeconcern-consistency-list.xml b/slides/mongodb/writeconcern-consistency-list.xml
new file mode 100644
index 0000000..4203d2e
--- /dev/null
+++ b/slides/mongodb/writeconcern-consistency-list.xml
@@ -0,0 +1,12 @@
+<slide>
+<title>Consistency (CAP) and Durability (ACID): WriteConcerns</title>
+
+<table>
+<tr><td>w=0</td><td>Unacknowledged</td><td>A write will not be followed up with a GLE call, and therefore not checked</td></tr>
+<tr><td>w=1</td><td>Acknowledged</td><td>The write will be acknowledged by the (primary) server)</td></tr>
+<tr><td>w=N</td><td>Replica Set Acknowledged</td><td>The write will be acknowledged by the primary server, and replicated to N-1 secondaries.</td></tr>
+<tr><td>w=majority</td><td>Majority Acknowledged</td><td>The write will be acknowledged by the majority of the replica set (including the primary). This is a special reserved string.</td></tr>
+<tr><td>w={tagset}</td><td>Replica Set Tag Set Acknowledged</td><td>The write will be acknowledged by members of the entire tag set</td></tr>
+<tr><td>j=true</td><td>Journaled</td><td>The write will be acknowledged by primary and the journal flushed to disk</td></tr>
+</table>
+</slide>
diff --git a/slides/mongodb/writeconcern-consistency.xml b/slides/mongodb/writeconcern-consistency.xml
new file mode 100644
index 0000000..810d6ab
--- /dev/null
+++ b/slides/mongodb/writeconcern-consistency.xml
@@ -0,0 +1,21 @@
+<slide>
+<title>Consistency (CAP) and Durability (ACID): WriteConcerns</title>
+
+<blurb>Consistency-level can be picked *per-query*:</blurb>
+
+<example inline="1"><![CDATA[
+$m = new MongoClient;
+$c = $m->workout->steps;
+$c->insert( [
+ 'person' => 'derickr',
+ 'steps_made' => [
+ '20140201' => 10800
+ ],
+ *[ 'w' => 1 ]*
+);]]></example>
+
+<blurb>But also with defaults:</blurb>
+<example inline="1">
+$m = new MongoClient("mongodb://localhost/?w=*majority*");
+</example>
+</slide>
diff --git a/sql2nosql-confoo14.xml b/sql2nosql-confoo14.xml
new file mode 100644
index 0000000..95427ad
--- /dev/null
+++ b/sql2nosql-confoo14.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>mongoDB</topic>
+<title>From SQL to NoSQL</title>
+<event>ConFoo</event>
+<location>Montréal, Canada</location>
+<date>Feb 26th, 2014</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin>http://joind.in/</joindin>
+<slide>slides/mongodb/title.xml</slide>
+
+<!-- DINOSAUR vs PLATIPUS -->
+<slide>slides/mongodb/relational-model.xml</slide>
+<slide>slides/mongodb/dinosaur.xml</slide>
+<slide>slides/mongodb/normal-form.xml</slide>
+<slide>slides/mongodb/normal-form1.xml</slide>
+<slide>slides/mongodb/normal-form2.xml</slide>
+<slide>slides/mongodb/normal-form3.xml</slide>
+
+<!-- DIFFERENT NoSQL -->
+<slide>slides/mongodb/nosql.xml</slide>
+<slide>slides/mongodb/nosql-kv.xml</slide>
+<slide>slides/mongodb/nosql-column.xml</slide>
+<slide>slides/mongodb/nosql-graph.xml</slide>
+<slide>slides/mongodb/nosql-document.xml</slide>
+<slide>slides/mongodb/platipus.xml</slide>
+
+<!-- ACID vs CAP -->
+<slide>slides/mongodb/acid.xml</slide>
+<slide>slides/mongodb/cap.xml</slide>
+
+<!-- A FEW NOTES ON MONGODB -->
+<slide>slides/mongodb/databasefield.xml</slide>
+<slide>slides/mongodb/collections-documents.xml</slide>
+<slide>slides/mongodb/document.xml</slide>
+<slide>slides/mongodb/mongodb-1nf.xml</slide>
+<slide>slides/mongodb/mongodb-2nf.xml</slide>
+<slide>slides/mongodb/mongodb-3nf.xml</slide>
+<slide>slides/mongodb/insert-intro.xml</slide>
+<slide>slides/mongodb/update-intro.xml</slide>
+<slide>slides/mongodb/update-atomicity.xml</slide>
+<slide>slides/mongodb/update-consistency.xml</slide>
+
+<slide>slides/mongodb/arbitrary-keys1.xml</slide>
+<slide>slides/mongodb/one-to-many2.xml</slide>
+<slide>slides/mongodb/one-to-many4.xml</slide>
+<slide>slides/mongodb/embed-vs-link.xml</slide>
+
+<slide>slides/mongodb/writeconcern-consistency.xml</slide>
+<slide>slides/mongodb/writeconcern-consistency-list.xml</slide>
+
+<!-- REPLICATION -->
+<slide>slides/mongodb/availability.xml</slide>
+<slide>slides/mongodb/repl-features.xml</slide>
+<slide>slides/mongodb/repl-works-basic.xml</slide>
+<slide>slides/mongodb/repl-works-normal.xml</slide>
+<slide>slides/mongodb/repl-works-failover.xml</slide>
+
+<slide>slides/mongodb/repl-eventual-consistency.xml</slide>
+
+<slide>slides/mongodb/sql2nosql-conclusion.xml</slide>
+<slide>slides/mongodb/resources.xml</slide>
+
+</presentation>