SlideShare a Scribd company logo
Copyright © 2016 M/Gateway Developments Ltd
EWD 3 Training Course
Part 1
How Node.js Integrates with
Global Storage Databases
Rob Tweed
Director, M/Gateway Developments Ltd
Twitter: @rtweed
Copyright © 2016 M/Gateway Developments Ltd
Global Storage Databases
• InterSystems Caché
– Proprietary, commercially-licensed
– Windows, Linux, OS X
– http://www.intersystems.com/our-products/cache/cache-overview/
• FIS GT.M
– Free, Open Source
– Linux
– https://www.fisglobal.com/Solutions/Banking-and-Wealth/Services/Database-Engine
• Redis, via ewd-redis-globals
– https://github.com/robtweed/ewd-redis-globals
Copyright © 2016 M/Gateway Developments Ltd
Node.js
• Node.js:
– Server-side JavaScript
– Single thread of execution
– JavaScript is the world's most popular computer
language, by a considerable (and growing) margin
Copyright © 2016 M/Gateway Developments Ltd
Caché
• High-performance multi-model NoSQL
database
– Hierarchical underlying data structure
• "Global Storage"
• Normally accessed via built-in language
– Cache ObjectScript
• Extension/ super-set of MUMPS language
– Considered obsolete by IT mainstream
Copyright © 2016 M/Gateway Developments Ltd
GT.M
• High-performance multi-model NoSQL
database
– Hierarchical underlying data structure
• "Global Storage"
– Normally accessed via built-in language
• MUMPS
• Considered obsolete by IT mainstream
Copyright © 2016 M/Gateway Developments Ltd
Redis / ewd-redis-globals
• Redis:
– Probably the world's most popular Open
Source NoSQL databases
– Also one of the fastest
– Key/Value storage primitive data structures
• ewd-redis-globals:
– Global storage functionality implemented on
top of Redis database key/value primitives
– Database only
• No dependency on Mumps language
• Open source equivalent to InterSystems'
GlobalsDB
Copyright © 2016 M/Gateway Developments Ltd
Making Global Storage
mainstream
• Global Storage has proven to be a very
powerful, flexible, high-performance NoSQL
database model for real-world, demanding
applications
• It has been ignored by the mainstream by virtue
of its integrated access language being seen as
out-dated / obsolete
– "database baby has been thrown out with the
language bathwater"
• JavaScript as a primary language for accessing
Global Storage databases?
Copyright © 2016 M/Gateway Developments Ltd
Node.js Interface
• Actually first implemented for free (but not Open
Source) GlobalsDB database
– Core engine from Caché
– No language parser/engine
– Now deprecated by InterSystems
• Accessed via the database engine's C++ call-in
interface
– Originally Java & .Net only
• Node.js interface developed by Chris Munt
• Interface module file: cache.node
Copyright © 2016 M/Gateway Developments Ltd
Node.js Interface
• cache.node ported to Cache
• function() API added to allow
MUMPS/Cache Objectscript code to be
executed from JavaScript / Node.js
• Cache Object APIs also subsequently
added
• Network (TCP-based) interface is also
available
Copyright © 2016 M/Gateway Developments Ltd
cache.node interface
Node.js
Process
Caché
Process
cache.node
module
C++call-ininterface
JavaScript
Globals Functions Objects
Copyright © 2016 M/Gateway Developments Ltd
GT.M / NodeM
• cache.node APIs re-implemented by Open
Source community (David Wicksell) for
use with GT.M
– https://github.com/dlwicksell/nodem
– Interfaces with GT.M's C Call-in interface
Copyright © 2016 M/Gateway Developments Ltd
NodeM interface
Node.js
Process
GT.M
Process
NodeM
module
Ccall-ininterface
JavaScript
Globals Functions
Copyright © 2016 M/Gateway Developments Ltd
Redis / ewd-redis-globals
• cache.node APIs re-implemented as part
of the ewd-redis-globals module
– Interfaces with Redis via its standard TCP
connection
Copyright © 2016 M/Gateway Developments Ltd
In-process Node.js Interfaces to
Cache & GT.M
• Very closely-coupled, intimate relationship
between Node.js and Caché / GT.M
– In-process
• The Node.js process and connected Caché / GT.M
process are one and the same
– Node.js process.pid === Caché/GT.M $job
– Node.js must be installed on the Caché or
GT.M server
Copyright © 2016 M/Gateway Developments Ltd
cache.node interface
cache.node
module
C++call-ininterface
JavaScript
Globals Functions Objects
CachéNode.jsProcess
Copyright © 2016 M/Gateway Developments Ltd
In-process Node.js Interface
• Very fast connection
– Significantly faster than a networked
connection between Node.js and Caché
– Currently between ⅓ and ¼ the performance
of native Mumps code when accessing Global
storage
– Currently limited by Google V8 API bottleneck
• https://bugs.chromium.org/p/v8/issues/detail?id=5144
• Potential for full native Mumps performance
Copyright © 2016 M/Gateway Developments Ltd
Networked interfaces
• Available for Caché and Redis/ewd-redis-globals
• Allows database and Node.js to be on different
physical servers
• Trade-off between performance and flexibility /
redundancy
Copyright © 2016 M/Gateway Developments Ltd
JavaScript access to Global
Storage
• The JavaScript / Node.js APIs for accessing
Global storage are identical, regardless of
database type and connection type
• Defined by the original cache.node APIs
• http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=BXJS
Copyright © 2016 M/Gateway Developments Ltd
Installing cache.node
• Currently included with Cache build kits
– Not distributed separately
– Hoping that InterSystems will soon distribute via NPM
• Different Node.js versions have introduced API changes
– Different versions of cache.node for each main Node.js version
• 12.x
– cache0120.node
• 4.1.x
– cache410.node
• 4.2 and later 4.x versions
– Cache421.node
– Rename to cache.node and copy to main node_modules
directory
• Eg C:ewd3node_modulescache.node
Copyright © 2016 M/Gateway Developments Ltd
Installing NodeM for GT.M
• Node.js Add-in module
• See:
– https://github.com/dlwicksell/nodem
Copyright © 2016 M/Gateway Developments Ltd
ewd-redis-globals
• Assumes you have Redis installed
• ewd-redis-globals:
– Node.js module
• https://github.com/robtweed/ewd-redis-globals
– Implements Global Storage functionality using
Redis primitive data structures
– Provides the JavaScript APIs for accessing
Global Storage
• Complies with the cache.node API definitions
Copyright © 2016 M/Gateway Developments Ltd
Connecting to Caché
var interface = require('cache'); // loads cache.node
var db = new interface.Cache();
// Change these parameters to match your Cache system:
var ok = db.open({
path: '/opt/cache/mgr',
username: '_SYSTEM',
password: 'SYS',
namespace: 'USER'
});
// confirm it connected OK
console.log('ok: ' + JSON.stringify(ok));
console.log(db.version());
Create a test
Script file, eg
C:ewd3test.js
Copyright © 2016 M/Gateway Developments Ltd
Connecting to GT.M
var interface = require('nodem'); // loads NodeM
var db = new interface.Gtm();
// Assuming your process profile is automatically configured
// for GT.M:
var ok = db.open();
// confirm it connected OK
console.log('ok: ' + JSON.stringify(ok));
console.log(db.version());
// once connected, the APIs for GT.M are identical to
// those for Cache
Create a test
Script file, eg
C:ewd3test.js
Copyright © 2016 M/Gateway Developments Ltd
Connecting to Redis
var interface = require('ewd-redis-globals');
var db = new interface();
// Assuming Redis is listening on standard port and
// running on localhost:
var ok = db.open();
// confirm it connected OK
console.log('ok: ' + JSON.stringify(ok));
console.log(db.version());
// once connected, the APIs for Redis are identical to
// those for Cache
Create a test
Script file, eg
C:ewd3test.js
Copyright © 2016 M/Gateway Developments Ltd
Connecting to Global Storage
Run the test script file:
cd ewd3
node test
ok: {"ok":1,"result":1}
Node.js Adaptor for Cache: Version: 1.1.104 (CM); Cache Version: 2015.2 build 664
Connection is working!
The version string will be different for GT.M or ewd-redis-globals
Copyright © 2016 M/Gateway Developments Ltd
Simple examples
• Set a Global Node, eg
– set ^test("foo","bar")="hello world"
var node = {
global: 'test',
subscripts: ['foo', 'bar'],
data: 'hello world'
};
db.set(node, function(error, result) {
// do something when node is created
});
Copyright © 2016 M/Gateway Developments Ltd
Simple examples
• Get a Global Node, eg
– Set value = ^test("foo","bar")
var node = {
global: 'test',
subscripts: ['foo', 'bar']
};
db.get(node, function(error, result) {
console.log('value = ' + result.data);
});
Copyright © 2016 M/Gateway Developments Ltd
cache.node APIs
• Open and close database
• Set, get, kill a global node
• Determine if a node is defined ($data)
• Equivalents to $order and $query (forwards and
backwards)
• Global directory listing
• Increment a global node
• Lock/unlock a global node
• Merge one global sub-tree into another
Copyright © 2016 M/Gateway Developments Ltd
cache.node API Documentation
• http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=BXJS_refapi
Copyright © 2016 M/Gateway Developments Ltd
cache.node also has APIs for Caché Objects
• invoke_classmethod
– invoke a class method
• create_instance
– create a new instance of an object
• open_instance
– open an existing instance of an object
• get_property
– retrieve the value of a property
• set_property
– set the value of a property
• invoke_method
– invoke a method
• save_instance
– save an instance
• close_instance
– close an instance
• Note: these are ONLY available for Caché!
Copyright © 2016 M/Gateway Developments Ltd
cache.node APIs
• On all platforms, available as asynchronous &
synchronous versions
– If using a single Node.js process for multi-user
access, you must use the async APIs
– Synchronous APIs:
• Slightly faster
• Simpler and more intuitive to use
– Avoid call-back hell or use of Promises etc
• Allow higher-level database abstractions to be created
on top of the basic global storage primitives
– Multi-model NoSQL functionality via JavaScript
• Allow for "embedded" database functionality in Node.js
Copyright © 2016 M/Gateway Developments Ltd
Synchronous cache.node APIs
• Normal limitations of synchronous APIs:
– They block I/O, so have disastrous results on
Node.js concurrency performance
– So, not normally usable with Node.js except
for single-user testing
• However, new run-time environments for
Node.js that provide an isolated run-time
container for a handler function can safely
use synchronous APIs, eg:
– AWS Lambda
– QEWD (previously known as ewd-xpress)

