Web Development with Mongodb and Node Third Edition

Total Page:16

File Type:pdf, Size:1020Kb

Web Development with Mongodb and Node Third Edition Web Development with MongoDB and Node Third Edition Build fast web applications for handling any kind of data Bruno Joseph D'mello Mithun Satheesh Jason Krol BIRMINGHAM - MUMBAI Web Development with MongoDB and Node Third Edition Copyright © 2017 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: September 2014 Second edition: October 2015 Third edition: September 2017 Production reference: 1260917 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78839-508-3 www.packtpub.com Credits Authors Copy Editor Bruno Joseph D'mello Charlotte Carneiro Mithun Satheesh Jason Krol Reviewer Project Coordinator Alex Bachuk Sheejal Shah Commissioning Editor Proofreader Smith Thakkar Safis Editing Acquisition Editor Indexer Reshma Raman Rekha Nair Content Development Editor Graphics Jason Pereira Jason Monteiro Technical Editor Production Coordinator Surabhi Kulkarni Melwyn D'sa About the Authors Bruno Joseph D'mello works at Yapsody as a software engineer. He has possesses almost 5 years of experience in web application development, serving industries such as entertainment, social media, enterprise, and IT services. He is a JavaScript enthusiast and dedicatedly worked on it for the past 4 years. Apart from rare commits, he believes in contributing to open source by actually mentoring new technologies to beginners and involving them in open source communities. Bruno follows Kaizen and enjoys the freedom of architecting new things on the web. He also contributed his knowledge by authoring books such as Web Development in Node.js and Mongodb second edition, What You Need to Know About Node.js (Free ebook), and by being a reviewer. You can connect with Bruno at: [email protected] "Thanks to my family for patience and encouragement, especially Erina..." Mithun Satheesh is an open source enthusiast and a web developer who resides in India. He has more than 5 years of experience in web development and specializes in JavaScript, Ruby, PHP, and other frontend engineering technologies. He is the author of a couple of libraries on Node.js, which are available open source via npm. One of these, called node-rules, is a forward-chaining rule engine implementation written initially to handle transaction risks on bookmyshow, one of his former employers. Node-rules have a considerable user following both on npm and GitHub. Apart from this, he has also served as an individual contributor in many open source projects on GitHub. He is a regular on programming sites, such as Stack Overflow, and loves contributing to the open source world. Apart from programming, he is also interested in experimenting with various cloud platform solutions. He has a number of applications listed in the developer spotlight of Platform- as-a-Service providers, such as RedHat's OpenShift. Jason Krol is a passionate web developer with over 15 years of professional experience creating highly interactive web applications using the latest in both client and server technologies. Over the past few years, Jason has been focusing on developing Single-Page Applications using JavaScript in the full stack with Node.js, MongoDB, and Backbone.js. After co-owning and running a successful web development agency for a number of years, Jason recently joined AWeber Communications, an e-mail marketing service provider in the suburbs of Philadelphia. About the Reviewer Alex Bachuk is a web developer with over 9 years of experience and specializes in custom JavaScript web applications. Currently, Alex leads the Rental Cars Web UX team at priceline.com and runs JavaScript and React workshops in NYC area along with the EcmaStack.com team. Alex organizes and talks at JavaScript, Meteor.js, and GraphQL meetups in the New York City area. In his free time, he likes to spend time with his family and also travel the world. www.PacktPub.com For support files and downloads related to your book, please visit www.PacktPub.com. Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com ​and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at [email protected] for more details. At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks. https://www.packtpub.com/mapt Get the most in-demand software skills with Mapt. Mapt gives you full access to all Packt books and video courses, as well as industry-leading tools to help you plan your personal development and advance your career. Why subscribe? Fully searchable across every book published by Packt Copy and paste, print, and bookmark content On demand and accessible via a web browser Customer Feedback Thanks for purchasing this Packt book. At Packt, quality is at the heart of our editorial process. To help us improve, please leave us an honest review on this book's Amazon page at https://www.amazon.com/dp/1788395085. If you'd like to join our team of regular reviewers, you can e-mail us at [email protected]. We award our regular reviewers with free eBooks and videos in exchange for their valuable feedback. Help us be relentless in improving our products! Table of Contents Preface What this book covers What you need for this book Who this book is for Conventions Reader feedback Customer support Downloading the example code Errata Piracy Questions 1. Welcome to JavaScript in the Full Stack A short introduction to Node.js The advantage that the V8 engine brings in Node.js is single-threaded! Non-blocking asynchronous execution npm - the Node Package Manager Sharing and reusing JavaScript Not just for building web servers!Real- time web application with Socket.io Networking and file IO Microservices Internet of things (IoT) A simple server with Node.js When to use Node.js The NoSQL movement A short introduction to MongoDB JSON-friendly database Schema-less design Various performance facets Node.js and MongoDB in the wild What to expect from this book Summary 2. Getting Up and Running Installing Node.js Mac OS X Windows Linux Testing that Node.js is installed properly Online documentation Installing MongoDB Mac OS X installation instructions Windows 7/Windows 8 installation instructions Linux installation instructions Confirming successful MongoDB installation Bookmarking the online documentation Writing your first app Creating the sample application Getting the dependent modules in place Adding the application code Understanding the code Launching the sample app Checking the actual database Summary 3. Node and MongoDB Basics A JavaScript primer Introducing es6 Syntax basics Understanding the scope of variables Data types Operators and flows Understanding objects Understanding arrays Understanding functions Anonymous functions and callbacks JSON The basics of Node.js Node.js architecture Event-driven Asynchronous execution The module system The Node.js core HTTP Net Streams Installing modules using npm The basics of MongoDB The Mongo shell Inserting data Querying Updating data Deleting data Additional resources Summary 4. Introducing Express Web application frameworks What is Express.js? Building a complete web application Designing the web application Organizing the files Creating the application's entry point Booting up the application Middlewares Creating custom middleware Order of middlewares The configure module Activating the configure module Routers and controllers Handlebars as View engines Summary 5. Templating with Handlebars Templating engines Server-side and client-side templating Client-side templating Server-side templating The basics of Handlebars Binding an object to the template Embedding presentation logic Views Layouts Partial views Handlebars helpers Global helpers View-specific helpers Rendering the views Summary 6. Controllers and View Models Controllers View models Updating the home controller Updating the image controller Displaying an image Uploading an image Helpers for reusable code The sidebar module The stats module The images module The comments module Testing the sidebar implementation Iterating on the UI Summary 7. Persisting Data with MongoDB Using MongoDB with Node.js Connecting to MongoDB Inserting a document Retrieving a document Introducing Mongoose Schemas Models Built-in validation Static methods Virtual properties Context of method (this) Connecting with Mongoose Defining the schemas and models The models index file Adding CRUD to the controllers The home controller The image controller Index - retrieving an image model
Recommended publications
  • Marketing Cloud Published: August 12, 2021
    Marketing Cloud Published: August 12, 2021 The following are notices required by licensors related to distributed components (mobile applications, desktop applications, or other offline components) applicable to the services branded as ExactTarget or Salesforce Marketing Cloud, but excluding those services currently branded as “Radian6,” “Buddy Media,” “Social.com,” “Social Studio,”“iGoDigital,” “Predictive Intelligence,” “Predictive Email,” “Predictive Web,” “Web & Mobile Analytics,” “Web Personalization,” or successor branding, (the “ET Services”), which are provided by salesforce.com, inc. or its affiliate ExactTarget, Inc. (“salesforce.com”): @formatjs/intl-pluralrules Copyright (c) 2019 FormatJS Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    [Show full text]
  • Niklas Appelmann
    Niklas Appelmann Full-Stack Web Developer [email protected] https://niklasappelmann.de +49 151 6469 0684 Nationality German Education Bachelor of Science Computer Science Certificates Company Data Protection Officer IHK / Betrieblicher Datenschutzbeauftragter IHK (June 2018) Languages English (fluent) German (native) Skills Project Management Agile, Scrum, Kanban Frameworks and Tools AWS, Docker, Selenium, Puppeteer, MongoDB Programming Languages / Frameworks React, Meteor, Node.js, JavaScript, Python, Clojure, ClojureScript, CoffeeScript, TypeScript Relevant 3.5 years Experience Project examples since 01/2020 Fullstack Development, Freelance Various engagements in web development. • Automation of lead generation and business processes using Python, Selenium and Puppeteer. • Frontend development using ClojureScript and Reagent • Backend development using Node.js, Clojure and MongoDB • DevOps and Backend development at the government hackathon #wirvsvirus (2020) • AWS consulting (S3, Lambda, EC2, ECS, Route53, SQS, SES, Lightsail, DynamoDB, CloudFront) • Serverless fullstack architecture using AWS Team members: Other freelancers and remote contributors Technologies / Python, Selenium, Puppeteer, ClojureScript, Clojure, reagent, MongoDB, Tools Node.js, Meteor 03/2018 - Fullstack-Developer, blink.it GmbH & Co. KG 12/2019 Development of a progressive Meteor web application in a fast paced startup environment. • Built frontend functionality with React (JavaScript, CoffeeScript), Blaze, HTML5, SCSS/CSS • Built backend functionality with Node.js, Python and MongoDB • Worked on performance optimiziation on a large scale multi-tenant reactive application • Developed tools for data migration and automation of internal processes with Python • Developed an internal solution to migrate Pipedrive leads to Hubspot for a large set of leads and past deal flows Team members: 10 Technologies / React, AWS, JavaScript, CoffeeScript, Python, MongoDB, Node.js, Blaze, Tools HTML5, SCSS/CSS, Selenium, SCORM 10/2016 - Software Engineer (working student), blink.it GmbH & Co.
    [Show full text]
  • Open Source Licenses Visionize Lab Suite the Software of Visionize Lab Suite Contains Open Source Licenses Included in This Document
    Open Source Licenses VisioNize Lab Suite The software of VisioNize Lab Suite contains open source licenses included in this document. Package name License Website/Repository Publisher/Author @angular-devkit/[email protected] MIT https://github.com/angular/angular-cli Angular Authors @angular-devkit/[email protected] MIT https://github.com/angular/angular-cli Angular Authors @angular-devkit/build-optimiz- MIT https://github.com/angular/angular-cli Angular Authors [email protected] @angular-devkit/build-web- MIT https://github.com/angular/angular-cli Angular Authors [email protected] @angular-devkit/[email protected] MIT https://github.com/angular/angular-cli Angular Authors @angular-devkit/[email protected] MIT https://github.com/angular/angular-cli Angular Authors @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular-cli Angular Authors @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular angular @angular/platform-browser-dynam- MIT https://github.com/angular/angular angular [email protected] @angular/[email protected] MIT https://github.com/angular/angular angular @angular/[email protected] MIT https://github.com/angular/angular angular
    [Show full text]
  • E-Commerce Application Using MERN Stack
    Quang Nhat Mai E-commerce Application using MERN stack Metropolia University of Applied Sciences Bachelor of Engineering Information Technology Bachelor’s Thesis 30 August 2018 Abstract Author Quang Nhat Mai Title E-commerce Application using MERN stack Number of Pages 36 pages + x appendices Date 30 August 2020 Degree Bachelor of Engineering Degree Programme Information Technology Professional Major Software Engineering Instructors Janne Salonen This thesis is about studying the basic components of MERN Stack technology such as: MongoDB, ExpressJS framework, ReactJS library, and NodeJS platform. Discussing the basic functions of an e-commerce web application such as sign up, sign in, showing dash- boards, displaying store categories and products Using MERN Stack technology in conjunc- tion with Braintree to build a web application to search for product stores and payment gate- way. Develop administrative functions for the website such as: user management, store management, statistics, and reports. Since then, this topic is declared to research and create an online product search website so that small grocery stores and groceries can post and manage their products right on the website. website system and branding. At the same time, the store can link to its own website (if any). For customers, they can quickly search for urgent products from their nearby stores. Based on the search results, customers can directly contact the store owner to discuss more about the product they are looking for. Keywords Contents List of Abbreviations 1 Introduction
    [Show full text]
  • Fat-Free Framework 1.4.1 Quick Reference Akismet Auth Data
    Akismet Data An API wrapper that you can use during input validation to Input data handlers and validators. determine if a blog comment, trackback, or pingback contains spam. This plug-in requires a key from akismet.com. input( string fields, mixed handler, [ string tags ],[ integer filter ], [ array options ] ); check( string text, string author, string email, string url ); Assign handler to HTML form fields for validation and Submit content (usually a blog comment) to akismet.com. manipulation. handler may be an anonymous or named function, Returns TRUE if the content is determined as spam. a single or daisy-chained string of named functions similar to the route() method. This command passes two arguments to handler ham( string text, string author, string email, string url ); function: value and field name. HTML and PHP tags are stripped Report content as a false positive. If the argument tags is not specified. PHP validation/sanitize filters, filter flags, and options may be passed as additional spam( string text, string author, string email, string url ); Quick Reference Quick Reference arguments. See the PHP filter_var() function for more details on Report content that was not marked as spam. filter types. verify( string key ); scrub( mixed value, [ string tags ] ); Secure approval from akismet.com to use the public API for Remove all HTML tags to protect against XSS/SQL injection spam checking. A valid key is required to use the API. Returns attacks. tags , if specified, will be preserved. If value is an array, TRUE if authentication succeeds. 1.4.1 1.4.1 HTML tags in all string elements will be scrubbed.
    [Show full text]
  • Backbone Tutorials
    Backbone Tutorials Beginner, Intermediate and Advanced ©2012 Thomas Davis This version was published on 2012-10-16 This is a Leanpub book, for sale at: http://leanpub.com/backbonetutorials Leanpub helps authors to self-publish in-progress ebooks. We call this idea Lean Publishing. To learn more about Lean Publishing, go to: http://leanpub.com/manifesto To learn more about Leanpub, go to: http://leanpub.com Tweet This Book! Please help Thomas Davis by spreading the word about this book on Twitter! The suggested hashtag for this book is #backbonetutorials. Find out what other people are saying about the book by clicking on this link to search for this hashtag on Twitter: https://twitter.com/search/#backbonetutorials Contents Why do you need Backbone.js? i Why single page applications are the future ............................ i So how does Backbone.js help? ................................... i Other frameworks .......................................... i Contributors .......................................... i What is a view? ii The “el” property ........................................... ii Loading a template .......................................... iii Listening for events .......................................... iii Tips and Tricks ............................................ iv Relevant Links ......................................... v Contributors .......................................... v What is a model? vi Setting attributes ........................................... vi Getting attributes ..........................................
    [Show full text]
  • JSON As an XML Alternative
    JSON The Fat-Free Alternative to XML { “Lecture”: 27, “Course”: “CSC375”, “Days”: ”TTh", “Instructor”: “Haidar Harmanani” } JSON as an XML Alternative • JSON is a light-weight alternative to XML for data- interchange • JSON = JavaScript Object Notation – It’s really language independent – most programming languages can easily read it and instantiate objects or some other data structure • Defined in RFC 4627 • Started gaining tracking ~2006 and now widely used • http://json.org/ has more information JSON as an XML Alternative • What is JSON? – JSON is language independent – JSON is "self-describing" and easy to understand – *JSON uses JavaScript syntax for describing data objects, but JSON is still language and platform independent. JSON parsers and JSON libraries exists for many different programming languages. • JSON -Evaluates to JavaScript Objects – The JSON text format is syntactically identical to the code for creating JavaScript objects. – Because of this similarity, instead of using a parser, a JavaScript program can use the built-in eval() function and execute JSON data to produce native JavaScript objects. Example {"firstName": "John", l This is a JSON object "lastName" : "Smith", "age" : 25, with five key-value pairs "address" : l Objects are wrapped by {"streetAdr” : "21 2nd Street", curly braces "city" : "New York", "state" : "NY", l There are no object IDs ”zip" : "10021"}, l Keys are strings "phoneNumber": l Values are numbers, [{"type" : "home", "number": "212 555-1234"}, strings, objects or {"type" : "fax", arrays "number” : "646 555-4567"}] l Aarrays are wrapped by } square brackets The BNF is simple When to use JSON? • SOAP is a protocol specification for exchanging structured information in the implementation of Web Services.
    [Show full text]
  • Pronghorn-Licenses-V2.Pdf
    Pronghorn Application Server is @copyright Itential, LLC 2015. Pronghorn uses open source software. Pronghorn has direct dependencies on the following software. Name License URI ---------------------------------------------------------------------------------------------------- angular-animate MIT https://github.com/angular/angular.js angular-aria MIT https://github.com/angular/angular.js angular-material MIT https://github.com/angular/material angular MIT https://github.com/angular/angular.js body-parser MIT https://github.com/expressjs/body-parser bootstrap MIT https://github.com/twbs/bootstrap btoa Apache 2.0 https://github.com/coolaj86/node-browser-compat caller-id MIT https://github.com/pixelsandbytes/caller-id continuation-local-storage BSD https://github.com/othiym23/node-continuation-local-storage cookie-parser MIT https://github.com/expressjs/cookie-parser diff BSD https://github.com/kpdecker/jsdiff express-generator MIT https://github.com/expressjs/generator express-session MIT https://github.com/expressjs/session express MIT https://github.com/strongloop/express forever MIT https://github.com/nodejitsu/forever jade MIT https://github.com/visionmedia/jade jquery-ui MIT https://github.com/jquery/jquery-ui jquery MIT https://github.com/jquery/jquery jsnlog-nodejs Apache 2.0 https://github.com/mperdeck/jsnlog-nodejs jsnlog Apache 2.0 https://github.com/mperdeck/jsnlog.js lodash MIT https://github.com/lodash/lodash material-design-icons CC-BY-4.0 https://github.com/google/material-design-icons moment MIT https://github.com/moment/moment
    [Show full text]
  • Certificate Course in “MEAN Stack Web Development”
    Certificate Course in “MEAN Stack Web Development” MEAN Stack Overview: MEAN is an acronym for MongoDB, ExpressJS, Angular and Node.js. MEAN Stack web development is a structured learning path recommended by leading industry experts and ensures your mastery of full MEAN stack development. MongoDB is a schemaless NoSQL database system. MongoDB saves data in binary JSON format which makes it easier to pass data between client and server. ExpressJS is a lightweight framework used to build web applications in Node. It provides a number of robust features for building single and multi page web application. ExpressJS is inspired by the popular Ruby framework, Sinatra. Angular is a TypeScript based open-source front-end web application platform led by the Angular Team at Google. It gives an extraordinarily expressive, readable and fast way to develop rich front ends for websites. Node.js is a server side JavaScript execution environment. It is a platform built on Google Chrome’s V8 JavaScript runtime. It helps in building highly scalable and concurrent applications rapidly. 1 Course Objective: The overall aim of the course is to enable participants to confidently build different types of application using the MEAN stack. The course is divided into four modules, MongoDB, ExpressJS, Angular, and Node.js. Each module focuses on a different goal. The four modules work together building a full application, with an overall outcome of showing how to architect and build complete MEAN applications. Course Details: Title Certificate Course in MEAN Stack Web Development No. of Credits 5 (Total No. of Clock Hours = 75) Duration 13 Weeks Actual Contact Hours 60 Classroom Training (with hands-on) Project Based Learning Hours 15 Fee Structure 15000.00 / Participant Open for all Students / Individuals/ Professionals with Eligibility basic knowledge of HTML5, CSS3 and JavaScript Intake 30 Participants Outcome: By the end of the course, participants will be able: To set up a web-server using Node.js and ExpressJS, to listen for request and return response.
    [Show full text]
  • Building Restful Web Apis with Node.Js, Express, Mongodb and Typescript Documentation Release 1.0.1
    Building RESTful Web APIs with Node.js, Express, MongoDB and TypeScript Documentation Release 1.0.1 Dale Nguyen May 08, 2021 Contents: 1 Introductions 3 1.1 Who is this book for?..........................................3 1.2 How to read this book?..........................................3 2 Setting Up Project 5 2.1 Before we get started...........................................5 2.2 MongoDB preparation..........................................5 2.3 Step 1: Initiate a Node project......................................5 2.4 Step 2: Install all the dependencies...................................7 2.5 Step 3: Configure the TypeScript configuration file (tsconfig.json)...................7 2.6 Step 4: edit the running scripts in package.json.............................7 2.7 Step 5: getting started with the base configuration...........................8 3 Implement Routing and CRUD9 3.1 Step 1: Create TS file for routing....................................9 3.2 Step 2: Building CRUD for the Web APIs................................ 10 4 Using Controller and Model 13 4.1 Create Model for your data........................................ 13 4.2 Create your first Controller........................................ 14 5 Connect Web APIs to MongoDB 17 5.1 1. Create your first contact........................................ 18 5.2 2. Get all contacts............................................ 19 5.3 3. Get contact by Id........................................... 19 5.4 4. Update an existing contact...................................... 20 5.5 5. Delete a contact............................................ 20 6 Security for our Web APIs 23 6.1 Method 1: The first and foremost is that you should always use HTTPS over HTTP.......... 23 6.2 Method 2: Using secret key for authentication............................. 24 6.3 Method 3: Secure your MongoDB.................................... 25 7 Indices and tables 29 i ii Building RESTful Web APIs with Node.js, Express, MongoDB and TypeScript Documentation, Release 1.0.1 This is a simple API that saves contact information of people.
    [Show full text]
  • Performance Benchmark Postgresql / Mongodb Performance Benchmark Postgresql / Mongodb
    PERFORMANCE BENCHMARK POSTGRESQL / MONGODB // CONTENTS // ABOUT THIS BENCHMARK 3 Introduction 3 OnGres Ethics Policy 4 Authors 4 // EXECUTIVE SUMMARY. BENCHMARKS KEY FINDINGS 5 Transactions benchmark 5 OLTP Benchmark 6 OLAP Benchmark 6 // METHODOLOGY AND BENCHMARKS 7 Introduction and objectives 7 Benchmarks performed 7 About the technologies involved 8 Automated infrastructure 9 // TRANSACTIONS BENCHMARK 12 Benchmark description 12 MongoDB transaction limitations 14 Discussion on transaction isolation levels 14 Benchmark results 17 // OLTP BENCHMARK 25 Benchmark description 25 Initial considerations 26 Benchmark results 29 // OLAP BENCHMARK 38 Benchmark description 38 Benchmark results 45 2/46 // ABOUT THIS BENCHMARK Introduction Benchmarking is hard. Benchmarking databases, harder. Benchmarking databases that follow different approaches (relational vs document) is even harder. There are many reasons why this is true, widely discussed in the industry. Notwithstanding all these difficulties, the market demands these kinds of benchmarks. Despite the different data models that MongoDB and PostgreSQL expose, many developers and organizations face a challenge when choosing between the platforms. And while they can be compared on many fronts, performance is undoubtedly one of the main differentiators — arguably the main one. How then do you leverage an informative benchmark so that decisions can be made about the choice of a given technology, while at the same time presenting a fair arena in which the technologies compete in an apples-to-apples scenario? To fulfill these goals, this benchmark has been executed based on the following criteria: • Transparency and reproducibility. The framework that has been programmed and used to run the benchmarks is fully automated and is published as open source.
    [Show full text]
  • Migrating Off of Mongodb to Postgresql
    Migrating off of MongoDB to PostgreSQL Álvaro Hernández Tortosa <[email protected]> PgConf.Ru 2017 PGconf Russia 2017 Who I am CEO, 8Kdata.com • What we do @8Kdata: ALVARO HERNANDEZ ✓Creators of ToroDB.com, NoSQL & SQL database ✓Database R&D, product development ✓Training and consulting in PostgreSQL ✓PostgreSQL Support Twitter: @ahachete Linkedin: Founder, President Spanish Postgres User Group http://es.linkedin.com/in/alvarohernandeztortosa/ postgrespana.es ~ 750 members PGconf Russia 2017 Agenda 1.MongoDB limitations 2.Pain points when migrating from NoSQL to SQL ✓ Stripe's MoSQL ✓ EDB Mongo FDW ✓ Quasar FDW ✓ Mongo BI Connector, yet another PG FDW ;) ✓ ETL tool ✓ ToroDB Stampede 3. Benchmarks PGconf Russia 2017 MongoDB limitations PGconf Russia 2017 No ACID is bitter • Atomic transactions only work within the same document CART ORDERS [ [ ... ... { { user: 567, user: 567, products: [ orders: [ { ... { id: 47, orderId: units: 7, 24658, }, ̣This operation is not atomic!! products: [ { … id: 318, ] units: 2, } }, … … ] ] } } ... ... ] ] PGconf Russia 2017 MongoDB does *not* have consistent reads https://blog.meteor.com/mongodb-queries-dont-always-return-all-matching-documents-654b6594a827#.fplxodagr PGconf Russia 2017 BI query performance issues ̣ MongoDB aggregate query pattern PGconf Russia 2017 BI query performance issues ̣ PostgreSQL aggregate query pattern PGconf Russia 2017 BI query performance issues What if we use a columnar store? PGconf Russia 2017 Taking it to the extreme • We have developed a very difficult video game •We store
    [Show full text]