com presentations: MongoDB Scaling Workshop for php[tek]: mongodb-tek18.xml slides/mongodb/php-connection-string.xml slides/mongodb/read-preference.xml slides/mongodb/read-preference2.xml slides/mongodb/repl-eventual-consistency.xml slides/mongodb/repl-features.xml slides/mongodb/repl-read-concern.xml slides/mongodb/repl-typical.xml slides/mongodb/repl-write-concern.xml slides/mongodb/replication-exercise-script.xml slides/mongodb/replication-set

[email protected] (Derick Rethans) Sun, 27 May 2018 13:59:26 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Commit:    44d3d3798b67ee695e89c87e3f83fa6286aa5d32
Author:    Derick Rethans <[email protected]>         Sun, 27 May 2018 14:56:13 +0100
Parents:   d8ea64ccc7238cf909d6dae7b4857b8d82c1e079
Branches:  master

Link:       http://git.php.net/?p=presentations.git;a=commitdiff;h=44d3d3798b67ee695e89c87e3f83fa6286aa5d32

Log:
MongoDB Scaling Workshop for php[tek]

Changed paths:
  A  mongodb-tek18.xml
  M  slides/mongodb/php-connection-string.xml
  M  slides/mongodb/read-preference.xml
  M  slides/mongodb/read-preference2.xml
  M  slides/mongodb/repl-eventual-consistency.xml
  M  slides/mongodb/repl-features.xml
  A  slides/mongodb/repl-read-concern.xml
  M  slides/mongodb/repl-typical.xml
  M  slides/mongodb/repl-write-concern.xml
  A  slides/mongodb/replication-exercise-script.xml
  M  slides/mongodb/replication-setup.xml
  M  slides/mongodb/sharding-data-store-now.xml
  M  slides/mongodb/sharding-shard.xml
  A  xdebug-tek18.xml
