DBAs vs Developers: JSON in SQL Server 2016 | Bert Wagner | July 22, 2017
Background BI developer @ Progressive Insurance for 6+ years I ❤ JSON – I use it in APIs, hardware projects, websites I also ❤ SQL – relational database structures
Overview What is JSON? Why use JSON? When is it appropriate to store JSON in SQL? Usage examples: ETL and reporting Database object maintenance Performance parsing Performance comparisons
What does JSON look like? { “Make” : “Volkswagen”, “Year” : 2003, “Model” : { “Base” : “Golf”, “Trim” : “GL” }, “Colors” : [“White” , “Rust”], , “Pearl” “PurchaseDate” : “2006-10-05T00:00:00.000Z” } What is JSON, where it used, why is it used
Why use JSON? Easy Processing Javascript: var car = { "Make" : "Volkswagen" }; console.log(car.Make); // Output: Volkswagen car.Year = 2003; console.log(car); // Output: { "Make" : "Volkswagen", "Year" : 2003" }
Why use JSON? APIs
Why use JSON? Storage Size XML: 225 Characters JSON: 145 Characters <Car> <Make>Volkswagen</Make> <Year>2003</Year> <Model> <Base>Golf</Base> <Trim>GL</Trim> </Model> <Colors> <Color>White</Color> <Color>Pearl</Color> <Color>Rust</Color> </Colors> <PurchaseDate> 2006-10-05 00:00:00.000 </PurcaseDate> </Car> { “Make” : “Volkswagen”, “Year” : 2003, “Model” : { “Base” : “Golf”, “Trim” : “GL” }, “Colors” : [“White”, “Pearl”, Rust”], “PurchaseDate” : “2006-10-05T00:00:00.000Z” }
Appropriate Usage Staging Data Load data raw Validate Transform
Appropriate Usage Error Logging ErrorDate Component Data 2016-03-17 21:23:39 GetInventory { "Make : "Volkswagen", "Year" : 2003} 2016-03-19 12:59:31 Login { "User" : "Bert", "Referrer" : "http://google.com", "AdditionalDetails" : "Invalid number of login attempts" }
Appropriate Usage Non-Analytical Data Sessions User preferences Non-frequently changing variables Admin emails Static dropdown menus
High-Performance Requirements Inappropriate Usage High-Performance Requirements
Validation/Integrity Requirements Inappropriate Usage Validation/Integrity Requirements
Inappropriate Usage Being Lazy
Demos ETL and reporting Database object maintenance Performance parsing w/ computed column indexes SQL JSON vs XML vs .NET performance comparisons
Performance Results - XML JSON faster in almost all categories If considering entire app performance, maybe faster in all categories
Performance Results - .NET Competitive with C# libraries Indexes on computed columns are BLAZING!
Recap Many good (and bad) uses for JSON in SQL exist JSON can be fully manipulated in SQL Server 2016 JSON is preferable to XML for new projects JSON performance is comparable to .NET, faster with computed column indexes
Thank you! Twitter: @bertwagner Blog: https://blog.bertwagner.com <- new post every Tuesday YouTube: http://bit.ly/bertsyoutube <- new video every Tuesday Email: bertwagner@bertwagner.com
Appendix Software for keeping screen region on top On Top Replica Blog posts and YouTube videos: SQL Server JSON Usage - Parsing SQL Server JSON Usage - Creating SQL Server JSON Usage - Updating, Adding, Deleting Performance Comparisons - .NET Performance Comparisons - XML Performance Comparisons - .NET and XML Redux JSON Computed Column Indexes Microsoft Connect Add an option to JSON_MODIFY() to fully delete values from arrays