More Related Content

What's hot

VMware vCloud and vRealize Operations
VMware vCloud and vRealize OperationsVMware vCloud and vRealize Operations
VMware vCloud and vRealize Operations
Pedro Silva
 
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
Amazon Web Services
 
Pivotal Cloud Foundry: A Technical Overview
Pivotal Cloud Foundry: A Technical OverviewPivotal Cloud Foundry: A Technical Overview
Pivotal Cloud Foundry: A Technical Overview
VMware Tanzu
 
Network architecture design for microservices on GCP
Network architecture design for microservices on GCPNetwork architecture design for microservices on GCP
Network architecture design for microservices on GCP
Raphaël FRAYSSE
 
AWS VS AZURE VS GCP.pptx
AWS VS AZURE VS GCP.pptxAWS VS AZURE VS GCP.pptx
AWS VS AZURE VS GCP.pptx
Raneesh Ramesan
 
Deploying a Low-Latency Multiplayer Game Globally: Loadout
Deploying a Low-Latency Multiplayer Game Globally: Loadout Deploying a Low-Latency Multiplayer Game Globally: Loadout
Deploying a Low-Latency Multiplayer Game Globally: Loadout
Amazon Web Services
 
Building APIs with Apigee Edge and Microsoft Azure
Building APIs with Apigee Edge and Microsoft AzureBuilding APIs with Apigee Edge and Microsoft Azure
Building APIs with Apigee Edge and Microsoft Azure
Apigee | Google Cloud
 