diff_44d3d3798b67ee695e89c87e3f83fa6286aa5d32.txt (text/plain, 20.7 KB)
diff --git a/mongodb-tek18.xml b/mongodb-tek18.xml
new file mode 100644
index 0000000..055051b
--- /dev/null
+++ b/mongodb-tek18.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>MongoDB</topic>
+<title>Scaling MongoDB Workshop</title>
+<event>php[tek]</event>
+<location>Atlanta, GA, USA</location>
+<date>May 30th, 2018</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin>https://joind.in/23167</joindin>
+<slide>slides/mongodb/title.xml</slide>
+
+<slide>slides/mongodb/databasefield.xml</slide>
+
+<slide>slides/mongodb/nosql.xml</slide>
+<slide>slides/mongodb/cap.xml</slide>
+
+<slide>slides/mongodb/new-architecture.xml</slide>
+
+<slide>slides/mongodb/collections-documents.xml</slide>
+
+<slide>slides/mongodb/document-complex.xml</slide>
+<slide>slides/mongodb/phplib-intro.xml</slide>
+<slide>slides/mongodb/phplib-crud.xml</slide>
+<slide>slides/mongodb/query-side-by-side.xml</slide>
+
+
+<!-- REPLICATION -->
+<slide>slides/mongodb/section-replication.xml</slide>
+
+<slide>slides/mongodb/repl-use-cases.xml</slide>
+<slide>slides/mongodb/repl-types-of-outage.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-failover1.xml</slide>
+<slide>slides/mongodb/repl-works-failover2.xml</slide>
+<slide>slides/mongodb/repl-works-failover3.xml</slide>
+<slide>slides/mongodb/repl-works-failover4.xml</slide>
+<slide>slides/mongodb/repl-oplog.xml</slide>
+
+<slide>slides/mongodb/php-connection-string.xml</slide>
+
+<slide>slides/mongodb/repl-managing.xml</slide>
+<slide>slides/mongodb/repl-priorities1.xml</slide>
+<slide>slides/mongodb/repl-priorities2.xml</slide>
+<slide>slides/mongodb/repl-priorities3.xml</slide>
+<slide>slides/mongodb/read-preference2.xml</slide>
+<slide>slides/mongodb/read-preference.xml</slide>
+<slide>slides/mongodb/repl-write-concern.xml</slide>
+<slide>slides/mongodb/repl-eventual-consistency.xml</slide>
+<slide>slides/mongodb/repl-read-concern.xml</slide>
+<slide>slides/mongodb/repl-features2.xml</slide>
+
+<!-- FIRST EXCERCISE -->
+<slide>slides/mongodb/excercise.xml</slide>
+<slide>slides/mongodb/replication-setup.xml</slide>
+<slide>slides/mongodb/replication-exercise-script.xml</slide>
+
+<slide>slides/mongodb/repl-scenarios.xml</slide>
+<slide>slides/mongodb/repl-single.xml</slide>
+<slide>slides/mongodb/repl-set1.xml</slide>
+<slide>slides/mongodb/repl-set2.xml</slide>
+<slide>slides/mongodb/repl-set3.xml</slide>
+<slide>slides/mongodb/repl-set4.xml</slide>
+<slide>slides/mongodb/repl-set5.xml</slide>
+<slide>slides/mongodb/repl-typical.xml</slide>
+
+<slide>slides/mongodb/atlas.xml</slide>
+
+<!-- SHARDING -->
+<slide>slides/mongodb/section-sharding.xml</slide>
+<slide>slides/mongodb/sharding-vertical-scale.xml</slide>
+<slide>slides/mongodb/sharding-horizontal-scale.xml</slide>
+<slide>slides/mongodb/sharding-data-store-old.xml</slide>
+<slide>slides/mongodb/sharding-why.xml</slide>
+<slide>slides/mongodb/sharding-working-set.xml</slide>
+<slide>slides/mongodb/sharding-throughput.xml</slide>
+<slide>slides/mongodb/sharding-mongo-approach.xml</slide>
+<slide>slides/mongodb/sharding-partition.xml</slide>
+<slide>slides/mongodb/sharding-chunks.xml</slide>
+<slide>slides/mongodb/sharding-manages.xml</slide>
+<slide>slides/mongodb/sharding-auto-shard.xml</slide>
+<slide>slides/mongodb/sharding-architecture.xml</slide>
+<slide>slides/mongodb/sharding-shard.xml</slide>
+<slide>slides/mongodb/sharding-config-server.xml</slide>
+<slide>slides/mongodb/sharding-mongos-manages.xml</slide>
+<slide>slides/mongodb/sharding-infrastructure.xml</slide>
+<!--
+<slide>slides/mongodb/sharding-configuration.xml</slide>
+<slide>slides/mongodb/sharding-example-setup.xml</slide>
+<slide>slides/mongodb/sharding-start-config.xml</slide>
+<slide>slides/mongodb/sharding-start-mongos.xml</slide>
+<slide>slides/mongodb/sharding-start-db.xml</slide>
+<slide>slides/mongodb/sharding-add-shard.xml</slide>
+<slide>slides/mongodb/sharding-verify-added.xml</slide>
+<slide>slides/mongodb/sharding-enable.xml</slide>
+-->
+<slide>slides/mongodb/sharding-key-title.xml</slide>
+<slide>slides/mongodb/sharding-shard-key.xml</slide>
+<slide>slides/mongodb/sharding-key-considerations.xml</slide>
+- hashed shard keys can help with the 512-byte size limitation
+
+<slide>slides/mongodb/sharding-key-example.xml</slide>
+<slide>slides/mongodb/sharding-key-example2.xml</slide>
+<slide>slides/mongodb/sharding-connecting.xml</slide>
+
+<slide>slides/mongodb/sharding-mechanics.xml</slide>
+<slide>slides/mongodb/sharding-partitioning.xml</slide>
+<slide>slides/mongodb/sharding-chunk-is-range.xml</slide>
+<slide>slides/mongodb/sharding-chunk-splitting.xml</slide>
+<slide>slides/mongodb/sharding-balancing.xml</slide>
+<!--
+<slide>slides/mongodb/sharding-acquire-lock.xml</slide>
+<slide>slides/mongodb/sharding-move-chunk.xml</slide>
+<slide>slides/mongodb/sharding-commit-migration.xml</slide>
+<slide>slides/mongodb/sharding-cleanup.xml</slide>
+-->
+<slide>slides/mongodb/sharding-balancing-tips.xml</slide>
+<slide>slides/mongodb/sharding-routing.xml</slide>
+<slide>slides/mongodb/sharding-routing-types.xml</slide>
+<slide>slides/mongodb/sharding-targeted-query.xml</slide>
+<slide>slides/mongodb/sharding-targeted-query1.xml</slide>
+<slide>slides/mongodb/sharding-targeted-query2.xml</slide>
+<slide>slides/mongodb/sharding-targeted-query3.xml</slide>
+<slide>slides/mongodb/sharding-targeted-query4.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-query.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-query1.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-query2.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-query3.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-query4.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query1.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query2.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query3.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query4.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query5.xml</slide>
+<slide>slides/mongodb/sharding-non-targeted-with-sort-query6.xml</slide>
+<!--
+<slide>slides/mongodb/sharding-geo-aware.xml</slide>
+<slide>slides/mongodb/sharding-add-tag.xml</slide>
+<slide>slides/mongodb/sharding-tag-shard-range.xml</slide>
+-->
+
+<slide>slides/mongodb/atlas.xml</slide>
+
+<slide>slides/mongodb/questions.xml</slide>
+<slide>slides/mongodb/resources.xml</slide>
+</presentation>
diff --git a/slides/mongodb/php-connection-string.xml b/slides/mongodb/php-connection-string.xml
index 1be50f3..8075bc7 100644
--- a/slides/mongodb/php-connection-string.xml
+++ b/slides/mongodb/php-connection-string.xml
@@ -2,6 +2,8 @@
 <title>Connection String</title>
 
 <example result="0"><![CDATA[<?php
+require 'vendor/autoload.php';
+
 $options = [ 'replicaSet' => 'seta' ];
 
 $m = new \MongoDB\Client( 'mongodb://localhost:13000/?replicaSet=seta' );
diff --git a/slides/mongodb/read-preference.xml b/slides/mongodb/read-preference.xml
index a0a8023..f9b12c6 100644
--- a/slides/mongodb/read-preference.xml
+++ b/slides/mongodb/read-preference.xml
@@ -1,17 +1,18 @@
 <slide>
-<title>Read preferences</title>
+<title>Read Preference</title>
+<subtitle>%\MongoDB\Driver\ReadPreference%</subtitle>
 
 <example result="0"><![CDATA[<?php
-$m = new \Mongo\Driver\Manager(
+$m = new \MongoDB\Client(
     'mongodb://localhost:13000/?replicaSet=poiset' .
     '&readPreference=nearest&readPreferenceTags=dc:asia'
 );
 
-$m->executeQuery( 'demo.test', $query );
+$m->demo->test->find( $query );
 ?>]]></example>
 <blurb>or per-query:</blurb>
 <example result="0"><![CDATA[<?php
-$m = new \Mongo\Driver\Manager(
+$m = new \MongoDB\Client(
     'mongodb://localhost:13000/?replicaSet=poiset'
 );
 
@@ -19,7 +20,7 @@ $rp = new MongoDB\Driver\ReadPreference(
     MongoDB\Driver\ReadPreference::RP_NEAREST, [ [ 'dc' => 'asia' ] ]
 );
 
-$m->executeQuery( 'demo.test', $query, $rp );
+$m->demo->test->find( $query, [ 'readPreference' => $rp ] );
 ?>]]></example>
 
 </slide>
diff --git a/slides/mongodb/read-preference2.xml b/slides/mongodb/read-preference2.xml
index a69ac99..ca425be 100644
--- a/slides/mongodb/read-preference2.xml
+++ b/slides/mongodb/read-preference2.xml
@@ -1,13 +1,14 @@
 <slide>
-<title>Read preferences</title>
+<title>Read Preference</title>
+<subtitle>%\MongoDB\Driver\ReadPreference%</subtitle>
 
 <blurb>Select between candidate servers from a specific set</blurb>
 <list>
-	<bullet>primary (default)</bullet>
-	<bullet>primary_preferred (%RP_PRIMARY_PREFERRED%)</bullet>
-	<bullet>secondary</bullet>
-	<bullet>secondary_preferred</bullet>
-	<bullet>nearest</bullet>
+	<bullet>%RP_PRIMARY% (default)</bullet>
+	<bullet>%RP_PRIMARY_PREFERRED%</bullet>
+	<bullet>%RP_SECONDARY%</bullet>
+	<bullet>%RP_SECONDARY_PREFERRED%</bullet>
+	<bullet>%RP_NEAREST%</bullet>
 </list>
 <break/>
 <list>
diff --git a/slides/mongodb/repl-eventual-consistency.xml b/slides/mongodb/repl-eventual-consistency.xml
index 1072f24..bcd2165 100644
--- a/slides/mongodb/repl-eventual-consistency.xml
+++ b/slides/mongodb/repl-eventual-consistency.xml
@@ -1,8 +1,8 @@
 <slide>
-<title>Eventual consistency</title>
+<title>Eventual Consistency</title>
 
 <list>
-    <bullet>Read Preferences (except %RP_PRIMARY%)
+    <bullet>Read Preference (except %RP_PRIMARY%)
 		<list>
 			<bullet>Driver will always send writes to primary</bullet>
 			<bullet>Driver will send read requests to secondaries</bullet>
@@ -14,7 +14,6 @@
 		<list>
 			<bullet>Secondaries may be out of date</bullet>
 			<bullet>Failover may happen while you're trying to write</bullet>
-			<bullet>Not appropriate for all applications</bullet>
 		</list>
 	</bullet>
 </list>
diff --git a/slides/mongodb/repl-features.xml b/slides/mongodb/repl-features.xml
index 834c67d..73f62f9 100644
--- a/slides/mongodb/repl-features.xml
+++ b/slides/mongodb/repl-features.xml
@@ -2,11 +2,11 @@
 <title>MongoDB Replica Set Features</title>
 
 <list>
-    <bullet>A cluster of N servers</bullet>
-    <bullet>All writes to primary</bullet>
+    <bullet>A cluster of *~n~* servers</bullet>
+    <bullet>All writes to *primary*</bullet>
     <bullet>Reads can be from primary (default) or a secondary</bullet>
-    <bullet>Any (one) node can be primary</bullet>
-    <bullet>Consensus election of primary</bullet>
+    <bullet>Any *(one)* node can be primary</bullet>
+    <bullet>Consensus *election* of primary</bullet>
     <bullet>Automatic failover and recovery</bullet>
 </list>
 </slide>
diff --git a/slides/mongodb/repl-read-concern.xml b/slides/mongodb/repl-read-concern.xml
new file mode 100644
index 0000000..1a0412c
--- /dev/null
+++ b/slides/mongodb/repl-read-concern.xml
@@ -0,0 +1,21 @@
+<slide>
+<title>Read Concern</title>
+<subtitle>%\MongoDB\Driver\ReadConcern%</subtitle>
+
+<list>
+	<bullet>%local%: No guarantees</bullet>
+	<bullet>%available%: No guarantees</bullet>
+	<bullet>%majority%: Returns data acknowledged by a majority of the nodes</bullet>
+	<bullet>%lineralizable%: Returns data acknowledged by a majority of the nodes, completed before the start of the read operation</bullet>
+</list>
+
+<example result="0"><![CDATA[<?php
+$m = new \MongoDB\Client(
+    'mongodb://localhost:13000/?replicaSet=poiset'
+);
+
+$rc = new MongoDB\Driver\ReadConcern( MongoDB\Driver\ReadConcern::LINEARIZABLE );
+
+$m->demo->test->find( $query, [ 'readConcern' => $rc, 'maxTimeMS' => 200 ] );
+?>]]></example>
+</slide>
diff --git a/slides/mongodb/repl-typical.xml b/slides/mongodb/repl-typical.xml
index a29ce28..e3b8892 100644
--- a/slides/mongodb/repl-typical.xml
+++ b/slides/mongodb/repl-typical.xml
@@ -4,7 +4,7 @@
 <table>
 <tr><th>Use</th><th>Set size</th><th>Data protection</th><th>High Availability</th><th>Notes</th></tr>
 <tr><td> </td><td>1</td><td>No </td><td>No</td><td>Must use --journal to protect against crashes</td></tr>
-<tr><td>|008800|✔|</td><td>2</td><td>Yes</td><td>No</td><td>On loss of one member, set becomes read-only</td></tr>
+<tr><td> </td><td>2</td><td>Yes</td><td>No</td><td>On loss of one member, set becomes read-only</td></tr>
 <tr><td>|008800|✔|</td><td>3</td><td>Yes</td><td>Yes - 1 failure</td><td>On loss of one member, two surviving nodes can elect new primary</td></tr>
 <tr><td> </td><td>4</td><td>Yes</td><td>Yes - 1 failure</td><td>On loss of two members, two surviving nodes are read-only</td></tr>
 <tr><td>|008800|✔|</td><td>5</td><td>Yes</td><td>Yes - 2 failures</td><td>On loss of two members, three surviving nodes can elect new primary</td></tr>
diff --git a/slides/mongodb/repl-write-concern.xml b/slides/mongodb/repl-write-concern.xml
index 3df5066..dbd407b 100644
--- a/slides/mongodb/repl-write-concern.xml
+++ b/slides/mongodb/repl-write-concern.xml
@@ -1,20 +1,20 @@
 <slide>
-<title>Write concerns</title>
-
-<example><![CDATA[<?php
-$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
-
-$bulk = new MongoDB\Driver\BulkWrite();
-$bulk->insert(['_id' => 1, 'x' => 1]);
-
-$result = $manager->executeBulkWrite( 'db.collection', $bulk, $wc );
-]]></example>
+<title>Write Concern</title>
+<subtitle>%\MongoDB\Driver\WriteConcern%</subtitle>
 
 <list>
 	<bullet>Two nodes:<br/><example>$wc = new MongoDB\Driver\WriteConcern( 2 );</example></bullet>
-	<bullet>Majority of nodes:<br/><example>$wc = new MongoDB\Driver\WriteConcern( MongoDB\Driver\WriteConcern::MAJORITY  );</example></bullet>
-	<bullet>With timeout:<br/><example>$wc = new MongoDB\Driver\WriteConcern(
-    MongoDB\Driver\WriteConcern::MAJORITY, 10000
-);</example></bullet>
+	<bullet>Majority of nodes:<br/><example>$wc = new MongoDB\Driver\WriteConcern( MongoDB\Driver\WriteConcern::MAJORITY );</example></bullet>
+	<bullet>With timeout:<br/><example>$wc = new MongoDB\Driver\WriteConcern( MongoDB\Driver\WriteConcern::MAJORITY, 10000 );</example></bullet>
 </list>
+
+<example><![CDATA[<?php
+require 'vendor/autoload.php';
+$con = new \MongoDB\Client('mongodb://localhost:27017');
+
+$res = $con->db->collection->insertOne(
+	[ '_id' => 1, 'x' => 1 ],
+	[ 'writeConcern' => $wc ],
+);
+]]></example>
 </slide>
diff --git a/slides/mongodb/replication-exercise-script.xml b/slides/mongodb/replication-exercise-script.xml
new file mode 100644
index 0000000..ad55b8a
--- /dev/null
+++ b/slides/mongodb/replication-exercise-script.xml
@@ -0,0 +1,26 @@
+<slide>
+<title>Write Some Code</title>
+
+<blurb>Write a script that:</blurb>
+<list>
+	<bullet>Connects to the Replica Set</bullet>
+	<bullet>Inserts a Document</bullet>
+	<bullet>Reads Document from Secondary</bullet>
+</list>
+
+<break/>
+<example>
+mkdir new-project
+cd new-project
+composer require mongodb/mongodb
+</example>
+<example><![CDATA[<?php
+require 'vendor/autoload.php';
+
+$client = new \Mongo\Client( $dsn );
+$collection = $client->selectCollection( 'databasename', 'collectionname' );
+?>]]></example>
+
+<break/>
+<blurb>See slides: ~9~, ~22~, ~28~</blurb>
+</slide>
diff --git a/slides/mongodb/replication-setup.xml b/slides/mongodb/replication-setup.xml
index 353184c..378d05f 100644
--- a/slides/mongodb/replication-setup.xml
+++ b/slides/mongodb/replication-setup.xml
@@ -1,38 +1,28 @@
 <slide>
-<title>Setting up replication</title>
+<title>Setting up Replication</title>
 
-<blurb>Starting the daemons (2 data, 1 arbiter):</blurb>
+<blurb>Open three terminals, and create three directories: %db1%, %db2% and %arb%</blurb>
 
+<blurb>Starting the daemons (2 data, 1 arbiter):</blurb>
 <example>
-mongod -f /etc/mongodb.conf --dbpath=~/repl-slave0 --port 13000 --replSet seta
-mongod -f /etc/mongodb.conf --dbpath=~/repl-slave1 --port 13001 --replSet seta
-mongod -f /etc/mongodb.conf --dbpath=~/repl-arb --port 13002 --replSet seta --rest
+mongod --dbpath=./db1 --port 13000 --replSet seta --smallfiles --logpath=db1.log
+mongod --dbpath=./db2 --port 13001 --replSet seta --smallfiles --logpath=db2.log
+mongod --dbpath=./arb --port 13002 --replSet seta --smallfiles --logpath=arb.log
 </example>
 
-<div effect="fade-out">
-<blurb>Sample %/etc/mongodb.conf%</blurb>
-<example>
-logpath=/var/log/mongodb/mongodb.log
-logappend=true
-smallfiles=true
-</example>
-</div>
-<div effect="fade-in">
 <blurb>Configure the set:</blurb>
 <example>
-mongo whisky:13000
+$ mongo localhost:13000
 
-> db.adminCommand( {
-  replSetInitiate: {
-    _id: 'seta',
-    members: [
-     { _id: 0, host: 'whisky:13000', tags: { 'dc': 'west', 'use': 'accounting' } },
-     { _id: 1, host: 'whisky:13001', tags: { 'dc': 'east', 'use': 'reporting' } },
-    ]
-  }
-} );
+> rs.initiate( { _id: 'seta', members: [ { _id: 0, host: 'localhost:13000' } ] } );
+seta:PRIMARY> rs.add('localhost:13001');
+seta:PRIMARY> rs.addArb('localhost:13002');
+</example>
 
-PRIMARY> rs.addArb('whisky:13002');
+<blurb>Check whether it worked:</blurb>
+<example>
+seta:PRIMARY> db.isMaster();
+seta:PRIMARY> rs.status();
 </example>
-</div>
+
 </slide>
diff --git a/slides/mongodb/sharding-data-store-now.xml b/slides/mongodb/sharding-data-store-now.xml
index ac4a3f8..a9d4441 100644
--- a/slides/mongodb/sharding-data-store-now.xml
+++ b/slides/mongodb/sharding-data-store-now.xml
@@ -2,17 +2,8 @@
 <title>Data Store Scalability Today</title>
 
 <list>
-	<bullet>
-		MongoDB auto-sharding available
-	</bullet>
-	<bullet>
-		A data store that is
-		<list>
-            <bullet>Free and publicly available</bullet>
-            <bullet>Open source (https://github.com/mongodb/mongo)</bullet>
-            <bullet>Horizontally scalable</bullet>
-            <bullet>Application independent</bullet>
-		</list>
-	</bullet>
+	<bullet>MongoDB has auto-sharding</bullet>
+	<bullet>Horizontally scalable</bullet>
+	<bullet>Application independent</bullet>
 </list>
 </slide>
diff --git a/slides/mongodb/sharding-shard.xml b/slides/mongodb/sharding-shard.xml
index 46029c2..9acc431 100644
--- a/slides/mongodb/sharding-shard.xml
+++ b/slides/mongodb/sharding-shard.xml
@@ -3,7 +3,7 @@
 
 <list>
     <bullet>Shard is a node of the cluster</bullet>
-    <bullet>Shard can be a single mongod or a replica set</bullet>
+    <bullet>Shard can be ---a single mongod or--- a replica set</bullet>
 </list>
 
 <break lines="3"/>
diff --git a/xdebug-tek18.xml b/xdebug-tek18.xml
new file mode 100644
index 0000000..7351e9b
--- /dev/null
+++ b/xdebug-tek18.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<presentation css="10gen-strict.css">
+<topic>Debugging</topic>
+<title>What's New in Xdebug</title>
+<event>php[tek] 2018</event>
+<location>Atlanta, GA, USA</location>
+<date>June 1st, 2018</date>
+<speaker>Derick Rethans</speaker>
+<email>[email protected]</email>
+<twitter>derickr</twitter>
+<url>http://derickrethans.nl/talks.html</url>
+<joindin>https://joind.in/23137</joindin>
+<slide>slides/mongodb/title.xml</slide>
+
+<slide>slides/mongodb/me.xml</slide>
+
+<slide>slides/xdebug/xdebug-var-dump.xml</slide>
+<slide>slides/xdebug/shutup.xml</slide>
+
+<slide>slides/xdebug/tracing.xml</slide>
+<slide>slides/xdebug/functiontrace-summary.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.3-error-munging.xml</slide>
+
+<slide>slides/xdebug/analyse-running-script.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.3-new.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-new-dbgp.xml</slide>
+
+<slide>slides/xdebug/debugger-activation.xml</slide>
+<slide>slides/xdebug/debugger-browser-extensions.xml</slide>
+<slide>slides/xdebug/phpstorm.xml</slide>
+<slide>slides/xdebug/debugger-connection-log.xml</slide>
+<slide>slides/xdebug/live-demo.xml</slide>
+
+<slide>slides/xdebug/profile2.xml</slide>
+<slide>slides/xdebug/profiling.xml</slide>
+<slide>slides/xdebug/profiling2.xml</slide>
+<slide>slides/xdebug/live-demo.xml</slide>
+
+<slide>slides/xdebug/paths.xml</slide>
+
+<slide>slides/xdebug/vld-path-4-code.xml</slide>
+<slide>slides/xdebug/vld-path-4-output.xml</slide>
+
+<slide>slides/xdebug/vld-path-3-code.xml</slide>
+<slide>slides/xdebug/vld-path-3-output.xml</slide>
+<slide>slides/xdebug/vld-path-3-paths.xml</slide>
+
+<slide>slides/xdebug/vld-path-5-wrapup.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.4-new.xml</slide>
+<slide>slides/xdebug/function-monitor.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.5-new.xml</slide>
+
+<slide>slides/xdebug/happy-15th.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.6-new.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-switch.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-switch2.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-switch3.xml</slide>
+
+<slide>slides/xdebug/xdebug-2.6-filter1.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-filter1a.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-filter1b.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-filter2.xml</slide>
+<slide>slides/xdebug/xdebug-2.6-filter2a.xml</slide>
+
+<slide>slides/xdebug/donate.xml</slide>
+<slide>slides/xdebug/resources.xml</slide>
+
+</presentation>