SlideShare une entreprise Scribd logo
1  sur  67
Full Stack Development with
Node.js and NoSQL
Nic Raboy (@nraboy)
Arun Gupta (@arungupta)
©2015 Couchbase Inc. 2
The Role of a Full Stack Developer
©2015 Couchbase Inc. 3
Application Stacks
©2015 Couchbase Inc. 4
The Power of the Flexible JSON Schema
• Ability to store data in
multiple ways
• De-normalized single
document, as opposed to
normalizing data across
multiple table
• Dynamic Schema to add new
values when needed
©2015 Couchbase Inc. 5
Where is NoSQL a Good Fit?
Low-latency Critical
High Throughput or Large Numbers of Users
Unknown Demand with Sudden growth
Predominantly Direct Document Access
Read / Mixed / Write-heavy Workloads
Traditional Business Applications
Transaction-heavy Apps
Legacy Hardware
Full ACID support
Web / Mobile / IoT Legacy Business Apps
©2015 Couchbase Inc. 6
What is Couchbase?
Couchbase is a distributed operational database that enables you to
develop with agility and operate at any scale.
Managed Cache Key-Value Store Document Database Embedded Database Sync Management
©2015 Couchbase Inc. 7
Develop with Agility
Easier, Faster Development Flexible Data Modeling Powerful Querying
SQL Integration & Migration Big Data Integration Mobile / IoT
©2015 Couchbase Inc. 8
Operate at Any Scale
Elastic Scalability Consistent High Performance Always-on Availability
Multi-Data Center Deployment Simple, Powerful Administration Enterprise Grade Security
©2015 Couchbase Inc. 9
Couchbase Developer
©2015 Couchbase Inc. 10
Couchbase integrates with the Big Data ecosystem
©2015 Couchbase Inc. 11
Couchbase Server – Single Node Architecture
 Data Service – builds and maintains
local view indexes
 Indexing Engine – builds and
maintains Global Secondary Indexes
 Query Engine – plans, coordinates,
and executes queries against either
Global or Local view indexes
 Cluster Manager – configuration,
heartbeat, statistics, RESTful
Management interface
©2015 Couchbase Inc. 12
Simplified Administration
• Online upgrades and operations
• Built-in enterprise classAdmin Console
• RESTfulAPIs
©2015 Couchbase Inc. 13
Accessing Data From Couchbase
Key access using Document ID
• Operations are extremely fast
with consistent low latency
• Reads and writes are evenly
distributed across Data Service
nodes
• Data is cached in built-in
Managed Caching layer and
stored in persistent storage layer
Queries using N1QL
• SQL-like : SELECT * FROM
WHERE, LIKE, GROUP, etc.,
• JOINs
• Powerful Extensions (nest,
unnest) for JSON to support
nested and hierarchical data
structures.
• Multiple access paths –Views
and global secondary indexes
• ODBC/JDBC drivers available
Views using static queries
• Pre-computed complex Map-
Reduce queries
• Incrementally updated to
power analytics, reporting
and dashboards
• Strong for complex custom
aggregations
©2015 Couchbase Inc. 14
The Couchbase Node.js SDK
 Uses the high performance Couchbase C library
 Compatible with Node.js frameworks
– Express, Sails, Etc.
 Minimal coding