Google Cloud Networking Deep Dive
Google Cloud Networking Deep DiveGoogle Cloud Networking Deep Dive
Google Cloud Networking Deep Dive
Michelle Holley
 
Secure your Application with Google cloud armor
Secure your Application with Google cloud armorSecure your Application with Google cloud armor
Secure your Application with Google cloud armor
DevOps Indonesia
 
(NET403) Another Day, Another Billion Packets
(NET403) Another Day, Another Billion Packets(NET403) Another Day, Another Billion Packets
(NET403) Another Day, Another Billion Packets
Amazon Web Services
 
Introduction to rook
Introduction to rookIntroduction to rook
Introduction to rook
Rohan Gupta
 
Roadmap to Enterprise Cloud Computing
Roadmap to Enterprise Cloud ComputingRoadmap to Enterprise Cloud Computing
Roadmap to Enterprise Cloud Computing
Rex Wang
 
Red Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewRed Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform Overview
James Falkner
 
Introduction to openshift
Introduction to openshiftIntroduction to openshift
Introduction to openshift
MamathaBusi
 
OpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdfOpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdf
JuanSalinas593459
 
Hcx intro preso v2
Hcx intro preso v2Hcx intro preso v2
Hcx intro preso v2
Parashar Singh
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with Ceph
CloudOps2005
 
