SlideShare a Scribd company logo
Buzz Moschetti
Enterprise Architect
buzz.moschetti@mongodb.com
@buzzmoschetti
Bulletproof
Data Management
2
Part 3 In The Data Management Series
Validating Data
Software Best Practices
Safe Leverage
From Relational
To MongoDB
Conquering
Data Proliferation
Bulletproof
Data Management
ç
Ω
Part
1
Part
2
Part
3
3
Congratulations! At this Point You’ve:
• Created a Data Design
• Migrated Data
• Built a PoC or maybe an App
• Explored Operations
4
The Next Stage: Defend & Leverage!
• Document Validation
• Redaction
• Quality Of Service
5
MongoDB Doesn’t Have These Things
• Document Validation
• Redaction
• Quality Of Service
6
What Can We Do Today?
Write Some Code!
1. Focus on interfaces
2. Design for change
3. Keep application, data access layer,
data management logic, and database
i/o well-factored
4. Minimize compile-time binding
8
Starting Point: The Data Access Layer
MongoDB
Java Driver
Data Access
Layer
Application
class DataAccessLayer {
private String authenicatedID;
private String effectiveID;
private Role role;
init() {
MongoClient mc = new MongoClient (args);
DB db = mc.getDB(args);
}
List getTransactions(Map predicate) {
Map mql = doWhateverYouNeed(predicate);
DBCollection coll = db.get(“TX”);
DBCursor c = coll.find(mql);
while(c.hasNext()) {
Map raw = (Map) c.getNext();
Map morphed = myMorphingLogic(raw);
list.add(morphed);
}
return list;
}
}
9
Document Validation
10
A Query Filters Outbound Data
{$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]
11
How About Using It To Filter Inbounds?
{$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]}
12
$exists And $type Already in MQL
{“name”:{$type:2}}
{$or:[{“age”:{$exists:false}}, {“age”:{$type:16}} ]}
{$and: [
{$name: {$type:2}},
{$or:[
{$and:[{"weight”:{$type:16}}, {"height":{$type:16}}]}
,{$and:[{"weight”:{$exists:0}}, {"height":{$exists:0}}]}
]}
])
Ensure “name” exists (because not null) and is a string:
“age” optional but if exists must be a 32bit integer:
“name” required as string and weight and height both
required integers or both not present:
13
… And MQL Goes Way Beyond…
{$or:[
{$and:[
{“name”: {$type:2}},
{“numClues”: {$gt: 0}}, {“numClues”:{$type:16}},
{“birthday”: {$type: 9}},
{“hiredate”: {$type: 9}},
{$or: [{“prefs”:{$exists:false}},
{“prefs”:{$type:3}} ]
}
]
},
{“name”: {$exists:false}}
]
}
14
A New MQL Validator Module Emerges
class MQLValidator {
ValidationResult validate(Map MQL, Map data)
}
MongoDB
Java Driver
Data Access
Layer
Application
Validator NOT inline to MongoDB driver
• Interface too big to create a façade
• Beware of “tall stacks”
MQLValidator
15
MongoDB
DB Engine
Migrating Capability into MongoDB
MongoDB
Java Driver
MQLValidator
Java
Data Access
Layer
MongoDB
DB Engine
MongoDB
Java Driver
MQLValidator
Java
Data Access
Layer
• Coming in v3.2!
• Investment in validation design preserved
• Validation enforceable through ALL drivers
and languages
MongoDB
Python Driver
Application Application
16
Code For The Future…Today
class DataAccessLayer {
someWriteOperation(Map data) {
if(ValidationEnabledInMongoDBengine) {
collection.insert(data); // Not yet
} else {
Map mql = getMQL(); // we’ll see this shortly!
// {$or:[{“age”:{$exists:false}},
// {“age”:{$type:16}}]}
ValidationResult vr = MQLValidator.validate(mql,data);
if(vr.ok()) {
collection.insert(data);
}
}
}
}
17
But What About Today?
MQLValidator
18
Temporary Filling: PQL
• (P)refix (Q)uery (L)anguage
• Database independent filter of Maps
• Similar to MQL
• 450 lines of Java
• moschetti.org/rants/PQL.html
PQL
19
Bridge MQL to PQL
class MQLValidator {
private PQLFilter pqlfilter;
validate(Map mql, Map data) {
boolean rc;
if(MQLValidationAvailableAsLibrary) {
rc = ActualMongoDBMQL.validate(mql, data);
} else {
Map pqlfilter = convertMQLtoPQL(mql);
// {or:[{“null”: “age”},
// {“type”: {“age”: “INT”}}]}
rc = pqlfilter.eval(pql, data);
}
return rc;
}
Map convertMQLtoPQL(Map mql) { // ~200 lines }
}
20
No PQL? No Problem
class MQLValidator {
validate(Map mql, Map data) {
boolean rc;
if(MQLValidationAvailableAsLibrary) {
rc = ActualMongoDBMQL.validate(mql, data);
} else {
SomeType yo = convertMQLtoYourThing(mql);
rc = YourFilter(yo, data);
}
return rc;
}
SomeType convertMQLtoYourThing(Map mql) { . . . }
}
21
MQL Is Easy To Navigate
{$or:[
{$and:[
{“name”: {$type:2}},
{“numClues”: {$gt: 0}}, {“numClues”:{$type:16}},
{“birthday”: {$type: 9}},
{“hiredate”: {$type: 9}},
{$or: [{“prefs”:{$exists:false}},
{“prefs”:{$type:3}} ]
}
]
},
{“name”: {$exists:false}}
]
}
• “Walk”, not “parse”
• Operators distinct from operands
• Operands are native type (e.g. Date)
22
Where Do Validations Come From?
The Database!
23
The Validations Collection
> db.validations.find()
{
“collectionName”: “product”,
“validations”: [
{ “name”: “simple”, “type”: “MQL”, “expr”:
{__$or:[{“age”:{__$exists:false}},
{“age”:{__$type:16}} ]}
]
}
{
“collectionName”: “transaction”,
“validations”: [
{ “name”: “frontOffice”, “type”: “MQL”, “expr”:
{ … lots of MQL here …}
}
]
}
24
Various “Levels” of Validation
> db.validations.find()
{
“collectionName”: “foo”,
“defaultValidation”: “initialSetup”,
“validations”: [
{“name”: “initialSetup”, …},
{“name”: “frontOffice”, …},
{“name”: “middleOffice”, …},
{“name”: “backOffice”, …}
]
}
25
Multiple Types: Schema By Example
> db.validations.find()
{
“collectionName”: “foo”,
“validations”: [
{ “name”: “simple”,
“type”: “SBE”,
“expr”:
{ “name!”: “string”,
“age”: “integer”,
“petNames”: [ “string” ],
“bday!”: “date”
}
}
]
}
26
The Stack So Far
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Application
ValidatorDBUtils
ValidatorDBUtils populates an MQLValidator object from MongoDB
PQLFilter
27
Representative Example
class DataAccessLayer {
MQLValidator vv = new MQLValidator(); // NOT DB dependent!
init() {
DB db = mongoClient.getDB( ”mydb" );
ValidatorDBUtils.populate(vv, db); // db.validations
}
someWriteOperation(Map data) {
if(ValidationEnabledInMongoDBengine) {
collection.insert(data); // Not yet
} else {
String vn = “appropriateValidationRulesName”;
ValidationResult vr = vv.validate(collname, vn, data))
if(vr.ok()) {
collection.insert(data);
}
}
}
}
28
Redaction
29
Concept: Post Query Operations (PQO)
{ ssn: { $hash: model }, birthdate: null }
{$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]
30
Adopt MQL-like behavior
{“ssn”:null}
{“address”: “XXXX”}
{“ssn”: { $substitute: “ssnmodel” }}
Remove field by setting to null
Redact address with fixed value
Substitute SSN with a different, correct, consistent value
{“counterparty”: { $hash: “MD5” }}
Hash counterparty name to consistent value
31
A New PostQuery Module Emerges
class PostQuery {
process(Map data, Map operations)
}
PostQuery
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Application
ValidatorDBUtils
PQLFilter
32
Where Do PQOs Come From?
The Database!
33
The Postquery Collection
> db.postquery.find()
{
“collectionName”: “product”,
“operations”: [
{ “name”: “basicPI”, “type”: “PQO”, “expr”:
{“ssn”:null}
}
]
}
{
“collectionName”: “customerIndo”,
“operations”: [
{ “name”: “personalData”, “type”: “PQO”,
“expr”:
{ … lots of PQO here …}
}
]
}
34
The Stack Is Getting Rich
PostQuery
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Application
ValidatorDBUtils
PQLFilter
PQODBUtils
35
Representative Example
class DataAccessLayer {
MQLValidator vv = new MQLValidator(); // NOT DB dependent!
PostQuery pp = new PostQuery();
init() {
DB db = mongoClient.getDB( ”mydb" );
ValidatorDBUtils.populate(vv, db);
PQODBUtils.populate(pp, db);
}
someWriteOperation(Map data) { … }
someReadOperation(Map pred) {
Map mql = convertToMQL(pred);
Map data = collection.find(mql);
String pqon = mapRoleToRulesName();
pp.process(collname, pqon, data); // in place update
return data;
}
}
36
Quality of Service
37
QOS In Action
class DataAccessLayer {
someReadOperation(Map pred) {
if(qos.blackout(“someReadOperation”))
throw QOSOperationDenied;
Map mql = convertToMQL(pred);
int ms = qos.getMaxTime(“someReadOperation”, role);
Map data =
collection.find(mql).maxTime(ms,TimeUnit.MILLISECONDS);
String pqon = “appropriatePQORulesName”;
pp.process(collname, pqon, data); // in place update
return data;
}
}
38
Where Do We Store QOS Values?
The Database!
39
The QOS Collection
> db.qos.find()
{
“collectionName”: “product”,
“qos”: [
{ “function”: “someReadOperation”,
“rule”: “std”,
“maxtime”: 250 },
{ “function”: “someReadOperation”,
“rule”: “reporting”,
“blackout”: { “start”: “08:00”, “end”: “17:00”},
“maxtime”: 2000}
“ … ”
}
]
}
40
QOSDBUtils
Coming Together…
PostQuery
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Application
ValidatorDBUtils
PQLFilter
PQODBUtils
QOS
41
Representative Example
class DataAccessLayer {
MQLValidator vv = new MQLValidator(); // NOT DB dependent!
PostQuery pp = new PostQuery();
QOS qs = new QOS();
init() {
DB db = mongoClient.getDB( ”mydb" );
ValidatorDBUtils.populate(vv, db);
PQODBUtils.populate(pp, db);
QOSDBUtils.populate(qs, db);
}
someReadOperation(Map pred) {
Map mql = convertToMQL(pred);
String role = getRole(); // somehow
int maxms = qs.getMaxTime(“someReadOperation”, role);
Map data = collection.find(mql).maxtTime(maxms, tu);
String pqon = “appropriatePQORulesName”;
pp.process(collname, pqon, data); // in place update
return data;
}
}
42
QOSDBUtils
A Highly Leveragable Investment
PostQuery
MQLValidator
Data Access
Layer 1
Application1
ValidatorDBUtils
PQLFilter
PQODBUtils
QOS
Application2
Data Access
Layer 2
Application3
Application4
Data Access
Layer 3
Application5
Application6
Reusable For ALL Data Access Layer Logic
43
Not Just Java? Not A Problem
DAL operations have little or no state…
Data and MQL and diagnostics easily
and losslessly converted to and from
JSON…
Can you say … Web Service!
44
A Really Nice Stack
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Java
Application
ValidatorDBUtils
PQLFilter
HTTP Endpoint
python
Application
curl
JSON over HTTP(S)
JSON<->Java Maps
QOSDBUtils
PostQuery
PQODBUtils
QOS
45
What Can We Do?
46
Secure Access To Redacted Data for Testing
$ curl –o contacts.json 
-H X-Portal-Id:testID 
-H X-Portal-PW:thePassword 
https://refdata:8080/customers?op=find&predicate=‘{“n
ame.last”: “Jones”}’
$ head -1 contacts.json
{ “name”: { “first”:”Bob”, “last”:”Jones” },
“location”:”NA-EAST”, “ssn”: “000-00-0000”,
“hiredate”: {“$date”, “2015-04-22T17:04:54.580-0400”}}
$ mongoimport –-host testHost –d testdb –c contacts
contacts.json
15 items inserted
47
Get It Programmatically, Too
// This JSON parser observes MongoDB type metadata
// conventions e.g. {“$date”, “2015-04-22T17:04:54.580-0400”}
import com.mongodb.util.JSON
getData() {
String url = "https://refdata:8080/customers…”
URLConnection con = new URL(url).openConnection();
InputStream response = con.getInputStream();
BufferedReader in = new BufferedReader(response);
String doc;
while((doc = in.readLine()) != null) {
Map data = JSON.parse(doc);
// data.ssn = “000-00-0000”
// date.hiredate = java.util.Date 2015-04 …
// data.name.first = “Bob”;
}
}
48
Robust, Validated Data Ingest
$ curl –d @trades.json 
-H X-Portal-Id:prodadm 
-H X-Portal-PW:thePassword 
https://refdata:8080trades?op=load 
-o response.json
$ cat response.json
{ “assignedBatchID”: “B123”,
“numItemsExamined”: 13245,
“numItemsInserted”: 13242,
“numItemsRejected”: 3,
“errors”: [ { type: “valfail”, rule: “front … ],
“batchMD5”: “e19c1283c925b3206685ff522acfe3e6”
}
49
Concept: The control_ Collection
> show collections
books
control_
customer
firms
> db.control_.find()
{
“collectionName”: “product”,
“qos”: [ … ],
“validations”: [ … ]
“operations”: [… ]
}
• Single namespace for capabilities
• Easier to add new capabilities
• Tighter (therefore better) security/entitlement
50
Validation, QOS, and PQO via Web Services
MongoDB
Java Driver
MQLValidator
Data Access
Layer
Java
Application
ValidatorHTTPUtils
PQLFilter
python
Application
curl
JSON over HTTP(S)
QOSHTTPUtils
PostQuery
PQOHTTPUtils
QOS
HTTP Service
JSON<->Java Maps
51
Are We Excited Yet?
Contact me or MongoDB for
• Beta program for 3.2 features
• Access to MQLValidator, PQO,
and other Java resources
Questions & Answers
54
Concept: DataProvider
public interface DataProvider {
init();
fetch(String collection, Map mql);
insert(String collection, Map data);
update(String collection, Map mql, Map newData);
}
Class MongoProvider implements DataProvider { … }
Class RESTfulProvider implements DataProvider { … }
55
The RESTful Provider
class RESTfulProvider implements DataProvider {
init() { // setup HTTP machine:port endpoint
fetch(String collection, Map mql) {
String jsonstr = JSONUtils.toJSON(mql);
String url = construct(collection, jsonstr);
// url is:
http://machine:port/collectionName?op=find&mql=‘{“produc
t”:”cleanser”,”expires”: {$gt: {$date: “20200101”}}}’
HTTPResponse res = call(url);
Map data = JSONUtils.fromJSON(res.getContent());
}
}

More Related Content

What's hot

Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
MongoDB
 
PistonHead's use of MongoDB for Analytics
PistonHead's use of MongoDB for AnalyticsPistonHead's use of MongoDB for Analytics
PistonHead's use of MongoDB for Analytics
Andrew Morgan
 
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
NoSQLmatters
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couch
delagoya
 
MongoDB Best Practices for Developers
MongoDB Best Practices for DevelopersMongoDB Best Practices for Developers
MongoDB Best Practices for Developers
Moshe Kaplan
 
Ajax chap 5
Ajax chap 5Ajax chap 5
Ajax chap 5
Mukesh Tekwani
 
Ajax chap 4
Ajax chap 4Ajax chap 4
Ajax chap 4
Mukesh Tekwani
 
Xa transactions over camel routes
Xa transactions over camel routesXa transactions over camel routes
Xa transactions over camel routes
Josué Neis
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
Tobias Trelle
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
MongoDB
 
Webinar: Transitioning from SQL to MongoDB
Webinar: Transitioning from SQL to MongoDBWebinar: Transitioning from SQL to MongoDB
Webinar: Transitioning from SQL to MongoDB
MongoDB
 
MongoDB crud
MongoDB crudMongoDB crud
MongoDB crud
Darshan Jayarama
 
Ajax chap 2.-part 1
Ajax chap 2.-part 1Ajax chap 2.-part 1
Ajax chap 2.-part 1
Mukesh Tekwani
 
Ajax chap 3
Ajax chap 3Ajax chap 3
Ajax chap 3
Mukesh Tekwani
 
Java development with MongoDB
Java development with MongoDBJava development with MongoDB
Java development with MongoDB
James Williams
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring Data
Anton Sulzhenko
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
Norberto Leite
 
Deciphering Explain Output
Deciphering Explain Output Deciphering Explain Output
Deciphering Explain Output
MongoDB
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
Universidade de São Paulo
 
MongoDB + Spring
MongoDB + SpringMongoDB + Spring
MongoDB + Spring
Norberto Leite
 

What's hot (20)

Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
 
PistonHead's use of MongoDB for Analytics
PistonHead's use of MongoDB for AnalyticsPistonHead's use of MongoDB for Analytics
PistonHead's use of MongoDB for Analytics
 
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
Michael Hackstein - NoSQL meets Microservices - NoSQL matters Dublin 2015
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couch
 
MongoDB Best Practices for Developers
MongoDB Best Practices for DevelopersMongoDB Best Practices for Developers
MongoDB Best Practices for Developers
 
Ajax chap 5
Ajax chap 5Ajax chap 5
Ajax chap 5
 
Ajax chap 4
Ajax chap 4Ajax chap 4
Ajax chap 4
 
Xa transactions over camel routes
Xa transactions over camel routesXa transactions over camel routes
Xa transactions over camel routes
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
 
Webinar: Transitioning from SQL to MongoDB
Webinar: Transitioning from SQL to MongoDBWebinar: Transitioning from SQL to MongoDB
Webinar: Transitioning from SQL to MongoDB
 
MongoDB crud
MongoDB crudMongoDB crud
MongoDB crud
 
Ajax chap 2.-part 1
Ajax chap 2.-part 1Ajax chap 2.-part 1
Ajax chap 2.-part 1
 
Ajax chap 3
Ajax chap 3Ajax chap 3
Ajax chap 3
 
Java development with MongoDB
Java development with MongoDBJava development with MongoDB
Java development with MongoDB
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring Data
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
 
Deciphering Explain Output
Deciphering Explain Output Deciphering Explain Output
Deciphering Explain Output
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
MongoDB + Spring
MongoDB + SpringMongoDB + Spring
MongoDB + Spring
 

Similar to Data Management 3: Bulletproof Data Management

NoSQL meets Microservices
NoSQL meets MicroservicesNoSQL meets Microservices
NoSQL meets Microservices
ArangoDB Database
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael HacksteinNoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
distributed matters
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
distributed matters
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
MongoDB
 
Mongo db dla administratora
Mongo db dla administratoraMongo db dla administratora
Mongo db dla administratora
Łukasz Jagiełło
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analytics
MongoDB
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora
3camp
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
Qureshi Tehmina
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMS
uzquiano
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJS
MongoDB
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Sages
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)
MongoDB
 
Fun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksFun Teaching MongoDB New Tricks
Fun Teaching MongoDB New Tricks
MongoDB
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Guido Schmutz
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
confluent
 
Linq
LinqLinq
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Guido Schmutz
 
The Mobility Project
The Mobility ProjectThe Mobility Project
The Mobility Project
account inactive
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
Sages
 
Kerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastKerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit east
Jorge Lopez-Malla
 

Similar to Data Management 3: Bulletproof Data Management (20)

NoSQL meets Microservices
NoSQL meets MicroservicesNoSQL meets Microservices
NoSQL meets Microservices
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael HacksteinNoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
 
Mongo db dla administratora
Mongo db dla administratoraMongo db dla administratora
Mongo db dla administratora
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analytics
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
 
Hazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMSHazelcast and MongoDB at Cloud CMS
Hazelcast and MongoDB at Cloud CMS
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJS
 
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
 
Mongo+java (1)
Mongo+java (1)Mongo+java (1)
Mongo+java (1)
 
Fun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksFun Teaching MongoDB New Tricks
Fun Teaching MongoDB New Tricks
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
 
Linq
LinqLinq
Linq
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
 
The Mobility Project
The Mobility ProjectThe Mobility Project
The Mobility Project
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Kerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastKerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit east
 

More from MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 

More from MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Recently uploaded

20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 

Recently uploaded (20)

20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 

Data Management 3: Bulletproof Data Management

  • 2. 2 Part 3 In The Data Management Series Validating Data Software Best Practices Safe Leverage From Relational To MongoDB Conquering Data Proliferation Bulletproof Data Management ç Ω Part 1 Part 2 Part 3
  • 3. 3 Congratulations! At this Point You’ve: • Created a Data Design • Migrated Data • Built a PoC or maybe an App • Explored Operations
  • 4. 4 The Next Stage: Defend & Leverage! • Document Validation • Redaction • Quality Of Service
  • 5. 5 MongoDB Doesn’t Have These Things • Document Validation • Redaction • Quality Of Service
  • 6. 6 What Can We Do Today?
  • 7. Write Some Code! 1. Focus on interfaces 2. Design for change 3. Keep application, data access layer, data management logic, and database i/o well-factored 4. Minimize compile-time binding
  • 8. 8 Starting Point: The Data Access Layer MongoDB Java Driver Data Access Layer Application class DataAccessLayer { private String authenicatedID; private String effectiveID; private Role role; init() { MongoClient mc = new MongoClient (args); DB db = mc.getDB(args); } List getTransactions(Map predicate) { Map mql = doWhateverYouNeed(predicate); DBCollection coll = db.get(“TX”); DBCursor c = coll.find(mql); while(c.hasNext()) { Map raw = (Map) c.getNext(); Map morphed = myMorphingLogic(raw); list.add(morphed); } return list; } }
  • 10. 10 A Query Filters Outbound Data {$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]
  • 11. 11 How About Using It To Filter Inbounds? {$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]}
  • 12. 12 $exists And $type Already in MQL {“name”:{$type:2}} {$or:[{“age”:{$exists:false}}, {“age”:{$type:16}} ]} {$and: [ {$name: {$type:2}}, {$or:[ {$and:[{"weight”:{$type:16}}, {"height":{$type:16}}]} ,{$and:[{"weight”:{$exists:0}}, {"height":{$exists:0}}]} ]} ]) Ensure “name” exists (because not null) and is a string: “age” optional but if exists must be a 32bit integer: “name” required as string and weight and height both required integers or both not present:
  • 13. 13 … And MQL Goes Way Beyond… {$or:[ {$and:[ {“name”: {$type:2}}, {“numClues”: {$gt: 0}}, {“numClues”:{$type:16}}, {“birthday”: {$type: 9}}, {“hiredate”: {$type: 9}}, {$or: [{“prefs”:{$exists:false}}, {“prefs”:{$type:3}} ] } ] }, {“name”: {$exists:false}} ] }
  • 14. 14 A New MQL Validator Module Emerges class MQLValidator { ValidationResult validate(Map MQL, Map data) } MongoDB Java Driver Data Access Layer Application Validator NOT inline to MongoDB driver • Interface too big to create a façade • Beware of “tall stacks” MQLValidator
  • 15. 15 MongoDB DB Engine Migrating Capability into MongoDB MongoDB Java Driver MQLValidator Java Data Access Layer MongoDB DB Engine MongoDB Java Driver MQLValidator Java Data Access Layer • Coming in v3.2! • Investment in validation design preserved • Validation enforceable through ALL drivers and languages MongoDB Python Driver Application Application
  • 16. 16 Code For The Future…Today class DataAccessLayer { someWriteOperation(Map data) { if(ValidationEnabledInMongoDBengine) { collection.insert(data); // Not yet } else { Map mql = getMQL(); // we’ll see this shortly! // {$or:[{“age”:{$exists:false}}, // {“age”:{$type:16}}]} ValidationResult vr = MQLValidator.validate(mql,data); if(vr.ok()) { collection.insert(data); } } } }
  • 17. 17 But What About Today? MQLValidator
  • 18. 18 Temporary Filling: PQL • (P)refix (Q)uery (L)anguage • Database independent filter of Maps • Similar to MQL • 450 lines of Java • moschetti.org/rants/PQL.html PQL
  • 19. 19 Bridge MQL to PQL class MQLValidator { private PQLFilter pqlfilter; validate(Map mql, Map data) { boolean rc; if(MQLValidationAvailableAsLibrary) { rc = ActualMongoDBMQL.validate(mql, data); } else { Map pqlfilter = convertMQLtoPQL(mql); // {or:[{“null”: “age”}, // {“type”: {“age”: “INT”}}]} rc = pqlfilter.eval(pql, data); } return rc; } Map convertMQLtoPQL(Map mql) { // ~200 lines } }
  • 20. 20 No PQL? No Problem class MQLValidator { validate(Map mql, Map data) { boolean rc; if(MQLValidationAvailableAsLibrary) { rc = ActualMongoDBMQL.validate(mql, data); } else { SomeType yo = convertMQLtoYourThing(mql); rc = YourFilter(yo, data); } return rc; } SomeType convertMQLtoYourThing(Map mql) { . . . } }
  • 21. 21 MQL Is Easy To Navigate {$or:[ {$and:[ {“name”: {$type:2}}, {“numClues”: {$gt: 0}}, {“numClues”:{$type:16}}, {“birthday”: {$type: 9}}, {“hiredate”: {$type: 9}}, {$or: [{“prefs”:{$exists:false}}, {“prefs”:{$type:3}} ] } ] }, {“name”: {$exists:false}} ] } • “Walk”, not “parse” • Operators distinct from operands • Operands are native type (e.g. Date)
  • 22. 22 Where Do Validations Come From? The Database!
  • 23. 23 The Validations Collection > db.validations.find() { “collectionName”: “product”, “validations”: [ { “name”: “simple”, “type”: “MQL”, “expr”: {__$or:[{“age”:{__$exists:false}}, {“age”:{__$type:16}} ]} ] } { “collectionName”: “transaction”, “validations”: [ { “name”: “frontOffice”, “type”: “MQL”, “expr”: { … lots of MQL here …} } ] }
  • 24. 24 Various “Levels” of Validation > db.validations.find() { “collectionName”: “foo”, “defaultValidation”: “initialSetup”, “validations”: [ {“name”: “initialSetup”, …}, {“name”: “frontOffice”, …}, {“name”: “middleOffice”, …}, {“name”: “backOffice”, …} ] }
  • 25. 25 Multiple Types: Schema By Example > db.validations.find() { “collectionName”: “foo”, “validations”: [ { “name”: “simple”, “type”: “SBE”, “expr”: { “name!”: “string”, “age”: “integer”, “petNames”: [ “string” ], “bday!”: “date” } } ] }
  • 26. 26 The Stack So Far MongoDB Java Driver MQLValidator Data Access Layer Application ValidatorDBUtils ValidatorDBUtils populates an MQLValidator object from MongoDB PQLFilter
  • 27. 27 Representative Example class DataAccessLayer { MQLValidator vv = new MQLValidator(); // NOT DB dependent! init() { DB db = mongoClient.getDB( ”mydb" ); ValidatorDBUtils.populate(vv, db); // db.validations } someWriteOperation(Map data) { if(ValidationEnabledInMongoDBengine) { collection.insert(data); // Not yet } else { String vn = “appropriateValidationRulesName”; ValidationResult vr = vv.validate(collname, vn, data)) if(vr.ok()) { collection.insert(data); } } } }
  • 29. 29 Concept: Post Query Operations (PQO) { ssn: { $hash: model }, birthdate: null } {$and:[{“name”:”buzz”},{“prefs”:{$exists:true}}]
  • 30. 30 Adopt MQL-like behavior {“ssn”:null} {“address”: “XXXX”} {“ssn”: { $substitute: “ssnmodel” }} Remove field by setting to null Redact address with fixed value Substitute SSN with a different, correct, consistent value {“counterparty”: { $hash: “MD5” }} Hash counterparty name to consistent value
  • 31. 31 A New PostQuery Module Emerges class PostQuery { process(Map data, Map operations) } PostQuery MongoDB Java Driver MQLValidator Data Access Layer Application ValidatorDBUtils PQLFilter
  • 32. 32 Where Do PQOs Come From? The Database!
  • 33. 33 The Postquery Collection > db.postquery.find() { “collectionName”: “product”, “operations”: [ { “name”: “basicPI”, “type”: “PQO”, “expr”: {“ssn”:null} } ] } { “collectionName”: “customerIndo”, “operations”: [ { “name”: “personalData”, “type”: “PQO”, “expr”: { … lots of PQO here …} } ] }
  • 34. 34 The Stack Is Getting Rich PostQuery MongoDB Java Driver MQLValidator Data Access Layer Application ValidatorDBUtils PQLFilter PQODBUtils
  • 35. 35 Representative Example class DataAccessLayer { MQLValidator vv = new MQLValidator(); // NOT DB dependent! PostQuery pp = new PostQuery(); init() { DB db = mongoClient.getDB( ”mydb" ); ValidatorDBUtils.populate(vv, db); PQODBUtils.populate(pp, db); } someWriteOperation(Map data) { … } someReadOperation(Map pred) { Map mql = convertToMQL(pred); Map data = collection.find(mql); String pqon = mapRoleToRulesName(); pp.process(collname, pqon, data); // in place update return data; } }
  • 37. 37 QOS In Action class DataAccessLayer { someReadOperation(Map pred) { if(qos.blackout(“someReadOperation”)) throw QOSOperationDenied; Map mql = convertToMQL(pred); int ms = qos.getMaxTime(“someReadOperation”, role); Map data = collection.find(mql).maxTime(ms,TimeUnit.MILLISECONDS); String pqon = “appropriatePQORulesName”; pp.process(collname, pqon, data); // in place update return data; } }
  • 38. 38 Where Do We Store QOS Values? The Database!
  • 39. 39 The QOS Collection > db.qos.find() { “collectionName”: “product”, “qos”: [ { “function”: “someReadOperation”, “rule”: “std”, “maxtime”: 250 }, { “function”: “someReadOperation”, “rule”: “reporting”, “blackout”: { “start”: “08:00”, “end”: “17:00”}, “maxtime”: 2000} “ … ” } ] }
  • 40. 40 QOSDBUtils Coming Together… PostQuery MongoDB Java Driver MQLValidator Data Access Layer Application ValidatorDBUtils PQLFilter PQODBUtils QOS
  • 41. 41 Representative Example class DataAccessLayer { MQLValidator vv = new MQLValidator(); // NOT DB dependent! PostQuery pp = new PostQuery(); QOS qs = new QOS(); init() { DB db = mongoClient.getDB( ”mydb" ); ValidatorDBUtils.populate(vv, db); PQODBUtils.populate(pp, db); QOSDBUtils.populate(qs, db); } someReadOperation(Map pred) { Map mql = convertToMQL(pred); String role = getRole(); // somehow int maxms = qs.getMaxTime(“someReadOperation”, role); Map data = collection.find(mql).maxtTime(maxms, tu); String pqon = “appropriatePQORulesName”; pp.process(collname, pqon, data); // in place update return data; } }
  • 42. 42 QOSDBUtils A Highly Leveragable Investment PostQuery MQLValidator Data Access Layer 1 Application1 ValidatorDBUtils PQLFilter PQODBUtils QOS Application2 Data Access Layer 2 Application3 Application4 Data Access Layer 3 Application5 Application6 Reusable For ALL Data Access Layer Logic
  • 43. 43 Not Just Java? Not A Problem DAL operations have little or no state… Data and MQL and diagnostics easily and losslessly converted to and from JSON… Can you say … Web Service!
  • 44. 44 A Really Nice Stack MongoDB Java Driver MQLValidator Data Access Layer Java Application ValidatorDBUtils PQLFilter HTTP Endpoint python Application curl JSON over HTTP(S) JSON<->Java Maps QOSDBUtils PostQuery PQODBUtils QOS
  • 46. 46 Secure Access To Redacted Data for Testing $ curl –o contacts.json -H X-Portal-Id:testID -H X-Portal-PW:thePassword https://refdata:8080/customers?op=find&predicate=‘{“n ame.last”: “Jones”}’ $ head -1 contacts.json { “name”: { “first”:”Bob”, “last”:”Jones” }, “location”:”NA-EAST”, “ssn”: “000-00-0000”, “hiredate”: {“$date”, “2015-04-22T17:04:54.580-0400”}} $ mongoimport –-host testHost –d testdb –c contacts contacts.json 15 items inserted
  • 47. 47 Get It Programmatically, Too // This JSON parser observes MongoDB type metadata // conventions e.g. {“$date”, “2015-04-22T17:04:54.580-0400”} import com.mongodb.util.JSON getData() { String url = "https://refdata:8080/customers…” URLConnection con = new URL(url).openConnection(); InputStream response = con.getInputStream(); BufferedReader in = new BufferedReader(response); String doc; while((doc = in.readLine()) != null) { Map data = JSON.parse(doc); // data.ssn = “000-00-0000” // date.hiredate = java.util.Date 2015-04 … // data.name.first = “Bob”; } }
  • 48. 48 Robust, Validated Data Ingest $ curl –d @trades.json -H X-Portal-Id:prodadm -H X-Portal-PW:thePassword https://refdata:8080trades?op=load -o response.json $ cat response.json { “assignedBatchID”: “B123”, “numItemsExamined”: 13245, “numItemsInserted”: 13242, “numItemsRejected”: 3, “errors”: [ { type: “valfail”, rule: “front … ], “batchMD5”: “e19c1283c925b3206685ff522acfe3e6” }
  • 49. 49 Concept: The control_ Collection > show collections books control_ customer firms > db.control_.find() { “collectionName”: “product”, “qos”: [ … ], “validations”: [ … ] “operations”: [… ] } • Single namespace for capabilities • Easier to add new capabilities • Tighter (therefore better) security/entitlement
  • 50. 50 Validation, QOS, and PQO via Web Services MongoDB Java Driver MQLValidator Data Access Layer Java Application ValidatorHTTPUtils PQLFilter python Application curl JSON over HTTP(S) QOSHTTPUtils PostQuery PQOHTTPUtils QOS HTTP Service JSON<->Java Maps
  • 51. 51 Are We Excited Yet? Contact me or MongoDB for • Beta program for 3.2 features • Access to MQLValidator, PQO, and other Java resources
  • 53.
  • 54. 54 Concept: DataProvider public interface DataProvider { init(); fetch(String collection, Map mql); insert(String collection, Map data); update(String collection, Map mql, Map newData); } Class MongoProvider implements DataProvider { … } Class RESTfulProvider implements DataProvider { … }
  • 55. 55 The RESTful Provider class RESTfulProvider implements DataProvider { init() { // setup HTTP machine:port endpoint fetch(String collection, Map mql) { String jsonstr = JSONUtils.toJSON(mql); String url = construct(collection, jsonstr); // url is: http://machine:port/collectionName?op=find&mql=‘{“produc t”:”cleanser”,”expires”: {$gt: {$date: “20200101”}}}’ HTTPResponse res = call(url); Map data = JSONUtils.fromJSON(res.getContent()); } }

Editor's Notes

  1. HELLO! This is Buzz Moschetti at MongoDB Buy Subs, goddamit…! :-D
  2. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  3. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  4. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  5. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  6. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  7. Important things to consider: a, b ,c Not appearing in this film today: Exception/errors and edge condition handling Options in design WRT class inheritance, per-thread (or more) DAL models vs. static methods, cartridge models, etc. In particular, we will see
  8. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  9. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  10. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  11. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  12. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  13. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  14. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  15. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  16. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  17. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  18. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  19. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  20. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  21. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  22. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  23. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  24. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  25. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  26. In addition to being well factored, this permits the DAL to contain both DB-persisted validation and dynamic, business data driven validation managed by the SAME code set with the SAME expression language.
  27. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  28. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  29. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  30. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  31. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  32. NOTE: NO mention of user and role here! We only define a set of ops by rule name. Something else has to associate these with users and roles. ALSO: Nuance between entitlements set up on DB vs. entitlements at “user level.” Consider heathrow airport: You are entitled to see things but if not in home network, you cannot see SSN.
  33. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  34. As mentioned before re. something else associated rules and roles.
  35. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  36. Blackout is simple: permit or deny based on any number of factors. maxTime: Engine time, not wall clock time; a good proxy for actual load on the engine.
  37. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  38. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  39. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  40. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  41. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  42. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  43. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  44. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  45. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  46. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  47. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  48. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  49. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  50. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  51. On behalf of all of us at MongoDB , thank you for attending this webinar! I hope what you saw and heard today gave you some insight and clues into what you might face in your own schema design efforts. Remember you can always reach out to us at MongoDB for guidance. With that, code well and be well.
  52. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.
  53. Some quick logistics. In the last 5 to 10 mins today, we will answer the most common questions that have been submitted.