– No database maintenance via code
– No parsing queries via application code
©2015 Couchbase Inc. 15
Building Applications with Node.js SDK
//including the Node.js dependency
var Couchbase = require(”couchbase");
//connecting to a Couchbase cluster
var cluster = new Couchbase.Cluster("couchbase://localhost:8091");
//opening a bucket in the cluster
var myBucket = cluster.openBucket("travel-sample", "");
//preparing N1ql
var myQuery = Couchbase.N1qlQuery();
//creating and saving a Document
var document = {
firstname: "Nic",
lastname: "Raboy"
};
myBucket.insert("my-key", document, function(error, result) {});
©2015 Couchbase Inc. 16
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
©2015 Couchbase Inc. 17
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
©2015 Couchbase Inc. 18
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
©2015 Couchbase Inc. 19
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
©2015 Couchbase Inc. 20
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
©2015 Couchbase Inc. 21
Node.js
function query(sql, done) {
var queryToRun = myQuery.fromString(sql);
myBucket.query(queryToRun, function(error, result) {
if(error) {
console.log(“ERROR: “, error);
done(error, null);
return;
}
done(null, result);
return;
});
}
DemoTime!
©2015 Couchbase Inc. 23
The CEAN Stack
©2015 Couchbase Inc. 24
Stack Design
AngularJS
Client Frontend
Node.js
Server Backend
©2015 Couchbase Inc. 25
Node.js Separation of Frontend and Backend
 No Jade markup
 API driven
 Less client and server coupling
 The backend can evolve without affecting the frontend
 Frontend can be extended to web as well as mobile
©2015 Couchbase Inc. 26
Multiple Frontends & One Backend
©2015 Couchbase Inc. 27
The Node.js Backend
©2015 Couchbase Inc. 28
Node.js Configuration
// config.json
{
"couchbase": {
"server": "couchbase://localhost",
"bucket": "restful-sample"
}
}
©2015 Couchbase Inc. 29
Node.js Configuration
// Project’s app.js file
var express = require("express");
var bodyParser = require("body-parser");
var couchbase = require("couchbase");
var path = require("path");
var config = require("./config");
var app = express();
©2015 Couchbase Inc. 30
Node.js Configuration
// app.js continued…
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
module.exports.bucket = (new
couchbase.Cluster(config.couchbase.server)).openBucket(config.couchbase.bucket);
app.use(express.static(path.join(__dirname, "public")));
var routes = require("./routes/routes.js")(app);
var server = app.listen(3000, function () {
console.log("Listening on port %s...", server.address().port);
});
©2015 Couchbase Inc. 31
Node.js Create or Update Endpoint
// routes.js
app.post("/api/create", function(req, res) {
if(!req.body.firstname) {
return res.status(400).send({"status": "error", "message": ”First Name?"});
}
// …
RecordModel.create(req.body, function(error, result) {
if(error) {
return res.status(400).send(error);
}
res.send(result);
});
});
©2015 Couchbase Inc. 32
Node.js Get Document Endpoint
// routes.js continued…
app.get("/api/get", function(req, res) {
if(!req.query.document_id) {
return res.status(400).send({"status": "error", "message": ”Document ID?"});
}
RecordModel.getByDocumentId(req.query.document_id, function(error, result) {
if(error) {
return res.status(400).send(error);
}
res.send(result);
});
});
©2015 Couchbase Inc. 33
Node.js Delete Endpoint
// routes.js continued…
app.post("/api/delete", function(req, res) {
if(!req.body.document_id) {
return res.status(400).send({"status": "error", "message": ”ID?"});
}
RecordModel.delete(req.body.document_id, function(error, result) {
if(error) {
return res.status(400).send(error);
}
res.send(result);
});
});
©2015 Couchbase Inc. 34
Node.js Upsert Document Function
// recordmodel.js
RecordModel.save = function(data, callback) {
var jsonObject = {
type: “user”,
firstname: data.firstname,
lastname: data.lastname,
email: data.email
}
var documentId = data.document_id ? data.document_id : uuid.v4();
db.upsert(documentId, jsonObject, function(error, result) {
if(error) {
return callback(error, null);
}
callback(null, {message: "success", data: result});
});
}
©2015 Couchbase Inc. 35
Couchbase JSON Document
©2015 Couchbase Inc. 36
Node.js Get Document with N1QL Function
// recordmodel.js continued…
RecordModel.getByDocumentId = function(documentId, callback) {
var statement = "SELECT firstname, lastname, email " +
"FROM `" + config.couchbase.bucket + "` AS users " +
"WHERE META(users).id = $1";
var query = N1qlQuery.fromString(statement);
db.query(query, [documentId], function(error, result) {
if(error) {
return callback(error, null);
}
callback(null, result);
});
};
©2015 Couchbase Inc. 37
Node.js Delete Document Function
// recordmodel.js continued…
RecordModel.delete = function(documentId, callback) {
db.remove(documentId, function(error, result) {
if(error) {
callback(error, null);
return;
}
callback(null, {message: "success", data: result});
});
};
©2015 Couchbase Inc. 38
The AngularJS Frontend
©2015 Couchbase Inc. 39
Get all documents
// AngularJS app.js
$scope.fetchAll = function() {
$http(
{
method: "GET",
url: "/api/getAll"
}
)
.success(function(result) {
for(var i = 0; i < result.length; i++) {
$scope.items[result[i].id] = result[i];
}
});
}
©2015 Couchbase Inc. 40
Save a document
// AngularJS app.s
$scope.save = function(firstname, lastname, email) {
$http(
{
method: "POST",
url: "/api/save",
data: {
firstname: firstname,
lastname: lastname,
email: email,
document_id: $stateParams.documentId
}
}
)
}
©2015 Couchbase Inc. 41
More Complex Node.js Queries
©2015 Couchbase Inc. 42
Node.jsTravel Sample
FlightPath.findAll = function(from, to, callback) {
var statement = "SELECT faa AS fromAirport, geo " +
"FROM `" + config.couchbase.bucket + "` r" +
"WHERE airportname = $1 " +
"UNION SELECT faa AS toAirport, geo " +
"FROM `" + config.couchbase.bucket + "` r" +
"WHERE airportname = $2";
var query = N1qlQuery.fromString(statement);
db.query(query, [from, to], function(error, result) {
if(error) {
return callback(error, null);
}
callback(null, result);
});
};
©2015 Couchbase Inc. 43
Node.jsTravel Sample
FlightPath.findAll = function(queryFrom, queryTo, leave, callback) {
var statement = "SELECT r.id, a.name, s.flight, s.utc, r.sourceairport,
r.destinationairport, r.equipment " +
"FROM `" + config.couchbase.bucket + "` r" +
"UNNEST r.schedule s " +
"JOIN `" + config.couchbase.bucket + "` a ON KEYS r.airlineid " +
"WHERE r.sourceairport = $1 AND r.destinationairport = $2 AND s.day = $3
”
"ORDER BY a.name";
var query = N1qlQuery.fromString(statement);
db.query(query, [queryFrom, queryTo, leave], function(error, result) {
if(error) {
return callback(error, null);
}
callback(null, result);
});
};
©2015 Couchbase Inc. 44
Node.js Sample Applications
https://github.com/couchbaselabs/try-cb-nodejs
https://github.com/couchbaselabs/restful-angularjs-nodejs
©2015 Couchbase Inc. 45
Couchbase N1QLTutorial
http://query.pub.couchbase.com/tutorial/
©2015 Couchbase Inc. 46
Ottoman ODM
©2015 Couchbase Inc. 47
Ottoman Model
var RecordModel = ottoman.model("Record", {
firstname: {type: "string”},
lastname: {type: "string"},
email: {type: "string"},
created_at: {type: “Date”, default: Date.now}
});
©2015 Couchbase Inc. 48
Ottoman Saving
var myRecord = new RecordModel({
firstname: “Nic”,
lastname: “Raboy”,
email: “nic@couchbase.com”
});
myRecord.save(function(error) {
if(error) {
// Error here
}
// Success here
});
©2015 Couchbase Inc. 49
Ottoman Finding
RecordModel.find({}, function(error, result) {
if(error) {
// Error here
}
// Array of results here
});
©2015 Couchbase Inc. 50
Couchbase Mobile
©2015 Couchbase Inc. 51
Couchbase Lite
Embedded NoSQL Database
Sync Gateway
Secure Synchronization
Couchbase
Server
Cloud NoSQL Database
Couchbase Mobile
©2015 Couchbase Inc. 52
Couchbase Lite
Full Featured
Lightweight
Native
Secure
JSON
©2015 Couchbase Inc. 53
Sync Gateway
Secure
Synchronization
Authentication
Data Read Access
Data Write Access
©2015 Couchbase Inc. 54
Couchbase Server
Highly scalable
High Performance
Always on
JSON
©2015 Couchbase Inc. 55
Couchbase Lite
 NoSQL Mobile database
 Runs in-process
 Small footprint
©2015 Couchbase Inc. 56
var database = new Couchbase("nraboy-database");
var documentId = database.createDocument({
"firstname": "Nic",
"lastname": "Raboy",
"address": {
"city": "San Francisco",
"state": "CA",
"country": "USA"
}
"twitter": "https://www.twitter.com/nraboy"
});
©2015 Couchbase Inc. 57
Map Reduce Indexes
• Building indexes in your native language
• Results are persisted for fast querying
• Just set breakpoints to debug
©2015 Couchbase Inc. 58
// Create an index
database.createView("people", "1", function(document, emitter) {
if(document.twitter) {
emitter.emit(document._id, document);
}
});
// Now query it
var rows = database.executeQuery("people");
for(var i = 0; i < rows.length; i++) {
// print row[i]
}
©2015 Couchbase Inc. 59
Change Notifications
Change notifications
• Listen for changes
• Cuts down on a ton of cruft code
• Data, queries, replications – even documents
©2015 Couchbase Inc. 60
database.addDatabaseChangeListener(function(changes) {
for(var i = 0; i < changes.length; i++) {
if(!changes[i].isConflict()) {
console.log(changes[i].getDocumentId());
}
}
});
©2015 Couchbase Inc. 61
Sync
Sync
• Full multi-master replication
• Ability to minimize battery drain
• Change notifications and conflict detection
©2015 Couchbase Inc. 62
var push = database.createPushReplication("http://syncgateway");
var pull = database.createPullReplication("http://syncgateway");
push.setContinuous(true);
pull.setContinuous(true);
push.start();
pull.start();
JCenter
Maven
Central
NPM
Github
DemoTime!
©2015 Couchbase Inc. 65
What is Couchbase?
©2015 Couchbase Inc. 66
Where do you find us?
• developer.couchbase.com
• blog.couchbase.com
• @couchbasedev or @couchbase
• forums.couchbase.com
• stackoverflow.com/questions/tagged/couchbase
POWER UP and PARTY DOWN
with Red Hat Mobile, Middleware
and OpenShift.
Wednesday evening 9PM – 12AM
Pick up your invitation for the party
that beats all parties at:
Mobile, Middleware or OpenShift
demo pods in the Red Hat
Booth, Partner Pavilion

Contenu connexe

Tendances

Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
Stephen Chin
 
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
DataStax
 

Tendances (20)

Javantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
Javantura v4 - Cloud-native Architectures and Java - Matjaž B. JuričJavantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
Javantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 
Best Practices for couchDB developers on Microsoft Azure
Best Practices for couchDB developers on Microsoft AzureBest Practices for couchDB developers on Microsoft Azure
Best Practices for couchDB developers on Microsoft Azure
 
Java one kubernetes, jenkins and microservices
Java one   kubernetes, jenkins and microservicesJava one   kubernetes, jenkins and microservices
Java one kubernetes, jenkins and microservices
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
DevNexus 2015
DevNexus 2015DevNexus 2015
DevNexus 2015
 
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entitySpring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
 
An Unexpected Solution to Microservices UI Composition
An Unexpected Solution to Microservices UI CompositionAn Unexpected Solution to Microservices UI Composition
An Unexpected Solution to Microservices UI Composition
 
SOA to Microservices
SOA to MicroservicesSOA to Microservices
SOA to Microservices
 
Full-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJSFull-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJS
 
micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)micro services architecture (FrosCon2014)
micro services architecture (FrosCon2014)
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
CFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful CodeCFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful Code
 
Spring Boot. Boot up your development. JEEConf 2015
Spring Boot. Boot up your development. JEEConf 2015Spring Boot. Boot up your development. JEEConf 2015
Spring Boot. Boot up your development. JEEConf 2015
 
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
DataStax | DSE Production-Certified Cassandra on Pivotal Cloud Foundry (Ben L...
 
Taking the friction out of microservice frameworks with Lagom
Taking the friction out of microservice frameworks with LagomTaking the friction out of microservice frameworks with Lagom
Taking the friction out of microservice frameworks with Lagom
 
Conquer Architectural Challenges with End-to-End JavaScript - enterJS 2014
Conquer Architectural Challenges with End-to-End JavaScript - enterJS 2014Conquer Architectural Challenges with End-to-End JavaScript - enterJS 2014
Conquer Architectural Challenges with End-to-End JavaScript - enterJS 2014
 
Managing your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CDManaging your camels in the cloud with CI/CD
Managing your camels in the cloud with CI/CD
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and Swagger
 

En vedette

En vedette (20)

Agile Is A Four-Letter Word (Jen Krieger)
Agile Is A Four-Letter Word (Jen Krieger)Agile Is A Four-Letter Word (Jen Krieger)
Agile Is A Four-Letter Word (Jen Krieger)
 
Developer Meet Designer (Andres Galante & Brian Leathem)
Developer Meet Designer (Andres Galante & Brian Leathem)Developer Meet Designer (Andres Galante & Brian Leathem)
Developer Meet Designer (Andres Galante & Brian Leathem)
 
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
 
High Performance Data Storage in a Microservices Environment
High Performance Data Storage in a Microservices EnvironmentHigh Performance Data Storage in a Microservices Environment
High Performance Data Storage in a Microservices Environment
 
Containers: Under The Hood (Vincent Batts)
Containers: Under The Hood (Vincent Batts)Containers: Under The Hood (Vincent Batts)
Containers: Under The Hood (Vincent Batts)
 
MicroServices for Java Developers
MicroServices for Java Developers MicroServices for Java Developers
MicroServices for Java Developers
 
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Ped...
 
Microservices with Docker, Kubernetes, and Jenkins
Microservices with Docker, Kubernetes, and JenkinsMicroservices with Docker, Kubernetes, and Jenkins
Microservices with Docker, Kubernetes, and Jenkins
 
Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...
Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...
Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...
 
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
 
7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...
7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...
7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...
 
It's not tools, Stupid
It's not tools, StupidIt's not tools, Stupid
It's not tools, Stupid
 
Analyzing Java Applications Using Thermostat (Omair Majid)
Analyzing Java Applications Using Thermostat (Omair Majid)Analyzing Java Applications Using Thermostat (Omair Majid)
Analyzing Java Applications Using Thermostat (Omair Majid)
 
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
 
Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...
Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...
Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...
 
Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)
Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)
Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)
 
Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)
Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)
Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)
 
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
 
Building Progressive Web Apps (Kyle Buchanan)
Building Progressive Web Apps (Kyle Buchanan)Building Progressive Web Apps (Kyle Buchanan)
Building Progressive Web Apps (Kyle Buchanan)
 

Similaire à Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)

WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 

Similaire à Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta) (20)