Ceph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing GuideCeph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing Guide
Karan Singh
 
Red Hat Container Strategy
Red Hat Container StrategyRed Hat Container Strategy
Red Hat Container Strategy
Red Hat Events
 
Running Mission Critical Workloads on AWS
Running Mission Critical Workloads on AWSRunning Mission Critical Workloads on AWS
Running Mission Critical Workloads on AWS
Amazon Web Services
 

What's hot (20)

VMware vCloud and vRealize Operations
VMware vCloud and vRealize OperationsVMware vCloud and vRealize Operations
VMware vCloud and vRealize Operations
 
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
GPSTEC323-SaaS and OpenID Connect The Secret Sauce Multi-Tenant Identity and ...
 
Pivotal Cloud Foundry: A Technical Overview
Pivotal Cloud Foundry: A Technical OverviewPivotal Cloud Foundry: A Technical Overview
Pivotal Cloud Foundry: A Technical Overview
 
Network architecture design for microservices on GCP
Network architecture design for microservices on GCPNetwork architecture design for microservices on GCP
Network architecture design for microservices on GCP
 
AWS VS AZURE VS GCP.pptx
AWS VS AZURE VS GCP.pptxAWS VS AZURE VS GCP.pptx
AWS VS AZURE VS GCP.pptx
 
Deploying a Low-Latency Multiplayer Game Globally: Loadout
Deploying a Low-Latency Multiplayer Game Globally: Loadout Deploying a Low-Latency Multiplayer Game Globally: Loadout
Deploying a Low-Latency Multiplayer Game Globally: Loadout
 
Building APIs with Apigee Edge and Microsoft Azure
Building APIs with Apigee Edge and Microsoft AzureBuilding APIs with Apigee Edge and Microsoft Azure
Building APIs with Apigee Edge and Microsoft Azure
 
Google Cloud Networking Deep Dive
Google Cloud Networking Deep DiveGoogle Cloud Networking Deep Dive
Google Cloud Networking Deep Dive
 
Secure your Application with Google cloud armor
Secure your Application with Google cloud armorSecure your Application with Google cloud armor
Secure your Application with Google cloud armor
 
(NET403) Another Day, Another Billion Packets
(NET403) Another Day, Another Billion Packets(NET403) Another Day, Another Billion Packets
(NET403) Another Day, Another Billion Packets
 
Introduction to rook
Introduction to rookIntroduction to rook
Introduction to rook
 
