Microsoft Azure Cosmos DB Revealed
Total Page:16
File Type:pdf, Size:1020Kb
Microsoft Azure Cosmos DB Revealed A Multi-Modal Database Designed for the Cloud — Building globally distributed mission-critical applications — José Rolando Guay Paz Microsoft Azure Cosmos DB Revealed A Multi-Modal Database Designed for the Cloud José Rolando Guay Paz Microsoft Azure Cosmos DB Revealed José Rolando Guay Paz Beach Park, Illinois, USA ISBN-13 (pbk): 978-1-4842-3350-4 ISBN-13 (electronic): 978-1-4842-3351-1 https://doi.org/10.1007/978-1-4842-3351-1 Library of Congress Control Number: 2018930529 Copyright © 2018 by José Rolando Guay Paz This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Cover image designed by Freepik Managing Director: Welmoed Spahr Editorial Director: Todd Green Acquisitions Editor: Jonathan Gennick Development Editor: Laura Berendson Technical Reviewer: Warner Chaves Coordinating Editor: Jill Balzano Copy Editor: Mary Behr Compositor: SPi Global Indexer: SPi Global Artist: SPi Global Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book's product page, located at www.apress.com/9781484233504. For more detailed information, please visit www.apress.com/source-code. Printed on acid-free paper To the Lord, Jesus Christ To my wife, Karina, and my daughters, Sara and Samantha Table of Contents About the Author ���������������������������������������������������������������������������������xi About the Technical Reviewer �����������������������������������������������������������xiii Acknowledgments ������������������������������������������������������������������������������xv Chapter 1: Introduction to Azure Cosmos DB ���������������������������������������1 What Is Azure Cosmos DB? �����������������������������������������������������������������������������������2 Major Features ������������������������������������������������������������������������������������������������������2 Turnkey Global Distribution �����������������������������������������������������������������������������2 Multiple Data Models and APIs ������������������������������������������������������������������������3 Elastically Scale Throughput and Storage on Demand ������������������������������������3 High Availability and Response Time ���������������������������������������������������������������4 Five Consistency Models ���������������������������������������������������������������������������������4 Setting Up the Development Environment ������������������������������������������������������������4 Installing Microsoft Visual Studio ��������������������������������������������������������������������4 Installing the Azure Cosmos DB Emulator �����������������������������������������������������12 Creating a Microsoft Azure Account and Subscription ����������������������������������������15 Provisioning an Azure Cosmos DB Database ������������������������������������������������������21 Summary ������������������������������������������������������������������������������������������������������������23 v TABLE OF CONtENtS Chapter 2: Learning Azure Cosmos DB Concepts �������������������������������25 Understanding Global Distribution ����������������������������������������������������������������������25 Introducing Write and Read Regions �������������������������������������������������������������27 Understanding the Consistency Models ��������������������������������������������������������������28 Scope of Consistency ������������������������������������������������������������������������������������29 Strong Consistency Model �����������������������������������������������������������������������������30 Eventual Consistency Model ��������������������������������������������������������������������������31 Bounded Staleness Consistency Model ���������������������������������������������������������32 Session Consistency Model ���������������������������������������������������������������������������33 Consistent Prefix Consistency Model ������������������������������������������������������������33 Consistency for Queries ���������������������������������������������������������������������������������34 Understanding Partitioning ���������������������������������������������������������������������������������34 What Are Containers? ������������������������������������������������������������������������������������34 How Does Partitioning Work? ������������������������������������������������������������������������36 Designing for Partitioning ������������������������������������������������������������������������������37 Understanding Throughput ���������������������������������������������������������������������������������38 Specifying Request Unit Capacity ������������������������������������������������������������������38 Estimating Throughput ����������������������������������������������������������������������������������39 Implementing Security ����������������������������������������������������������������������������������������41 Encryption at Rest �����������������������������������������������������������������������������������������41 Firewall Support ��������������������������������������������������������������������������������������������42 Securing Access to Data ��������������������������������������������������������������������������������44 Supported APIs ����������������������������������������������������������������������������������������������������46 Azure Cosmos DB REST API ���������������������������������������������������������������������������46 DocumentDB API ��������������������������������������������������������������������������������������������49 MongoDB API �������������������������������������������������������������������������������������������������51 vi TABLE OF CONtENtS Graph API �������������������������������������������������������������������������������������������������������53 Table API ��������������������������������������������������������������������������������������������������������57 Summary ������������������������������������������������������������������������������������������������������������59 Chapter 3: Working with an Azure Cosmos DB Database �������������������61 Creating Your Database ���������������������������������������������������������������������������������������62 Defining the Document ���������������������������������������������������������������������������������������69 Managing Documents �����������������������������������������������������������������������������������������70 Using the Azure Cosmos DB Emulator to Manage Documents ���������������������������71 Managing Documents with an Application ���������������������������������������������������������77 Creating the ASP.NET Web Application ����������������������������������������������������������77 Creating a Class for the Document ����������������������������������������������������������������85 Creating the Data Layer ���������������������������������������������������������������������������������89 Using the Data Layer in the Controller and Completing the Application ������103 Summary ����������������������������������������������������������������������������������������������������������122 Chapter 4: Importing Data into an Azure Cosmos DB Database �������125 Introducing the DocumentDB Data Migration Tool ��������������������������������������������125 Software Requirements �������������������������������������������������������������������������������126