Quick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase ServerQuick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase Server
 
Cepta The Future of Data with Power BI
Cepta The Future of Data with Power BICepta The Future of Data with Power BI
Cepta The Future of Data with Power BI
 
How and why we evolved a legacy Java web application to Scala... and we are s...
How and why we evolved a legacy Java web application to Scala... and we are s...How and why we evolved a legacy Java web application to Scala... and we are s...
How and why we evolved a legacy Java web application to Scala... and we are s...
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices -  Michael HacksteinNoSQL meets Microservices -  Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)
 
Ziad Resume_New
Ziad Resume_NewZiad Resume_New
Ziad Resume_New
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
AWS Step Functions을 활용한 서버리스 앱 오케스트레이션
 
Patel v res_(1)
Patel v res_(1)Patel v res_(1)
Patel v res_(1)
 
Experiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamExperiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure team
 
Windows Azure and a little SQL Data Services
Windows Azure and a little SQL Data ServicesWindows Azure and a little SQL Data Services
Windows Azure and a little SQL Data Services
 
SQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API ConsumersSQL for Web APIs - Simplifying Data Access for API Consumers
SQL for Web APIs - Simplifying Data Access for API Consumers
 
Building production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stackBuilding production websites with Node.js on the Microsoft stack
Building production websites with Node.js on the Microsoft stack
 