Roadmap to Enterprise Cloud Computing
Roadmap to Enterprise Cloud ComputingRoadmap to Enterprise Cloud Computing
Roadmap to Enterprise Cloud Computing
 
Red Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewRed Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform Overview
 
Introduction to openshift
Introduction to openshiftIntroduction to openshift
Introduction to openshift
 
OpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdfOpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdf
 
Hcx intro preso v2
Hcx intro preso v2Hcx intro preso v2
Hcx intro preso v2
 
Using Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with CephUsing Rook to Manage Kubernetes Storage with Ceph
Using Rook to Manage Kubernetes Storage with Ceph
 
Ceph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing GuideCeph Object Storage Reference Architecture Performance and Sizing Guide
Ceph Object Storage Reference Architecture Performance and Sizing Guide
 
Red Hat Container Strategy
Red Hat Container StrategyRed Hat Container Strategy
Red Hat Container Strategy
 
Running Mission Critical Workloads on AWS
Running Mission Critical Workloads on AWSRunning Mission Critical Workloads on AWS
Running Mission Critical Workloads on AWS
 

Similar to EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Databases

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
Rob Tweed
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azure
Colin Mackay
 
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
Rob Tweed
 
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
C4Media
 
On Docker and its use for LHC at CERN
On Docker and its use for LHC at CERNOn Docker and its use for LHC at CERN
On Docker and its use for LHC at CERN
Sebastien Goasguen
 
DRILETT_AWS_VPC_Presentation_2MB
DRILETT_AWS_VPC_Presentation_2MBDRILETT_AWS_VPC_Presentation_2MB
DRILETT_AWS_VPC_Presentation_2MB
David Rilett
 
Always on! ... or not?
Always on! ... or not?Always on! ... or not?
Always on! ... or not?
Carsten Sandtner
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.js
async_io
 
Drilett aws vpc_presentation_shared
Drilett aws vpc_presentation_sharedDrilett aws vpc_presentation_shared
Drilett aws vpc_presentation_shared
David Rilett
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
Ben Hall
 
Node.js on Azure
Node.js on AzureNode.js on Azure
Node.js on Azure
Sasha Goldshtein
 
Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)
Lucas Jellema
 
Michael stack -the state of apache h base
Michael stack -the state of apache h baseMichael stack -the state of apache h base
Michael stack -the state of apache h base
hdhappy001
 
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleulsapidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
apidays
 
Local Storage for Web Applications
Local Storage for Web ApplicationsLocal Storage for Web Applications
Local Storage for Web Applications
Markku Laine
 
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
Radhika Puthiyetath
 
Mongo and node mongo dc 2011
Mongo and node mongo dc 2011Mongo and node mongo dc 2011
Mongo and node mongo dc 2011
async_io
 
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on AzureDevoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Patrick Chanezon
 
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Felix Gessert
 
node_js.pptx
node_js.pptxnode_js.pptx
node_js.pptx
dipen55
 

