SlideShare uma empresa Scribd logo
1 de 35
Copyright © 2016 M/Gateway Developments Ltd
EWD 3 Training Course
Part 18
Modelling NoSQL Databases
using Global Storage
Rob Tweed
Director, M/Gateway Developments Ltd
Twitter: @rtweed
Copyright © 2016 M/Gateway Developments Ltd
NoSQL Databases
• 4 Main Models
– Key/Value Store
– Columnar
– Graph
– Document
Copyright © 2016 M/Gateway Developments Ltd
NoSQL Databases
• The following are just examples on how
you might model these with Global
Storage
– No one way to do it
– May be better ways to do it!
– Aim is to demonstrate just how flexible and
capable a Global Storage database really is
Copyright © 2016 M/Gateway Developments Ltd
telephone
"617-555-1414" "Tweed, Rob"
"211-555-9012" "James, George"
Key/Value Store
Copyright © 2016 M/Gateway Developments Ltd
"617-555-1414"
"name" "Tweed, Rob"
"address" "112 Beacon Street, Boston"
"211-555-9012"
"name" "James, George"
"address" "5308, 12th Avenue, Brooklyn"
telephone
More Complex Key/Value Store
Copyright © 2016 M/Gateway Developments Ltd
Indexing
Global Storage databases do not index automatically
You create your own indices using Global Storage
Copyright © 2016 M/Gateway Developments Ltd
"617-555-1414"
"name" "Tweed, Rob"
"address" "112 Beacon Street, Boston"
"211-555-9012" "name" "James, George"
"address" "5308, 12th Avenue, Brooklyn"
telephone
"James, George"
nameIndex
Indexing
Copyright © 2016 M/Gateway Developments Ltd
"617-555-1414"
"name" "Tweed, Rob"
"address" "112 Beacon Street, Boston"
"211-555-9012" "name" "James, George"
"address" "5308, 12th Avenue, Brooklyn"
telephone
"James, George"
nameIndex
"""211-555-9012"
Indexing
Copyright © 2016 M/Gateway Developments Ltd
"617-555-1414"
"name" "Tweed, Rob"
"address" "112 Beacon Street, Boston"
"211-555-9012" "name" "James, George"
"address" "5308, 12th Avenue, Brooklyn"
telephone
"James, George"
nameIndex
"""211-555-9012"
Indexing
"Tweed, Rob" """617-555-1414"
Copyright © 2016 M/Gateway Developments Ltd
"617-555-1414"
"name" "Tweed, Rob"
"address" "112 Beacon Street, Boston"
"211-555-9012" "name" "James, George"
"address" "5308, 12th Avenue, Brooklyn"
telephone
"James, George"
nameIndex
"""211-555-9012"
Indexing
"""211-863-3932"
"""224-543-5431"
"Tweed, Rob" """617-555-1414"
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 5
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Chris
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 6
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
Linked List
Chris
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 6
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
6
"value" "Chris"
Linked List
Chris
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 6
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
6
"nextNode" 5
"value" "Chris"
Linked List
Chris
Rob
George
John
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 5
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 6
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
6
"nextNode" 5
"value" "Chris"
Linked List
Chris
Rob
George
John
"previousNode" 6
Copyright © 2016 M/Gateway Developments Ltd
"firstNode" 6
"lastNode" 2
"node"
4
list "myList"
"nodeCounter" 6
"nextNode" 2
"previousNode" 5
"value" "George"
5
"nextNode" 4
"value" "Rob"
2
"value" "John"
"previousNode" 4
6
"nextNode" 5
"value" "Chris"
Linked List
Chris
Rob
George
John
"previousNode" 6
Copyright © 2016 M/Gateway Developments Ltd
1
1 "First Cell"
3 "Third Cell"
^table "myTable"
Table Name Row No Column No Cell Value
5 "Fifth Cell"
2
2 "Second Cell"
3 "Third Cell"
3
4 "Fourth Cell"
5 "Fifth Cell"
Tabular / Columnar
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
1
7
2
name = "Rob"
name = "George"
name = "John"disclosure = public
age = 3 days
disclosure = public
age = 2 years
Graph
1
person
2
7
"name" "Rob"
"knows"
2
7
""
"disclosure" "public"
"timestamp" "2008-08-16T12:23:01Z"
""
"name" "John"
"name" "George"
"knows" 2
""
"disclosure" "public"
"timestamp" "2009-12-16T10:06:44Z"
Copyright © 2016 M/Gateway Developments Ltd
Document Database
myGlobal
"a" 123
"b"
"c2" "foo2"
"d"
"c1" "foo"
"e2"
"e1"
"f2" "bar2"
"f1" "bar1"
"f2" "bar2"
"f1" "bar1"
"f3" "bar3"
myGlobal = {
a: 123,
b: {
c1: 'foo',
c2: 'foo2'
}
d: {
e1: {
f1: 'bar1',
f2: 'bar2'
},
e2: {
f1: 'bar1',
f2: 'bar2',
f3: 'bar3'
}
}
}
Copyright © 2016 M/Gateway Developments Ltd
Other models possible
• Relational
– In fact Caché supports Relational storage, through modelling on
Global Storage
• Object
– Also supported by Caché
• Native XML Database
– eXtc (now deprecated)
• http://www.mgateway.com/eXtcOverview4_0.pdf
• SimpleDB emulation
– https://github.com/robtweed/node-mdb

Mais conteúdo relacionado

Destaque

Destaque (20)

EWD 3 Training Course Part 17: Introduction to Global Storage Databases
EWD 3 Training Course Part 17: Introduction to Global Storage DatabasesEWD 3 Training Course Part 17: Introduction to Global Storage Databases
EWD 3 Training Course Part 17: Introduction to Global Storage Databases
 
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDEWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
 
EWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript ObjectsEWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript Objects
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
 
EWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
EWD 3 Training Course Part 7: Applying the QEWD Messaging PatternEWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
EWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
 
EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is StartedEWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
 
EWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database CapabilitiesEWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database Capabilities
 
EWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesEWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD Services
 
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf NodesEWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
 
EWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingEWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven Indexing
 
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
EWD 3 Training Course Part 13: Putting Everything so far into Practice using ...
 
EWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionEWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD Session
 
EWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIsEWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIs
 
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode ObjectsEWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
 
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging CycleEWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
 
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWDEWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
 
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
 
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
 
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSEWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
 

Mais de Rob Tweed

Mais de Rob Tweed (20)

QEWD Update
QEWD UpdateQEWD Update
QEWD Update
 
Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language Feature
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It Too
 
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityEWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
 
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsEWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
 
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST ServicesEWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServices
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
 
qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tier
 
EWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceEWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker Appliance
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
 
EWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingEWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session Locking
 
EWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeEWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient Mode
 
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSEWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
 
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesEWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
 
EWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsEWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD Applications
 

Último

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Último (20)

%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 

EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage

  • 1. Copyright © 2016 M/Gateway Developments Ltd EWD 3 Training Course Part 18 Modelling NoSQL Databases using Global Storage Rob Tweed Director, M/Gateway Developments Ltd Twitter: @rtweed
  • 2. Copyright © 2016 M/Gateway Developments Ltd NoSQL Databases • 4 Main Models – Key/Value Store – Columnar – Graph – Document
  • 3. Copyright © 2016 M/Gateway Developments Ltd NoSQL Databases • The following are just examples on how you might model these with Global Storage – No one way to do it – May be better ways to do it! – Aim is to demonstrate just how flexible and capable a Global Storage database really is
  • 4. Copyright © 2016 M/Gateway Developments Ltd telephone "617-555-1414" "Tweed, Rob" "211-555-9012" "James, George" Key/Value Store
  • 5. Copyright © 2016 M/Gateway Developments Ltd "617-555-1414" "name" "Tweed, Rob" "address" "112 Beacon Street, Boston" "211-555-9012" "name" "James, George" "address" "5308, 12th Avenue, Brooklyn" telephone More Complex Key/Value Store
  • 6. Copyright © 2016 M/Gateway Developments Ltd Indexing Global Storage databases do not index automatically You create your own indices using Global Storage
  • 7. Copyright © 2016 M/Gateway Developments Ltd "617-555-1414" "name" "Tweed, Rob" "address" "112 Beacon Street, Boston" "211-555-9012" "name" "James, George" "address" "5308, 12th Avenue, Brooklyn" telephone "James, George" nameIndex Indexing
  • 8. Copyright © 2016 M/Gateway Developments Ltd "617-555-1414" "name" "Tweed, Rob" "address" "112 Beacon Street, Boston" "211-555-9012" "name" "James, George" "address" "5308, 12th Avenue, Brooklyn" telephone "James, George" nameIndex """211-555-9012" Indexing
  • 9. Copyright © 2016 M/Gateway Developments Ltd "617-555-1414" "name" "Tweed, Rob" "address" "112 Beacon Street, Boston" "211-555-9012" "name" "James, George" "address" "5308, 12th Avenue, Brooklyn" telephone "James, George" nameIndex """211-555-9012" Indexing "Tweed, Rob" """617-555-1414"
  • 10. Copyright © 2016 M/Gateway Developments Ltd "617-555-1414" "name" "Tweed, Rob" "address" "112 Beacon Street, Boston" "211-555-9012" "name" "James, George" "address" "5308, 12th Avenue, Brooklyn" telephone "James, George" nameIndex """211-555-9012" Indexing """211-863-3932" """224-543-5431" "Tweed, Rob" """617-555-1414"
  • 11. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 12. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 13. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 14. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 15. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 16. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 17. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 18. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 19. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Rob George John
  • 20. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 5 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Chris Rob George John
  • 21. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 6 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 Linked List Chris Rob George John
  • 22. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 6 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 6 "value" "Chris" Linked List Chris Rob George John
  • 23. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 6 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 6 "nextNode" 5 "value" "Chris" Linked List Chris Rob George John
  • 24. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 5 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 6 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 6 "nextNode" 5 "value" "Chris" Linked List Chris Rob George John "previousNode" 6
  • 25. Copyright © 2016 M/Gateway Developments Ltd "firstNode" 6 "lastNode" 2 "node" 4 list "myList" "nodeCounter" 6 "nextNode" 2 "previousNode" 5 "value" "George" 5 "nextNode" 4 "value" "Rob" 2 "value" "John" "previousNode" 4 6 "nextNode" 5 "value" "Chris" Linked List Chris Rob George John "previousNode" 6
  • 26. Copyright © 2016 M/Gateway Developments Ltd 1 1 "First Cell" 3 "Third Cell" ^table "myTable" Table Name Row No Column No Cell Value 5 "Fifth Cell" 2 2 "Second Cell" 3 "Third Cell" 3 4 "Fourth Cell" 5 "Fifth Cell" Tabular / Columnar
  • 27. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph
  • 28. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 29. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 30. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 31. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 32. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 33. Copyright © 2016 M/Gateway Developments Ltd 1 7 2 name = "Rob" name = "George" name = "John"disclosure = public age = 3 days disclosure = public age = 2 years Graph 1 person 2 7 "name" "Rob" "knows" 2 7 "" "disclosure" "public" "timestamp" "2008-08-16T12:23:01Z" "" "name" "John" "name" "George" "knows" 2 "" "disclosure" "public" "timestamp" "2009-12-16T10:06:44Z"
  • 34. Copyright © 2016 M/Gateway Developments Ltd Document Database myGlobal "a" 123 "b" "c2" "foo2" "d" "c1" "foo" "e2" "e1" "f2" "bar2" "f1" "bar1" "f2" "bar2" "f1" "bar1" "f3" "bar3" myGlobal = { a: 123, b: { c1: 'foo', c2: 'foo2' } d: { e1: { f1: 'bar1', f2: 'bar2' }, e2: { f1: 'bar1', f2: 'bar2', f3: 'bar3' } } }
  • 35. Copyright © 2016 M/Gateway Developments Ltd Other models possible • Relational – In fact Caché supports Relational storage, through modelling on Global Storage • Object – Also supported by Caché • Native XML Database – eXtc (now deprecated) • http://www.mgateway.com/eXtcOverview4_0.pdf • SimpleDB emulation – https://github.com/robtweed/node-mdb