Giga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching OverviewGiga Spaces Data Grid / Data Caching Overview
Giga Spaces Data Grid / Data Caching Overview
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
Mres presentation
Mres presentationMres presentation
Mres presentation
 
Web 2.0 Development with IBM DB2
Web 2.0 Development with IBM DB2Web 2.0 Development with IBM DB2
Web 2.0 Development with IBM DB2
 
Mstr meetup
Mstr meetupMstr meetup
Mstr meetup
 
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
 

Plus de Red Hat Developers

Plus de Red Hat Developers (20)

DevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOpsDevNation Tech Talk: Getting GitOps
DevNation Tech Talk: Getting GitOps
 
Exploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on KubernetesExploring the power of OpenTelemetry on Kubernetes
Exploring the power of OpenTelemetry on Kubernetes
 
GitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech TalkGitHub Makeover | DevNation Tech Talk
GitHub Makeover | DevNation Tech Talk
 
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech TalkQuinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
 
Extra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech TalkExtra micrometer practices with Quarkus | DevNation Tech Talk
Extra micrometer practices with Quarkus | DevNation Tech Talk
 
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
 
Integrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech TalkIntegrating Loom in Quarkus | DevNation Tech Talk
Integrating Loom in Quarkus | DevNation Tech Talk
 
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
 