Similar to EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Databases (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
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azure
 
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
 
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
Making Distributed Data Persistent Services Elastic (Without Losing All Your ...
 
On Docker and its use for LHC at CERN
On Docker and its use for LHC at CERNOn Docker and its use for LHC at CERN
On Docker and its use for LHC at CERN
 
DRILETT_AWS_VPC_Presentation_2MB
DRILETT_AWS_VPC_Presentation_2MBDRILETT_AWS_VPC_Presentation_2MB
DRILETT_AWS_VPC_Presentation_2MB
 
Always on! ... or not?
Always on! ... or not?Always on! ... or not?
Always on! ... or not?
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.js
 
Drilett aws vpc_presentation_shared
Drilett aws vpc_presentation_sharedDrilett aws vpc_presentation_shared
Drilett aws vpc_presentation_shared
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
 
Node.js on Azure
Node.js on AzureNode.js on Azure
Node.js on Azure
 
Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)Introduction to Node (15th May 2017)
Introduction to Node (15th May 2017)
 
Michael stack -the state of apache h base
Michael stack -the state of apache h baseMichael stack -the state of apache h base
Michael stack -the state of apache h base
 
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleulsapidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
apidays LIVE Paris 2021 - Edge Side APIs by Kevin Dunglas, Les Tilleuls
 
Local Storage for Web Applications
Local Storage for Web ApplicationsLocal Storage for Web Applications
Local Storage for Web Applications
 
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
On CloudStack, Docker, Kubernetes, and Big Data…Oh my ! By Sebastien Goasguen...
 
Mongo and node mongo dc 2011
Mongo and node mongo dc 2011Mongo and node mongo dc 2011
Mongo and node mongo dc 2011
 
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on AzureDevoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
 
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
Building a Global-Scale Multi-Tenant Cloud Platform on AWS and Docker: Lesson...
 
node_js.pptx
node_js.pptxnode_js.pptx
node_js.pptx
 

More from Rob Tweed

QEWD Update
QEWD UpdateQEWD Update
QEWD Update
Rob Tweed
 
Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language Feature
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServices
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 
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...
Rob Tweed
 
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...
Rob Tweed
 
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
Rob Tweed
 
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
Rob Tweed
 

More from 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 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 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 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 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 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
 

Recently uploaded

Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
ISH Technologies
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
Massimo Artizzu
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
What next after learning python programming basics
What next after learning python programming basicsWhat next after learning python programming basics
What next after learning python programming basics
Rakesh Kumar R
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
GohKiangHock
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
Alina Yurenko
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 

Recently uploaded (20)

Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
What next after learning python programming basics
What next after learning python programming basicsWhat next after learning python programming basics
What next after learning python programming basics
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 

EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Databases

  • 1. Copyright © 2016 M/Gateway Developments Ltd EWD 3 Training Course Part 1 How Node.js Integrates with Global Storage Databases Rob Tweed Director, M/Gateway Developments Ltd Twitter: @rtweed
  • 2. Copyright © 2016 M/Gateway Developments Ltd Global Storage Databases • InterSystems Caché – Proprietary, commercially-licensed – Windows, Linux, OS X – http://www.intersystems.com/our-products/cache/cache-overview/ • FIS GT.M – Free, Open Source – Linux – https://www.fisglobal.com/Solutions/Banking-and-Wealth/Services/Database-Engine • Redis, via ewd-redis-globals – https://github.com/robtweed/ewd-redis-globals
  • 3. Copyright © 2016 M/Gateway Developments Ltd Node.js • Node.js: – Server-side JavaScript – Single thread of execution – JavaScript is the world's most popular computer language, by a considerable (and growing) margin
  • 4. Copyright © 2016 M/Gateway Developments Ltd Caché • High-performance multi-model NoSQL database – Hierarchical underlying data structure • "Global Storage" • Normally accessed via built-in language – Cache ObjectScript • Extension/ super-set of MUMPS language – Considered obsolete by IT mainstream
  • 5. Copyright © 2016 M/Gateway Developments Ltd GT.M • High-performance multi-model NoSQL database – Hierarchical underlying data structure • "Global Storage" – Normally accessed via built-in language • MUMPS • Considered obsolete by IT mainstream
  • 6. Copyright © 2016 M/Gateway Developments Ltd Redis / ewd-redis-globals • Redis: – Probably the world's most popular Open Source NoSQL databases – Also one of the fastest – Key/Value storage primitive data structures • ewd-redis-globals: – Global storage functionality implemented on top of Redis database key/value primitives – Database only • No dependency on Mumps language • Open source equivalent to InterSystems' GlobalsDB
  • 7. Copyright © 2016 M/Gateway Developments Ltd Making Global Storage mainstream • Global Storage has proven to be a very powerful, flexible, high-performance NoSQL database model for real-world, demanding applications • It has been ignored by the mainstream by virtue of its integrated access language being seen as out-dated / obsolete – "database baby has been thrown out with the language bathwater" • JavaScript as a primary language for accessing Global Storage databases?
  • 8. Copyright © 2016 M/Gateway Developments Ltd Node.js Interface • Actually first implemented for free (but not Open Source) GlobalsDB database – Core engine from Caché – No language parser/engine – Now deprecated by InterSystems • Accessed via the database engine's C++ call-in interface – Originally Java & .Net only • Node.js interface developed by Chris Munt • Interface module file: cache.node
  • 9. Copyright © 2016 M/Gateway Developments Ltd Node.js Interface • cache.node ported to Cache • function() API added to allow MUMPS/Cache Objectscript code to be executed from JavaScript / Node.js • Cache Object APIs also subsequently added • Network (TCP-based) interface is also available
  • 10. Copyright © 2016 M/Gateway Developments Ltd cache.node interface Node.js Process Caché Process cache.node module C++call-ininterface JavaScript Globals Functions Objects
  • 11. Copyright © 2016 M/Gateway Developments Ltd GT.M / NodeM • cache.node APIs re-implemented by Open Source community (David Wicksell) for use with GT.M – https://github.com/dlwicksell/nodem – Interfaces with GT.M's C Call-in interface
  • 12. Copyright © 2016 M/Gateway Developments Ltd NodeM interface Node.js Process GT.M Process NodeM module Ccall-ininterface JavaScript Globals Functions
  • 13. Copyright © 2016 M/Gateway Developments Ltd Redis / ewd-redis-globals • cache.node APIs re-implemented as part of the ewd-redis-globals module – Interfaces with Redis via its standard TCP connection
  • 14. Copyright © 2016 M/Gateway Developments Ltd In-process Node.js Interfaces to Cache & GT.M • Very closely-coupled, intimate relationship between Node.js and Caché / GT.M – In-process • The Node.js process and connected Caché / GT.M process are one and the same – Node.js process.pid === Caché/GT.M $job – Node.js must be installed on the Caché or GT.M server
  • 15. Copyright © 2016 M/Gateway Developments Ltd cache.node interface cache.node module C++call-ininterface JavaScript Globals Functions Objects CachéNode.jsProcess
  • 16. Copyright © 2016 M/Gateway Developments Ltd In-process Node.js Interface • Very fast connection – Significantly faster than a networked connection between Node.js and Caché – Currently between ⅓ and ¼ the performance of native Mumps code when accessing Global storage – Currently limited by Google V8 API bottleneck • https://bugs.chromium.org/p/v8/issues/detail?id=5144 • Potential for full native Mumps performance
  • 17. Copyright © 2016 M/Gateway Developments Ltd Networked interfaces • Available for Caché and Redis/ewd-redis-globals • Allows database and Node.js to be on different physical servers • Trade-off between performance and flexibility / redundancy
  • 18. Copyright © 2016 M/Gateway Developments Ltd JavaScript access to Global Storage • The JavaScript / Node.js APIs for accessing Global storage are identical, regardless of database type and connection type • Defined by the original cache.node APIs • http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=BXJS
  • 19. Copyright © 2016 M/Gateway Developments Ltd Installing cache.node • Currently included with Cache build kits – Not distributed separately – Hoping that InterSystems will soon distribute via NPM • Different Node.js versions have introduced API changes – Different versions of cache.node for each main Node.js version • 12.x – cache0120.node • 4.1.x – cache410.node • 4.2 and later 4.x versions – Cache421.node – Rename to cache.node and copy to main node_modules directory • Eg C:ewd3node_modulescache.node
  • 20. Copyright © 2016 M/Gateway Developments Ltd Installing NodeM for GT.M • Node.js Add-in module • See: – https://github.com/dlwicksell/nodem
  • 21. Copyright © 2016 M/Gateway Developments Ltd ewd-redis-globals • Assumes you have Redis installed • ewd-redis-globals: – Node.js module • https://github.com/robtweed/ewd-redis-globals – Implements Global Storage functionality using Redis primitive data structures – Provides the JavaScript APIs for accessing Global Storage • Complies with the cache.node API definitions
  • 22. Copyright © 2016 M/Gateway Developments Ltd Connecting to Caché var interface = require('cache'); // loads cache.node var db = new interface.Cache(); // Change these parameters to match your Cache system: var ok = db.open({ path: '/opt/cache/mgr', username: '_SYSTEM', password: 'SYS', namespace: 'USER' }); // confirm it connected OK console.log('ok: ' + JSON.stringify(ok)); console.log(db.version()); Create a test Script file, eg C:ewd3test.js
  • 23. Copyright © 2016 M/Gateway Developments Ltd Connecting to GT.M var interface = require('nodem'); // loads NodeM var db = new interface.Gtm(); // Assuming your process profile is automatically configured // for GT.M: var ok = db.open(); // confirm it connected OK console.log('ok: ' + JSON.stringify(ok)); console.log(db.version()); // once connected, the APIs for GT.M are identical to // those for Cache Create a test Script file, eg C:ewd3test.js
  • 24. Copyright © 2016 M/Gateway Developments Ltd Connecting to Redis var interface = require('ewd-redis-globals'); var db = new interface(); // Assuming Redis is listening on standard port and // running on localhost: var ok = db.open(); // confirm it connected OK console.log('ok: ' + JSON.stringify(ok)); console.log(db.version()); // once connected, the APIs for Redis are identical to // those for Cache Create a test Script file, eg C:ewd3test.js
  • 25. Copyright © 2016 M/Gateway Developments Ltd Connecting to Global Storage Run the test script file: cd ewd3 node test ok: {"ok":1,"result":1} Node.js Adaptor for Cache: Version: 1.1.104 (CM); Cache Version: 2015.2 build 664 Connection is working! The version string will be different for GT.M or ewd-redis-globals
  • 26. Copyright © 2016 M/Gateway Developments Ltd Simple examples • Set a Global Node, eg – set ^test("foo","bar")="hello world" var node = { global: 'test', subscripts: ['foo', 'bar'], data: 'hello world' }; db.set(node, function(error, result) { // do something when node is created });
  • 27. Copyright © 2016 M/Gateway Developments Ltd Simple examples • Get a Global Node, eg – Set value = ^test("foo","bar") var node = { global: 'test', subscripts: ['foo', 'bar'] }; db.get(node, function(error, result) { console.log('value = ' + result.data); });
  • 28. Copyright © 2016 M/Gateway Developments Ltd cache.node APIs • Open and close database • Set, get, kill a global node • Determine if a node is defined ($data) • Equivalents to $order and $query (forwards and backwards) • Global directory listing • Increment a global node • Lock/unlock a global node • Merge one global sub-tree into another
  • 29. Copyright © 2016 M/Gateway Developments Ltd cache.node API Documentation • http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=BXJS_refapi
  • 30. Copyright © 2016 M/Gateway Developments Ltd cache.node also has APIs for Caché Objects • invoke_classmethod – invoke a class method • create_instance – create a new instance of an object • open_instance – open an existing instance of an object • get_property – retrieve the value of a property • set_property – set the value of a property • invoke_method – invoke a method • save_instance – save an instance • close_instance – close an instance • Note: these are ONLY available for Caché!
  • 31. Copyright © 2016 M/Gateway Developments Ltd cache.node APIs • On all platforms, available as asynchronous & synchronous versions – If using a single Node.js process for multi-user access, you must use the async APIs – Synchronous APIs: • Slightly faster • Simpler and more intuitive to use – Avoid call-back hell or use of Promises etc • Allow higher-level database abstractions to be created on top of the basic global storage primitives – Multi-model NoSQL functionality via JavaScript • Allow for "embedded" database functionality in Node.js
  • 32. Copyright © 2016 M/Gateway Developments Ltd Synchronous cache.node APIs • Normal limitations of synchronous APIs: – They block I/O, so have disastrous results on Node.js concurrency performance – So, not normally usable with Node.js except for single-user testing • However, new run-time environments for Node.js that provide an isolated run-time container for a handler function can safely use synchronous APIs, eg: – AWS Lambda – QEWD (previously known as ewd-xpress)