The Practitioner’s Guide To Graph Data Applying Graph Thinking And Graph Technologies To Solve Complex Problems (Denise Koessler Gosnell, Matthias Broecheler) (Z-Library)

Author: Denise Koessler Gosnell, Matthias Broecheler

科学

Graph data closes the gap between the way humans and computers view the world. While computers rely on static rows and columns of data, people navigate and reason about life through relationships. This practical guide demonstrates how graph data brings these two approaches together. By working with concepts from graph theory, database schema, distributed systems, and data analysis, you’ll arrive at a unique intersection known as graph thinking. Authors Denise Koessler Gosnell and Matthias Broecheler show data engineers, data scientists, and data analysts how to solve complex problems with graph databases. You’ll explore templates for building with graph technology, along with examples that demonstrate how teams think about graph data within an application. • Build an example application architecture with relational and graph technologies • Use graph technology to build a Customer 360 application, the most popular graph data pattern today • Dive into hierarchical data and troubleshoot a new paradigm that comes from working with graph data • Find paths in graph data and learn why your trust in different paths motivates and informs your preferences • Use collaborative filtering to design a Netflix-inspired recommendation system

📄 File Format: PDF
💾 File Size: 25.4 MB
17
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
Denise Koessler Gosnell & Matthias Broecheler The Practitioner’s Guide to Graph Data Applying Graph Thinking and Graph Technologies to Solve Complex Problems
📄 Page 2
(This page has no text content)
📄 Page 3
Denise Koessler Gosnell and Matthias Broecheler The Practitioner’s Guide to Graph Data Boston Farnham Sebastopol TokyoBeijing
📄 Page 4
978-1-492-04407-9 [LSI] The Practitioner’s Guide to Graph Data by Denise Koessler Gosnell and Matthias Broecheler Copyright © 2020 Denise Gosnell and Matthias Broecheler. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://oreilly.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or corporate@oreilly.com. Acquisitions Editor: Jonathan Hassell Developmental Editor: Jeff Bleiel Production Editor: Nan Barber Copyeditor: Arthur Johnson Proofreader: Josh Olejarz Indexer: Ellen Troutman-Zaig Interior Designer: David Futato Cover Designer: Karen Montgomery Illustrator: Rebecca Demarest April 2020: First Edition Revision History for the First Edition 2020-03-26: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781492044079 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. The Practitioner’s Guide to Graph Data, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc. The views expressed in this work are those of the authors and do not represent the publisher’s views. While the publisher and the authors have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the publisher and the authors disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work contains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights. This work is part of a collaboration between O’Reilly and DataStax. See our statement of editorial inde‐ pendence.
📄 Page 5
Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 1. Graph Thinking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Why Now? Putting Database Technologies in Context 2 1960s–1980s: Hierarchical Data 3 1980s–2000s: Entity-Relationship 4 2000s–2020s: NoSQL 5 2020s–?: Graph 7 What Is Graph Thinking? 9 Complex Problems and Complex Systems 10 Complex Problems in Business 10 Making Technology Decisions to Solve Complex Problems 12 So You Have Graph Data. What’s Next? 15 Seeing the Bigger Picture 19 Getting Started on Your Journey with Graph Thinking 20 2. Evolving from Relational to Graph Thinking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Chapter Preview: Translating Relational Concepts to Graph Terminology 21 Relational Versus Graph: What’s the Difference? 22 Data for Our Running Example 23 Relational Data Modeling 25 Entities and Attributes 26 Building Up to an ERD 27 Concepts in Graph Data 28 Fundamental Elements of a Graph 28 Adjacency 29 Neighborhoods 30 Distance 30 iii
📄 Page 6
Degree 31 The Graph Schema Language 33 Vertex Labels and Edge Labels 33 Properties 34 Edge Direction 35 Self-Referencing Edge Labels 38 Multiplicity of Your Graph 38 Full Example Graph Model 41 Relational Versus Graph: Decisions to Consider 43 Data Modeling 43 Understanding Graph Data 43 Mixing Database Design with Application Purpose 44 Summary 44 3. Getting Started: A Simple Customer 360. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Chapter Preview: Relational Versus Graph 48 The Foundational Use Case for Graph Data: C360 48 Why Do Businesses Care About C360? 50 Implementing a C360 Application in a Relational System 51 Data Models 51 Relational Implementation 54 Example C360 Queries 58 Implementing a C360 Application in a Graph System 61 Data Models 62 Graph Implementation 63 Example C360 Queries 70 Relational Versus Graph: How to Choose? 75 Relational Versus Graph: Data Modeling 75 Relational Versus Graph: Representing Relationships 76 Relational Versus Graph: Query Languages 76 Relational Versus Graph: Main Points 77 Summary 78 Why Not Relational? 79 Making a Technology Choice for Your C360 Application 79 4. Exploring Neighborhoods in Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Chapter Preview: Building a More Realistic Customer 360 81 Graph Data Modeling 101 82 Should This Be a Vertex or an Edge? 83 Lost Yet? Let Us Walk You Through Direction 86 A Graph Has No Name: Common Mistakes in Naming 89 Our Full Development Graph Model 91 iv | Table of Contents
📄 Page 7
Before We Start Building 93 Our Thoughts on the Importance of Data, Queries, and the End User 94 Implementation Details for Exploring Neighborhoods in Development 95 Generating More Data for Our Expanded Example 97 Basic Gremlin Navigation 97 Advanced Gremlin: Shaping Your Query Results 106 Shaping Query Results with the project(), fold(), and unfold() Steps 107 Removing Data from the Results with the where(neq()) Pattern 110 Planning for Robust Result Payloads with the coalesce() Step 112 Moving from Development into Production 115 5. Exploring Neighborhoods in Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Chapter Preview: Understanding Distributed Graph Data in Apache Cassandra 119 Working with Graph Data in Apache Cassandra 120 The Most Important Topic to Understand About Data Modeling: Primary Keys 120 Partition Keys and Data Locality in a Distributed Environment 121 Understanding Edges, Part 1: Edges in Adjacency Lists 126 Understanding Edges, Part 2: Clustering Columns 128 Understanding Edges, Part 3: Materialized Views for Traversals 132 Graph Data Modeling 201 136 Finding Indexes with an Intelligent Index Recommendation System 140 Production Implementation Details 142 Materialized Views and Adding Time onto Edges 142 Our Final C360 Production Schema 144 Bulk Loading Graph Data 146 Updating Our Gremlin Queries to Use Time on Edges 149 Moving On to More Complex, Distributed Graph Problems 152 Our First 10 Tips to Get from Development to Production 152 6. Using Trees in Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Chapter Preview: Navigating Trees, Hierarchical Data, and Cycles 155 Seeing Hierarchies and Nested Data: Three Examples 156 Hierarchical Data in a Bill of Materials 156 Hierarchical Data in Version Control Systems 157 Hierarchical Data in Self-Organizing Networks 157 Why Graph Technology for Hierarchical Data? 158 Finding Your Way Through a Forest of Terminology 159 Trees, Roots, and Leaves 159 Depth in Walks, Paths, and Cycles 160 Understanding Hierarchies with Our Sensor Data 162 Table of Contents | v
📄 Page 8
Understand the Data 163 Conceptual Model Using the GSL Notation 170 Implement Schema 171 Before We Build Our Queries 174 Querying from Leaves to Roots in Development 174 Where Has This Sensor Sent Information To? 175 From This Sensor, What Was Its Path to Any Tower? 178 From Bottom Up to Top Down 184 Querying from Roots to Leaves in Development 184 Setup Query: Which Tower Has the Most Sensor Connections So That We Could Explore It for Our Example? 185 Which Sensors Have Connected Directly to Georgetown? 186 Find All Sensors That Connected to Georgetown 187 Depth Limiting in Recursion 189 Going Back in Time 190 7. Using Trees in Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Chapter Preview: Understanding Branching Factor, Depth, and Time on Edges 191 Understanding Time in the Sensor Data 192 Final Thoughts on Time Series Data in Graphs 200 Understanding Branching Factor in Our Example 200 What Is Branching Factor? 201 How Do We Get Around Branching Factor? 202 Production Schema for Our Sensor Data 203 Querying from Leaves to Roots in Production 205 Where Has This Sensor Sent Information to, and at What Time? 205 From This Sensor, Find All Trees up to a Tower by Time 206 From This Sensor, Find a Valid Tree 209 Advanced Gremlin: Understanding the where().by() Pattern 211 Querying from Roots to Leaves in Production 213 Which Sensors Have Connected to Georgetown Directly, by Time? 214 What Valid Paths Can We Find from Georgetown Down to All Sensors? 215 Applying Your Queries to Tower Failure Scenarios 218 Applying the Final Results of Our Complex Problem 223 Seeing the Forest for the Trees 223 8. Finding Paths in Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Chapter Preview: Quantifying Trust in Networks 226 Thinking About Trust: Three Examples 226 How Much Do You Trust That Open Invitation? 226 How Defensible Is an Investigator’s Story? 227 vi | Table of Contents
📄 Page 9
How Do Companies Model Package Delivery? 228 Fundamental Concepts About Paths 229 Shortest Paths 230 Depth-First Search and Breadth-First Search 232 Learning to See Application Features as Different Path Problems 233 Finding Paths in a Trust Network 234 Source Data 234 A Brief Primer on Bitcoin Terminology 236 Creating Our Development Schema 236 Loading Data 237 Exploring Communities of Trust 238 Understanding Traversals with Our Bitcoin Trust Network 240 Which Addresses Are in the First Neighborhood? 240 Which Addresses Are in the Second Neighborhood? 241 Which Addresses Are in the Second Neighborhood, but Not the First? 242 Evaluation Strategies with the Gremlin Query Language 244 Pick a Random Address to Use for Our Example 245 Shortest Path Queries 246 Finding Paths of a Fixed Length 247 Finding Paths of Any Length 250 Augmenting Our Paths with the Trust Scores 253 Do You Trust This Person? 259 9. Finding Paths in Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Chapter Preview: Understanding Weights, Distance, and Pruning 262 Weighted Paths and Search Algorithms 262 Shortest Weighted Path Problem Definition 263 Shortest Weighted Path Search Optimizations 264 Normalization of Edge Weights for Shortest Path Problems 267 Normalizing the Edge Weights 267 Updating Our Graph 272 Exploring the Normalized Edge Weights 273 Some Thoughts Before Moving On to Shortest Weighted Path Queries 277 Shortest Weighted Path Queries 277 Building a Shortest Weighted Path Query for Production 278 Weighted Paths and Trust in Production 288 10. Recommendations in Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Chapter Preview: Collaborative Filtering for Movie Recommendations 292 Recommendation System Examples 292 How We Give Recommendations in Healthcare 292 How We Experience Recommendations in Social Media 293 Table of Contents | vii
📄 Page 10
How We Use Deeply Connected Data for Recommendations in Ecommerce 294 An Introduction to Collaborative Filtering 295 Understanding the Problem and Domain 295 Collaborative Filtering with Graph Data 297 Recommendations via Item-Based Collaborative Filtering with Graph Data 298 Three Different Models for Ranking Recommendations 299 Movie Data: Schema, Loading, and Query Review 303 Data Model for Movie Recommendations 303 Schema Code for Movie Recommendations 305 Loading the Movie Data 307 Neighborhood Queries in the Movie Data 311 Tree Queries in the Movie Data 314 Path Queries in the Movie Data 316 Item-Based Collaborative Filtering in Gremlin 318 Model 1: Counting Paths in the Recommendation Set 318 Model 2: NPS-Inspired 319 Model 3: Normalized NPS 322 Choosing Your Own Adventure: Movies and Graph Problems Edition 324 11. Simple Entity Resolution in Graphs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Chapter Preview: Merging Multiple Datasets into One Graph 325 Defining a Different Complex Problem: Entity Resolution 326 Seeing the Complex Problem 328 Analyzing the Two Movie Datasets 329 MovieLens Dataset 329 Kaggle Dataset 336 Development Schema 339 Matching and Merging the Movie Data 340 Our Matching Process 340 Resolving False Positives 343 False Positives Found in the MovieLens Dataset 343 Additional Errors Discovered in the Entity Resolution Process 344 Final Analysis of the Merging Process 346 The Role of Graph Structure in Merging Movie Data 347 12. Recommendations in Production. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Chapter Preview: Understanding Shortcut Edges, Precomputation, and Advanced Pruning Techniques 350 Shortcut Edges for Recommendations in Real Time 350 Where Our Development Process Doesn’t Scale 351 How We Fix Scaling Issues: Shortcut Edges 352 Seeing What We Designed to Deliver in Production 353 viii | Table of Contents
📄 Page 11
Pruning: Different Ways to Precompute Shortcut Edges 354 Considerations for Updating Your Recommendations 356 Calculating Shortcut Edges for Our Movie Data 357 Breaking Down the Complex Problem of Precalculating Shortcut Edges 357 Addressing the Elephant in the Room: Batch Computation 362 Production Schema and Data Loading for Movie Recommendations 363 Production Schema for Movie Recommendations 364 Production Data Loading for Movie Recommendations 365 Recommendation Queries with Shortcut Edges 366 Confirming Our Edges Loaded Correctly 367 Production Recommendations for Our User 368 Understanding Response Time in Production by Counting Edge Partitions 372 Final Thoughts on Reasoning About Distributed Graph Query Performance 375 13. Epilogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Where to Go from Here? 378 Graph Algorithms 378 Distributed Graphs 379 Graph Theory 380 Network Theory 380 Stay in Touch 382 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Table of Contents | ix
📄 Page 12
(This page has no text content)
📄 Page 13
Preface Think about the last time you searched for someone on a social media platform. What did you look at on the results page? Most likely, you started scanning down the names in the list of profile results. And you probably spent most of your time inspecting the “shared friends” section to understand how you knew someone. Our innate human behavior of reasoning about our shared friends on social media is what inspired us to write this book. Though, our shared inspiration generated two very different reasons behind why we wrote this book. First, have you ever stopped to think about how an app creates the “shared friends” section? The engineering required to deliver your “shared friends” in search results creates an intricate orchestration of tools and data to solve an extremely complex, distributed problem. We have either built those sections or created the tools that deliver them. Our passion for understanding and teaching others from our collective experiences is the first reason we chose to write this book together. The second reason is that anyone who uses social media intuitively derives personal context directly from the “shared friends” section. This process of reasoning and thinking about relationships within data is called graph thinking, and that is what we name the human approach to understanding life through connected data. How did we all learn to do this? There wasn’t a specific point in time when we all were taught this skill. Processing relationships among people, places, or things is just how we think. It is the ease with which people infer context from relationships, be it in real life or from data, that has ignited the wave of graph thinking. xi
📄 Page 14
And when it comes to understanding graph thinking, most people fall into one of two camps: those who think graphs are about bar charts, or those who think graphs are way too complicated. Either way, these thought processes apply legacy approaches to thinking about data and technology. The problem is that the art of the possible has changed, our tools have improved, and there are new lessons to learn. We believe that graphs are powerful and deployable. Graph technology can make you more productive; we have worked with teams that told us so. This book brings these two mindsets together. Graph thinking closes the gap between how we humans operate/see/live and how we use data to inform a decision. Imagine seeing your whole world as a spreadsheet with rows and columns of data and trying to make sense of it all. For the majority of us, the exercise is unnatural and counterproductive. This is because relationships are how people navigate and reason about life. It is com‐ puters that need databases and operate in the world of rows and columns of data. Graph thinking is a way to solve complex problems by taking a relationship-centric approach. Graph technology bridges the gap between “relationships” and the linear memory constraints of modern computer infrastructure. As more people learn how to build with graph technology by applying graph think‐ ing, imagine what the next wave of innovation will bring. Who Should Read This Book This book aims to teach you two things. First, we will teach you about graph thinking and the graph mindset through asking questions and reasoning about data. Second, we will walk you through writing code that solves the most common, complex graph problems. These new concepts are intertwined within the tasks commonly performed across a few different engineering functions. Data engineers and architects sit at the heart of transitioning an idea from develop‐ ment into production. We organized this book to show you how to resolve common assumptions that can occur when moving from development into production with graph data and graph tools. Another benefit to the data engineer or data architect will be learning the world of possibilities that come from understanding graph thinking. Synthesizing the breadth of problems that can be solved with graph data will also help you invent new patterns for their use in production applications. Data scientists and data analysts may most benefit from reasoning about how to use graph data to answer interesting questions. All the examples throughout this text were constructed to apply a query-first approach to graph data. A secondary benefit xii | Preface
📄 Page 15
for a data scientist or analyst will be to understand the complexity of using dis‐ tributed graph data within a production application. We teach and build upon the common development pitfalls and their production resolution processes throughout the book so that you can formulate new types of problems to solve. Computer scientists will learn how to use techniques in functional programming and distributed systems to query and reason about graph data. We will outline fundamen‐ tal approaches to procedurally traversing graph data and step through their applica‐ tion with graph tools. Along the way we will learn about distributed technologies, too. We will be working within the intersection of graph data and distributed, complex problems; a fascinating combination of engineering topics with something to learn for any technologist. Goals of This Book The first goal of this book is to create a new foundation that exists at a very diverse intersection. We will be working with concepts from graph theory, database schema, distributed systems, data analysis, and many other fields. This unique intersection forms what we refer to in this book as graph thinking. A new application domain requires new terms, examples, and techniques. This book serves as your foundation for understanding this emerging field. From the past decade of graph technology emerged a common set of patterns for using graph data in production applications. The second goal of this book is to teach you those patterns. We define, illustrate, build, and implement the most popular ways teams use graph technology to solve complex problems. After studying this book, you will have a set of templates for building with graph technology to solve this common set of problems. The third goal of this book is to transform how you think. Understanding and apply‐ ing graph data to your problem introduces a paradigm shift into your thought pro‐ cesses. Through many upcoming examples, we aim to teach you the common ways that others think and reason about graph data within an application. This book teaches you what you need to know to apply graph thinking to a technology decision. Navigating This Book This book is organized roughly as follows: • Chapter 1 discusses graph thinking and provides detailed processes for its appli‐ cation to complex problems. • Chapters 2 and 3 introduce fundamental graph concepts that will be used throughout the rest of the book. Preface | xiii
📄 Page 16
• Chapters 4 and 5 apply graph thinking and distributed graph technology to building a Customer 360 banking application, the most popular use case for graph data today. • Chapters 6 and 7 into the world of hierarchical data and nested graph data through a telecommunications use case. Chapter 6 sets the stage for a common error that is resolved in Chapter 7. • Chapters 8 and 9 discuss pathfinding across graph data in detail, using an exam‐ ple of quantifying trust in social transaction networks via paths. • Chapters 10 and 12 teach you how to use collaborative filtering on graph data to design a Netflix-inspired recommendation system. • Chapter 11 can be thought of as a bonus chapter that illustrates how to apply entity resolution to the merging of multiple datasets into one large graph for col‐ lective analysis. Each chapter pair (4 and 5, 6 and 7, 8 and 9, 10 and 12) follows the same structure. The first chapter in each pair introduces new concepts and a new example use case in a development environment. The second chapter delves into the details of production issues, such as performance and scalability, that need to be addressed for real-world deployments. Conventions Used in This Book The following typographical conventions are used in this book: Italic Indicates new terms, URLs, email addresses, filenames, and file extensions. Constant width Used for program listings, as well as within paragraphs to refer to program ele‐ ments such as variable or function names, databases, data types, environment variables, statements, and keywords. Constant width bold Shows commands or other text that should be typed literally by the user. Constant width italic Shows text that should be replaced with user-supplied values or by values deter‐ mined by context. This element signifies a tip or suggestion. xiv | Preface
📄 Page 17
This element signifies a general note. This element indicates a warning or caution. Using Code Examples Supplemental material (code examples, exercises, etc.) is available for download at https://github.com/datastax/graph-book. If you have a technical question or a problem using the code examples, please send email to bookquestions@oreilly.com. You can also follow us on Twitter: https://twitter.com/Graph_Thinking This book is here to help you get your job done. In general, if example code is offered with this book, you may use it in your programs and documentation. You do not need to contact us for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require per‐ mission. We appreciate, but generally do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: “The Practitioner’s Guide to Graph Data by Denise Koessler Gosnell and Matthias Broecheler (O’Reilly). Copy‐ right 2020 Denise Gosnell and Matthias Broecheler, 978-1-492-04407-9.” If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at permissions@oreilly.com. O’Reilly Online Learning For more than 40 years, O’Reilly Media has provided technol‐ ogy and business training, knowledge, and insight to help companies succeed. Preface | xv
📄 Page 18
Our unique network of experts and innovators share their knowledge and expertise through books, articles, conferences, and our online learning platform. O’Reilly’s online learning platform gives you on-demand access to live training courses, in- depth learning paths, interactive coding environments, and a vast collection of text and video from O’Reilly and 200+ other publishers. For more information, please visit http://oreilly.com. How to Contact Us Please address comments and questions concerning this book to the publisher: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax) We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at http://www.oreilly.com/catalog/ 9781492044079. Email bookquestions@oreilly.com to comment or ask technical questions about this book. For more information about our books, courses, conferences, and news, see our web‐ site at http://www.oreilly.com. Find us on Facebook: http://facebook.com/oreilly Follow us on Twitter: http://twitter.com/oreillymedia Watch us on YouTube: http://www.youtube.com/oreillymedia Acknowledgments We would like to thank the incredible group of people who donated their time and expertise to advising us and to reading, and correcting this book. We had the honor of working with an world-class editing team led by Jeff Bleiel. Our technical editing team of Alexey Ott, Lorina Poland, and Daniel Kuppitz applied their seasoned experience in creating, building, and writing about graph technologies. Their direct contributions elevated this book to a level that we could have reached only with their assistance. We are humbled that they went above and beyond to improve the quality and correctness of this text. Thank you. xvi | Preface
📄 Page 19
We also would like to thank DataStax for its sponsorship and for encouraging our teams to collaborate on creating this book. We are very grateful for the support and review by the DataStax Graph Engineering team and for the product changes they made as we created our work together: Eduard Tudenhoefner, Dan LaRocque, Justin Chu, Rocco Varela, Ulises Cerviño Beresi, Stephen Mallette, and Jeremiah Jordan. We are especially grateful to Bryn Cooke, who coordinated and implemented a nontrivial amount of extra work to support the ideas in this book. Many additional people transcended their obligations to make time to support us, as is the DataStax way. We would like to thank Dave Bechberger, Jonathan Lacefield, and Jonathan Ellis for their expert contributions and advocacy for this work. To Daniel Farrell, Jeremy Hanna, Kiyu Gabriel, Jeff Carpenter, Patrick McFadin, Peyton Casper, Matt Atwater, Paras Mehra, Kelly Mondor, and Jim Hatcher: our conversations throughout the creation of this work had more of an impact than you realize, so thank you. All of the stories and examples throughout this text were inspired by our collabora‐ tions and experiences with colleagues around the world. To that end, we would like to recognize the graph heroes who spoke with us and helped shape this book’s narrative: Matt Aldridge, Christine Antonsen, David Boggess, Sean Brandt, Vamsi Duvvuri, Ilia Epifanov, Amy Hodler, Adam Judelson, Joe Koessler, Eric Koester, Alec Macrae, Pat‐ rick Planchamp, Gary Richardson, Kristin Stone, Samantha Tracht, Laurent Weich‐ berger, and Brent Woosley. The time that we spent speaking with each of you and the information you shared made its way into the stories that we have the privilege of sharing in this text. Thank you for lending your voices, experiences, and ideas. Denise would also like to extend her personal gratitude to those who mentored her throughout this journey. To Teresa Haynes and Debra Knisley: you ignited my pas‐ sion for graph theory that continues to drive me every day; I wouldn’t have started this journey without you. To Mike Berry: you taught me how to get things done and to never stop reaching for my next big idea; thank you. To Ted Tanner: you opened a door and showed me what it means to build with passion and deliver with excellence; timing and execution are everything. To Mike Canzoneri: whether you know it or not, you were the boot that kicked me over the line to write this; thank you. And most importantly, to Ty, the unofficial “third author” who was with me every step of the way: thank you for your never-ending positivity. Preface | xvii
📄 Page 20
(This page has no text content)
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now
Back to List