Containers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech TalkContainers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech Talk
 
Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...Distributed deployment of microservices across multiple OpenShift clusters | ...
Distributed deployment of microservices across multiple OpenShift clusters | ...
 
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
 
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
 
11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech Talk11 CLI tools every developer should know | DevNation Tech Talk
11 CLI tools every developer should know | DevNation Tech Talk
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech TalkA Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
 
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...GitHub Actions and OpenShift: ​​Supercharging your software development loops...
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
 
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech TalkTo the moon and beyond with Java 17 APIs! | DevNation Tech Talk
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
 
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
 
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
 
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
 
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech TalkLevel-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Dernier (20)

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 

Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)

  • 1. Full Stack Development with Node.js and NoSQL Nic Raboy (@nraboy) Arun Gupta (@arungupta)
  • 2. ©2015 Couchbase Inc. 2 The Role of a Full Stack Developer
  • 3. ©2015 Couchbase Inc. 3 Application Stacks
  • 4. ©2015 Couchbase Inc. 4 The Power of the Flexible JSON Schema • Ability to store data in multiple ways • De-normalized single document, as opposed to normalizing data across multiple table • Dynamic Schema to add new values when needed
  • 5. ©2015 Couchbase Inc. 5 Where is NoSQL a Good Fit? Low-latency Critical High Throughput or Large Numbers of Users Unknown Demand with Sudden growth Predominantly Direct Document Access Read / Mixed / Write-heavy Workloads Traditional Business Applications Transaction-heavy Apps Legacy Hardware Full ACID support Web / Mobile / IoT Legacy Business Apps
  • 6. ©2015 Couchbase Inc. 6 What is Couchbase? Couchbase is a distributed operational database that enables you to develop with agility and operate at any scale. Managed Cache Key-Value Store Document Database Embedded Database Sync Management
  • 7. ©2015 Couchbase Inc. 7 Develop with Agility Easier, Faster Development Flexible Data Modeling Powerful Querying SQL Integration & Migration Big Data Integration Mobile / IoT
  • 8. ©2015 Couchbase Inc. 8 Operate at Any Scale Elastic Scalability Consistent High Performance Always-on Availability Multi-Data Center Deployment Simple, Powerful Administration Enterprise Grade Security
  • 9. ©2015 Couchbase Inc. 9 Couchbase Developer
  • 10. ©2015 Couchbase Inc. 10 Couchbase integrates with the Big Data ecosystem
  • 11. ©2015 Couchbase Inc. 11 Couchbase Server – Single Node Architecture  Data Service – builds and maintains local view indexes  Indexing Engine – builds and maintains Global Secondary Indexes  Query Engine – plans, coordinates, and executes queries against either Global or Local view indexes  Cluster Manager – configuration, heartbeat, statistics, RESTful Management interface
  • 12. ©2015 Couchbase Inc. 12 Simplified Administration • Online upgrades and operations • Built-in enterprise classAdmin Console • RESTfulAPIs
  • 13. ©2015 Couchbase Inc. 13 Accessing Data From Couchbase Key access using Document ID • Operations are extremely fast with consistent low latency • Reads and writes are evenly distributed across Data Service nodes • Data is cached in built-in Managed Caching layer and stored in persistent storage layer Queries using N1QL • SQL-like : SELECT * FROM WHERE, LIKE, GROUP, etc., • JOINs • Powerful Extensions (nest, unnest) for JSON to support nested and hierarchical data structures. • Multiple access paths –Views and global secondary indexes • ODBC/JDBC drivers available Views using static queries • Pre-computed complex Map- Reduce queries • Incrementally updated to power analytics, reporting and dashboards • Strong for complex custom aggregations
  • 14. ©2015 Couchbase Inc. 14 The Couchbase Node.js SDK  Uses the high performance Couchbase C library  Compatible with Node.js frameworks – Express, Sails, Etc.  Minimal coding – No database maintenance via code – No parsing queries via application code
  • 15. ©2015 Couchbase Inc. 15 Building Applications with Node.js SDK //including the Node.js dependency var Couchbase = require(”couchbase"); //connecting to a Couchbase cluster var cluster = new Couchbase.Cluster("couchbase://localhost:8091"); //opening a bucket in the cluster var myBucket = cluster.openBucket("travel-sample", ""); //preparing N1ql var myQuery = Couchbase.N1qlQuery(); //creating and saving a Document var document = { firstname: "Nic", lastname: "Raboy" }; myBucket.insert("my-key", document, function(error, result) {});
  • 16. ©2015 Couchbase Inc. 16 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 17. ©2015 Couchbase Inc. 17 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 18. ©2015 Couchbase Inc. 18 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 19. ©2015 Couchbase Inc. 19 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 20. ©2015 Couchbase Inc. 20 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 21. ©2015 Couchbase Inc. 21 Node.js function query(sql, done) { var queryToRun = myQuery.fromString(sql); myBucket.query(queryToRun, function(error, result) { if(error) { console.log(“ERROR: “, error); done(error, null); return; } done(null, result); return; }); }
  • 23. ©2015 Couchbase Inc. 23 The CEAN Stack
  • 24. ©2015 Couchbase Inc. 24 Stack Design AngularJS Client Frontend Node.js Server Backend
  • 25. ©2015 Couchbase Inc. 25 Node.js Separation of Frontend and Backend  No Jade markup  API driven  Less client and server coupling  The backend can evolve without affecting the frontend  Frontend can be extended to web as well as mobile
  • 26. ©2015 Couchbase Inc. 26 Multiple Frontends & One Backend
  • 27. ©2015 Couchbase Inc. 27 The Node.js Backend
  • 28. ©2015 Couchbase Inc. 28 Node.js Configuration // config.json { "couchbase": { "server": "couchbase://localhost", "bucket": "restful-sample" } }
  • 29. ©2015 Couchbase Inc. 29 Node.js Configuration // Project’s app.js file var express = require("express"); var bodyParser = require("body-parser"); var couchbase = require("couchbase"); var path = require("path"); var config = require("./config"); var app = express();
  • 30. ©2015 Couchbase Inc. 30 Node.js Configuration // app.js continued… app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); module.exports.bucket = (new couchbase.Cluster(config.couchbase.server)).openBucket(config.couchbase.bucket); app.use(express.static(path.join(__dirname, "public"))); var routes = require("./routes/routes.js")(app); var server = app.listen(3000, function () { console.log("Listening on port %s...", server.address().port); });
  • 31. ©2015 Couchbase Inc. 31 Node.js Create or Update Endpoint // routes.js app.post("/api/create", function(req, res) { if(!req.body.firstname) { return res.status(400).send({"status": "error", "message": ”First Name?"}); } // … RecordModel.create(req.body, function(error, result) { if(error) { return res.status(400).send(error); } res.send(result); }); });
  • 32. ©2015 Couchbase Inc. 32 Node.js Get Document Endpoint // routes.js continued… app.get("/api/get", function(req, res) { if(!req.query.document_id) { return res.status(400).send({"status": "error", "message": ”Document ID?"}); } RecordModel.getByDocumentId(req.query.document_id, function(error, result) { if(error) { return res.status(400).send(error); } res.send(result); }); });
  • 33. ©2015 Couchbase Inc. 33 Node.js Delete Endpoint // routes.js continued… app.post("/api/delete", function(req, res) { if(!req.body.document_id) { return res.status(400).send({"status": "error", "message": ”ID?"}); } RecordModel.delete(req.body.document_id, function(error, result) { if(error) { return res.status(400).send(error); } res.send(result); }); });
  • 34. ©2015 Couchbase Inc. 34 Node.js Upsert Document Function // recordmodel.js RecordModel.save = function(data, callback) { var jsonObject = { type: “user”, firstname: data.firstname, lastname: data.lastname, email: data.email } var documentId = data.document_id ? data.document_id : uuid.v4(); db.upsert(documentId, jsonObject, function(error, result) { if(error) { return callback(error, null); } callback(null, {message: "success", data: result}); }); }
  • 35. ©2015 Couchbase Inc. 35 Couchbase JSON Document
  • 36. ©2015 Couchbase Inc. 36 Node.js Get Document with N1QL Function // recordmodel.js continued… RecordModel.getByDocumentId = function(documentId, callback) { var statement = "SELECT firstname, lastname, email " + "FROM `" + config.couchbase.bucket + "` AS users " + "WHERE META(users).id = $1"; var query = N1qlQuery.fromString(statement); db.query(query, [documentId], function(error, result) { if(error) { return callback(error, null); } callback(null, result); }); };
  • 37. ©2015 Couchbase Inc. 37 Node.js Delete Document Function // recordmodel.js continued… RecordModel.delete = function(documentId, callback) { db.remove(documentId, function(error, result) { if(error) { callback(error, null); return; } callback(null, {message: "success", data: result}); }); };
  • 38. ©2015 Couchbase Inc. 38 The AngularJS Frontend
  • 39. ©2015 Couchbase Inc. 39 Get all documents // AngularJS app.js $scope.fetchAll = function() { $http( { method: "GET", url: "/api/getAll" } ) .success(function(result) { for(var i = 0; i < result.length; i++) { $scope.items[result[i].id] = result[i]; } }); }
  • 40. ©2015 Couchbase Inc. 40 Save a document // AngularJS app.s $scope.save = function(firstname, lastname, email) { $http( { method: "POST", url: "/api/save", data: { firstname: firstname, lastname: lastname, email: email, document_id: $stateParams.documentId } } ) }
  • 41. ©2015 Couchbase Inc. 41 More Complex Node.js Queries
  • 42. ©2015 Couchbase Inc. 42 Node.jsTravel Sample FlightPath.findAll = function(from, to, callback) { var statement = "SELECT faa AS fromAirport, geo " + "FROM `" + config.couchbase.bucket + "` r" + "WHERE airportname = $1 " + "UNION SELECT faa AS toAirport, geo " + "FROM `" + config.couchbase.bucket + "` r" + "WHERE airportname = $2"; var query = N1qlQuery.fromString(statement); db.query(query, [from, to], function(error, result) { if(error) { return callback(error, null); } callback(null, result); }); };
  • 43. ©2015 Couchbase Inc. 43 Node.jsTravel Sample FlightPath.findAll = function(queryFrom, queryTo, leave, callback) { var statement = "SELECT r.id, a.name, s.flight, s.utc, r.sourceairport, r.destinationairport, r.equipment " + "FROM `" + config.couchbase.bucket + "` r" + "UNNEST r.schedule s " + "JOIN `" + config.couchbase.bucket + "` a ON KEYS r.airlineid " + "WHERE r.sourceairport = $1 AND r.destinationairport = $2 AND s.day = $3 ” "ORDER BY a.name"; var query = N1qlQuery.fromString(statement); db.query(query, [queryFrom, queryTo, leave], function(error, result) { if(error) { return callback(error, null); } callback(null, result); }); };
  • 44. ©2015 Couchbase Inc. 44 Node.js Sample Applications https://github.com/couchbaselabs/try-cb-nodejs https://github.com/couchbaselabs/restful-angularjs-nodejs
  • 45. ©2015 Couchbase Inc. 45 Couchbase N1QLTutorial http://query.pub.couchbase.com/tutorial/
  • 46. ©2015 Couchbase Inc. 46 Ottoman ODM
  • 47. ©2015 Couchbase Inc. 47 Ottoman Model var RecordModel = ottoman.model("Record", { firstname: {type: "string”}, lastname: {type: "string"}, email: {type: "string"}, created_at: {type: “Date”, default: Date.now} });
  • 48. ©2015 Couchbase Inc. 48 Ottoman Saving var myRecord = new RecordModel({ firstname: “Nic”, lastname: “Raboy”, email: “nic@couchbase.com” }); myRecord.save(function(error) { if(error) { // Error here } // Success here });
  • 49. ©2015 Couchbase Inc. 49 Ottoman Finding RecordModel.find({}, function(error, result) { if(error) { // Error here } // Array of results here });
  • 50. ©2015 Couchbase Inc. 50 Couchbase Mobile
  • 51. ©2015 Couchbase Inc. 51 Couchbase Lite Embedded NoSQL Database Sync Gateway Secure Synchronization Couchbase Server Cloud NoSQL Database Couchbase Mobile
  • 52. ©2015 Couchbase Inc. 52 Couchbase Lite Full Featured Lightweight Native Secure JSON
  • 53. ©2015 Couchbase Inc. 53 Sync Gateway Secure Synchronization Authentication Data Read Access Data Write Access
  • 54. ©2015 Couchbase Inc. 54 Couchbase Server Highly scalable High Performance Always on JSON
  • 55. ©2015 Couchbase Inc. 55 Couchbase Lite  NoSQL Mobile database  Runs in-process  Small footprint
  • 56. ©2015 Couchbase Inc. 56 var database = new Couchbase("nraboy-database"); var documentId = database.createDocument({ "firstname": "Nic", "lastname": "Raboy", "address": { "city": "San Francisco", "state": "CA", "country": "USA" } "twitter": "https://www.twitter.com/nraboy" });
  • 57. ©2015 Couchbase Inc. 57 Map Reduce Indexes • Building indexes in your native language • Results are persisted for fast querying • Just set breakpoints to debug
  • 58. ©2015 Couchbase Inc. 58 // Create an index database.createView("people", "1", function(document, emitter) { if(document.twitter) { emitter.emit(document._id, document); } }); // Now query it var rows = database.executeQuery("people"); for(var i = 0; i < rows.length; i++) { // print row[i] }
  • 59. ©2015 Couchbase Inc. 59 Change Notifications Change notifications • Listen for changes • Cuts down on a ton of cruft code • Data, queries, replications – even documents
  • 60. ©2015 Couchbase Inc. 60 database.addDatabaseChangeListener(function(changes) { for(var i = 0; i < changes.length; i++) { if(!changes[i].isConflict()) { console.log(changes[i].getDocumentId()); } } });
  • 61. ©2015 Couchbase Inc. 61 Sync Sync • Full multi-master replication • Ability to minimize battery drain • Change notifications and conflict detection
  • 62. ©2015 Couchbase Inc. 62 var push = database.createPushReplication("http://syncgateway"); var pull = database.createPullReplication("http://syncgateway"); push.setContinuous(true); pull.setContinuous(true); push.start(); pull.start();
  • 65. ©2015 Couchbase Inc. 65 What is Couchbase?
  • 66. ©2015 Couchbase Inc. 66 Where do you find us? • developer.couchbase.com • blog.couchbase.com • @couchbasedev or @couchbase • forums.couchbase.com • stackoverflow.com/questions/tagged/couchbase
  • 67. POWER UP and PARTY DOWN with Red Hat Mobile, Middleware and OpenShift. Wednesday evening 9PM – 12AM Pick up your invitation for the party that beats all parties at: Mobile, Middleware or OpenShift demo pods in the Red Hat Booth, Partner Pavilion

Notes de l'éditeur

  1. Start the animation