>> HELLO, EVERYONE. THANK YOU FOR 
JOINING ME TODAY. I KNOW IT'S PROBABLY 
BEEN A LONG DAY, AND A LOT OF YOU 
ARE COMING FROM TIME ZONES VERY 
FAR EAST OF HERE, SO IT PROBABLY 
FEELS LIKE MIDNIGHT TO YOU. I'M 
TIM SANDER. I'M A PROGRAM MANAGER 
ON THE AZURE COSMOS DB TEAM. TODAY 
I'M GOING TO TALK TO YOU ABOUT BUILDING 
EVENT DRIVEN APPS WITH AZURE FUNCTIONS 
AND THE AZURE COSMOS DB CHANGE FEED. 
AND I KNOW THAT HAPPY HOUR FOR BUILD 
IS IMMEDIATELY FOLLOWING THIS, SO 
I WANT TO MAKE SURE WE END ON TIME 
AND NOBODY IS LATE FOR THE TRULY 
IMPORTANT EVENT THIS WEEK. SO I 
WANT TO START OUT THIS SESSION WITH 
KIND OF A PROBLEM STATEMENT. IMAGINE 
THAT WE HAVE A FICTIONAL RETAIL 
COMPANY THAT HAS MANY DIFFERENT 
SUBSYSTEMS AS PART OF ITS INFRASTRUCTURE. 
THE RETAIL COMPANY HAS AN ORDER 
SUBSYSTEM WHERE WE PROCESS ORDERS. 
IT HAS A PAYMENT SUBSYSTEM WHERE 
WE CHARGE CUSTOMERS. A TAX CALCULATION 
SUBSYSTEM, WHERE WE PROCESS TAX 
CALCULATIONS AND SO ON, AND EACH 
OF THESE SUBSYSTEMS IS VERY DEPENDENT 
ON ONE ANOTHER. ESSENTIALLY, THERE'S 
A HUGE INTERDEPENDENCY OF THESE 
DIFFERENT SUBSYSTEMS, WHICH INTRODUCES 
A TON OF LATENCY FOR THIS SYSTEM. 
IT ALSO MEANS BECAUSE THERE'S A 
HIGH INTERDEPENDENCY THAT IT'S VERY 
DIFFICULT TO ADD OR REMOVE SUBSYSTEMS. 
IF WE WANT TO MAKE AN UPDATE TO 
PAYMENT OR ADD ON A NEW SHIPPING 
LEVEL SUBSYSTEM, IT'S VERY HARD 
TO DO THAT WITH SUCH A HIGH INTERDEPENDENCY 
HERE. AND IT'S ALSO NOT SCALEABLE 
BECAUSE, IF WE NEED TO SCALE UP 
ONE SUBSYSTEM, THERE'S A LOT OF 
DEPENDENCY ON IT. SO WE CAN'T INDEPENDENTLY 
SCALE THE SUBSYSTEMS. I'LL BE TALKING 
TODAY TO SOLUTIONS TO THESE KINDS 
OF PROBLEMS IN INDUSTRIES SUCH AS 
RETAIL AND GAMING. TODAY I'LL BE 
TALKING ABOUT AZURE FUNCTIONS, AND 
I'LL KIND OF START OUT WITH AN INTRO 
TO THAT. I DO ASSUME, SINCE AZURE 
FUNCTIONS WAS IN THE TITLE, THAT 
MOST PEOPLE HERE ARE VERY FAMILIAR 
WITH AZURE FUNCTIONS ALREADY. SO 
I'M ONLY GOING TO SPEND ABOUT A 
MINUTE OR TWO KIND OF LEVEL SETTING 
ON THAT TOPIC. AFTER I TALK ABOUT 
AZURE FUNCTIONS, I'M GOING TO INTRODUCE 
AZURE COSMOS DB AND THE AZURE COSMOS 
DB CHANGE FEED. AND THE GREAT THING 
ABOUT AZURE FUNCTIONS IS YOU CAN 
VERY EASILY SUBSCRIBE TO CHANGES 
IN THE CHANGE FEED WITHOUT REALLY 
UNDERSTANDING THE CHANGE FEED IN 
DEPTH. SO I'LL KIND OF SPEND ABOUT 
FIVE, TEN MINUTES ON THAT AS WELL. 
BUT WHERE WE'LL SPEND THE MOST OF 
OUR TIME TODAY IS ON THE USE CASE 
PATTERNS FOR THE CHANGE FEED. THESE 
USE CASES WILL INCLUDE EVENT SOURCING 
FOR DIFFERENT MICROSERVICES AND 
A MICROSERVICES ARCHITECTURE, GENERATING 
A MATERIALIZED VIEW FOR A GAMING 
LEADERBOARD, AND THEN FINALLY WE'LL 
CONCLUDE WITH THE USE CASE FOR REPLICATING 
DIFFERENT COSMOS CONTAINERS FOR 
MULTIPLE PARTITION KEYS. THE IDEA 
IS WITH EACH OF THESE USE CASES 
WE GO PROGRESSIVELY MORE IN DEPTH. 
THE SESSION WILL START OUT KIND 
OF HIGH LEVEL, AND AS WE PROGRESS, 
WE'LL GET DEEPER AND DEEPER INTO 
HOW WE BUILD THESE DIFFERENT USE 
CASES. SO THE FIRST THING I'M GOING 
TO TALK ABOUT IS AZURE FUNCTIONS. 
JUST A SHOW OF HANDS. AND I EXPECT 
EVERYONE'S HAND TO BE RAISED. WHO 
HAS HEARD OF AZURE FUNCTIONS BEFORE? 
THAT'S ABOUT 100. VERY NICE. IF 
THIS WERE A TEST, WE'D HAVE AN A-PLUS. 
I'LL SPEND ABOUT TWO MINUTES JUST 
KIND OF LEVEL SETTING ON AZURE FUNCTIONS. 
THE IDEA WITH AZURE FUNCTIONS IS 
YOU WRITE CUSTOM CODE THAT CAN BE 
EASILY DEPLOYED ON AZURE. YOU CAN 
WRITE THIS CUSTOM CODE IN VS CODE, 
IN VISUAL STUDIO. IF IT'S SIMPLE, 
YOU CAN WRITE IT DIRECTLY IN THE 
PORTAL. THE IDEA IS IT'S SERVERLESS. 
YOU WRITE THIS CUSTOM CODE. IN ONE 
CLICK, YOU DEPLOY IT TO THE CLOUD. 
YOU DON'T HAVE TO WORRY ABOUT WHAT 
SIZE AZURE FUNCTION DO I NEED TODAY? 
YOU DON'T HAVE TO WORRY ABOUT ANY 
OF THAT. THE IDEA WITH AZURE FUNCTIONS 
IS IT SIGNIFICANTLY SPEEDS UP TIME 
TO MARKET AND DEVELOPMENT TIME, 
AND THE GREAT THING ABOUT AZURE 
FUNCTIONS, WHICH I'M GOING TO TALK 
ABOUT TODAY, IS HOW YOU CAN VERY 
EASILY SUBSCRIBE TO AN AZURE FUNCTION 
USING DB COSMOS TRIGGER, AND YOU 
CAN SUBSCRIBE TO CHANGES IN A COSMOS 
DB CONTAINER USING THE CHANGE FEED. 
AZURE FUNCTIONS IS SERVERLESS, AND 
I DO FEEL I NEED TO SPEND AT LEAST 
A MINUTE KIND OF LEVEL SETTING ON 
THE BUZZ WORD. THE IDEA WITH SERVERLESS 
IS YOU DON'T NEED TO MANAGE SERVERS. 
YOU WRITE CUSTOM CODE THAT SOLVES 
A BUSINESS PROBLEM. YOU DEPLOY IT, 
AND THAT'S IT. THIS IS THE PRICING 
STRUCTURE FOR AZURE FUNCTIONS. YOU'RE 
GOING TO BE BILLED OFF OF EXECUTION 
TIME AND TOTAL EXECUTIONS. YOU DON'T 
WORRY ABOUT SERVERS OR ANY OF THAT. 
IT'S KIND OF LIKE PAAS SERVICE PLUS 
A LITTLE EXTRA FUNCTIONALITY. THE 
GOAL WITH THIS IS IT GIVES YOU FASTER 
TIME TO MARKET. ALL THE USE CASES 
I'M GOING TO SHOW YOU TODAY ARE 
ACTUALLY INCREDIBLY EASY TO IMPLEMENT, 
AND ONE OF THEM TOOK ME ONLY ABOUT 
TEN MINUTES TO MAKE. SO THE IDEA 
IS THAT OUR USE CASES OFFER INCREDIBLE 
BUSINESS VALUE, BUT IT'S REALLY 
EASY TO MAKE THEM USING AZURE FUNCTIONS 
TO SUBSCRIBE TO THE CHANGE FEED. 
NOW I'D ALSO LIKE TO TAKE SOME TIME 
AND INTRODUCE AZURE COSMOS DB. SO 
I'M HOPING THIS AUDIENCE POLL IS 
ALSO VERY CLOSE TO 100. WHO HAS 
HEARD OF AZURE COSMOS DB? AWESOME. 
WHO HAS USED AZURE COSMOS DB? WHO 
HAS USED AZURE COSMOS DB IN PRODUCTION? 
WOW, AWESOME. I DID NOT PLAN TO 
GO THAT DEEP IN COSMOS DB KNOWLEDGE 
BECAUSE I ASSUME PEOPLE HAVE THAT 
KIND OF BASE KNOWLEDGE, AND IT'S 
AWESOME TO SEE THAT THAT ASSUMPTION 
IS TRUE. I'LL QUICKLY INTRODUCE 
AZURE COSMOS DB. AZURE COSMOS DB 
IS A GLOBALLY DISTRIBUTED MULTIMODEL 
DATABASE HOSTED ON AZURE. IT'S A 
TRULY MULTIMODEL DATABASE, SO WE 
HAVE SEVERAL DIFFERENT MODELS WE 
EXPOSED YOU THROUGH DIFFERENT APIs. 
YOU CAN THINK OF OUR APIs TO INTERACT 
WITH DATA AS IT'S STORED IN COSMOS 
DB. FOR THIS SESSION, WE DON'T REALLY 
NEED TO KNOW A LOT ABOUT COSMOS 
DB, BUT TODAY WE DID ANNOUNCE OUR 
API AND SPARK API, SO THAT'S COOL 
AS WELL. WE HAVE TWO NEW APIs FOR 
COSMOS DB. FOR THIS SESSION, YOU 
NEED TO UNDERSTAND THAT COSMOS DB 
GIVES YOU ELASTICALLY SCALEABLE 
THROUGHPUT STORAGE AND GLOBAL DISTRIBUTION. 
THIS WILL BE IMPORTANT IN THE USE 
CASES WE'LL TALK ABOUT LATER, BUT 
OTHER THAN THAT, THERE'S REALLY 
NOT A LOT YOU NEED TO KNOW ABOUT 
COSMOS DB FOR THIS SESSION. FOR 
THIS SESSION, WE'LL BE DEALING WITH 
THE AZURE COSMOS DB CORE API, ALSO 
KNOWN AS OUR SQL API. THE IDEA WITH 
OUR SQL API IS WE MODEL YOUR DATA 
ESSENTIALLY IN JSON DOCUMENTS, AND 
YOU CAN QUERY IT USING JUST REGULAR 
OLD SELECT STAR FROM SQL. WHO'S 
AN EXAMPLE OF THAT HERE WITH OUR 
SQL OR CORE API. YOUR DATA IS MODELED 
IN JUST A JSON FORMAT, AND IT'S 
STORED IN COSMOS CONTAINERS. SO 
THE IDEA IS THAT BECAUSE COSMOS 
DB DOESN'T ENFORCE SCHEMA AT THE 
DATABASE LEVEL, THERE'S A LOT OF 
COOL FUNCTIONALITY THAT YOU CAN 
DO WITHIN YOUR COSMOS DB CONTAINERS 
THAT YOU WOULD NOT BE ABLE TO DO 
WITH THE RELATIONAL DATABASE, AND 
WE'RE GOING TO TALK ABOUT SOME OF 
THESE COOL USE CASES TODAY AS WELL. 
HERE, AS YOU CAN SEE, I HAVE A VERY 
SIMPLE JSON DOCUMENT THAT HAS USER 
NAME DISPLAYED, EMAIL, FIRST NAME, 
LAST NAME, AND THAT JSON DOCUMENT 
IS ALL STORED WITHIN ONE COSMOS 
CONTAINER. IF I WERE TO AT ON A 
FIELD IN THIS JSON DOCUMENT, I COULD 
STORE IT IN THE SAME CONTAINER BECAUSE 
SCHEMA IS NOT GOING TO BE ENFORCED 
IN THE SAME CONTAINER. THAT'S IMPORTANT 
TO UNDERSTAND FOR COSMOS DB AS WELL 
FOR THIS SESSION. BUT OTHER THAN 
THAT, YOU DON'T NEED TO KNOW TOO 
MUCH MORE TO GET A LOT OUT OF THE 
USE CASES I'LL TALK ABOUT. OF PEOPLE 
WHO HAVE USED COSMOS DB, WHO HAS 
USED THE CHANGE FEED BEFORE? WE'VE 
GOT A MUCH LOWER NUMBER NOW, WHICH 
IS GOOD BECAUSE THAT'S WHAT I'M 
GOING TO BE TALKING ABOUT TODAY. 
LUCKILY, IN ORDER TO USE THE CHANGE 
FEED, YOU REALLY DON'T NEED TO KNOW 
VERY MUCH ABOUT IT. THE IDEA WITH 
THE CHANGE FEED IS IT'S A SORTED 
LIST OF DOCUMENTS IN A COSMOS CONTAINER 
THAT'S BASED ON WHICH EACH DOCUMENT 
WAS LAST MODIFIED. SO THE CHANGE 
FEED IS GOING TO KEEP TRACK OF UPDATES 
AND INSERTS, AND YOU'LL BE ABLE 
TO ESSENTIALLY SEE THE ORDER IN 
WHICH DOCUMENTS WERE UPDATED OR 
INSERTED IN COSMOS DB. IN THE CHANGE 
FEED, WE'RE GOING TO STORE THE LATEST 
VERSION OF EACH DOCUMENT. SO IT 
ISN'T POSSIBLE TO SEE THE CHANGES 
FOR EACH DOCUMENT, BUT IT IS POSSIBLE 
TO VIEW THE CHANGE FEED AT ANY TIME 
SINCE YOU CREATED YOUR COSMOS CONTAINER. 
THESE THREE PARTS OF THE CHANGE 
FEED ARE GOING TO BE REALLY IMPORTANT 
IN THE USE CASES I'M GOING TO TALK 
ABOUT TODAY. ONE KEY ASPECT OF THE 
CHANGE FEED THAT I WANT EVERYONE 
TO REMEMBER IS IT'S VERY EASY TO 
DESCRIBE CHANGES IN THE CHANGE FEED 
USING AN AZURE FUNCTION. THERE'S 
THREE WAYS THAT YOU CAN SUBSCRIBE 
TO THE CHANGE FEED. THE IDEA IS 
THAT, AS WE GO DOWN THIS LIST, IT 
GETS HARDER AND COMPLICATED, AND 
YOU NEED TO HAVE A DEEPER UNDERSTANDING 
OF THE CHANGE FEED. THE TRADEOFF 
IS, AS YOU KIND OF MOVE DOWN THIS 
LIST, YOU'LL ALSO GET MORE CONTROL. 
WITH AZURE FUNCTIONS YOU'RE FOCUSING 
MORE ON YOUR BUSINESS LOGIC, YOU 
CLICK DEPLOY, IT'S DEPLOYED, AND 
THAT'S ALL YOU NEED TO WORRY ABOUT. 
WITH THE CHANGE FEED PROCESSOR LIBRARY, 
YOU HAVE TO IMPLEMENT A PROCESS 
CHANGES METHOD. THAT'S STILL VERY 
SIMPLE, BUT YOU DO HAVE TO MANAGE 
SERVERS IN THAT CASE SINCE YOU MIGHT 
BE DEPLOYING THEM ON A VM OR SOMETHING 
LIKE THAT. THEN WITH THIS, IF YOU 
WANTED TO IMPLEMENT YOUR OWN CHANGE 
FEED PROCESSOR LIBRARY WITH THE 
SQL API SDKs, YOU COULD DO THAT 
AS WELL. HOWEVER, THAT'S A LITTLE 
BIT HARDER. YOU HAVE TO MANAGE CHECKPOINTS 
AND CHANGE FEED READING FROM DIFFERENT 
PARTITIONS, AND THAT'S A LITTLE 
MORE COMPLEX. WE'RE GOING TO FOCUS 
ON USER FUNCTIONS AND CHANGES TO 
THE LIBRARY. RIGHT NOW I'M GOING 
TO SHOW PROBABLY THE WORLD'S SIMPLEST 
DEMO, AND IT'S AN AZURE FUNCTION 
THAT SUBSCRIBES TO THE COSMOS DB 
CHANGE FEED. SO HERE I HAVE A COSMOS 
DB CONTAINER, A DATABASE CALLED 
FUNCTION SIMPLE THAT HAS A CONTAINER 
NAMED COLLECTION THAT HAS DIFFERENT 
DOCUMENTS. I'M GOING TO -- I'VE 
WRITTEN A VERY SIMPLE AZURE FUNCTION 
HERE. WHICH ESSENTIALLY WILL BE 
TRIGGERED BY ANY UPDATE OR INSERT 
IN MY COSMOS COLLECTION. SO I'LL 
START THE LOG DOWN HERE. IF I ADD 
OR UPDATE A DOCUMENT IN MY COSMOS 
DB CONTAINER, THIS WILL BASICALLY 
TRIGGER THAT AZURE FUNCTION. IF 
I ADD ID85, HIT SAVE, I'VE DONE 
A WRITE TO THIS CONTAINER, AND IT 
SHOULD SHOW UP IN THE CHANGE FEED. 
SO THE IDEA IS THAT I EXECUTED THE 
LOGIC HERE AND SAW THAT A DOCUMENT 
WAS MODIFIED AND OUTPUTTED THAT 
DOCUMENT'S ID. SO ESSENTIALLY WHEN 
I DID THAT INSERT OR UPDATE, I TRIGGERED 
THIS BUSINESS LOGIC HERE AND EXECUTED 
EVERYTHING WITHIN THIS -- WITHIN 
THAT I'M HIGHLIGHTING HERE ESSENTIALLY. 
SO I JUST OUTPUTTED THE NUMBER OF 
DOCUMENTS THAT WERE MODIFIED AND 
THE DOCUMENT ID. THROUGHOUT THIS 
SESSION, WE'RE OBVIOUSLY GOING TO 
PUT MUCH MORE COMPLEX LOGIC WITHIN 
AZURE FUNCTIONS AND SEE HOW WE CAN 
VERY EASILY WITH A FEW LINES OF 
CODE SOLVE INCREDIBLE LARGE SCALE 
BUSINESS PROBLEMS. FOR THE REMAINDER 
OF THIS SESSION, I WANT TO FOCUS 
ON PATTERNS THAT WE USE THE CUSTOMER 
CHANGE FEED FOR. THE FIRST USE CASE 
THAT I'M GOING TO TALK ABOUT IS 
EVENT SOURCING IN RETAIL. THIS IS 
A VERY, VERY COMMON USE CASE, AND 
THERE'S A VIDEO THAT I'M GOING TO 
POST AT THE END OF THE SESSION THAT 
TALKS ABOUT JET. COM'S ARCHITECTURE 
THAT'S BUILT USING EVENT SOURCING 
WITH THE CHANGE FEED. OF MY THREE 
USE CASES, I'M GOING TO SPEND THE 
LEAST TIME TALKING ABOUT THIS ONE 
BECAUSE THERE'S ALREADY AN AWESOME 
VIDEO THAT I'LL BE SHARING IN THE 
CALL TO ACTION SLIDE OF MY SESSION. 
HERE'S KIND OF A SAMPLE MICROSERVICES 
ARCHITECTURE, WHERE WE HAVE DIFFERENT 
MICROSERVICES THAT NEED TO COMMUNICATE 
WITH EACH OTHER. THINK OF EACH MICROSERVICE 
AS AN INDEPENDENT SUBSYSTEM THAT 
KIND OF PERFORMS A SAMPLE ACTION. 
SO IN THE TOP LEFT WE HAVE OUR TAX 
CALCULATIONS MICROSYSTEM THAT DOES 
ONE SIMPLE TAX CALCULATION AND A 
SEPARATE PAYMENT MICROSYSTEM AND 
A FULFILLMENT MICROSYSTEM, AND SO 
ON. IN THIS ARCHITECTURE I'M SHOWING 
HERE, THERE'S A DEPENDENCY OF EACH 
MICROSYSTEM ON OTHER MICROSERVICES. 
SO ESSENTIALLY IF THE TAX CALCULATION 
MICROSERVICE WERE TO GO DOWN OR 
HAVE AN ISSUE, WE WOULDN'T BE ABLE 
TO PROCESS SHIPPING LABELS AND SO 
ON. THIS KIND OF ARCHITECTURE IS 
NOT SCALEABLE. THE IDEA IS THAT, 
IF WE WANTED TO INDEPENDENTLY SCALE 
ONE MICROSERVICE OR PROCESS A LOT 
OF EVENTS, IT WOULDN'T REALLY WORK. 
EVENTS ARE GOING TO NEED TO BE PROCESSED 
BY MANY OF THESE MICROSERVICES, 
AND THERE'S A LOT OF UNNECESSARY 
LATENCY THAT YOU'RE INTRODUCING 
WITH THIS ARCHITECTURE. A MUCH BETTER 
APPROACH IS USING EVENT SOURCING 
TO ESSENTIALLY CREATE AN EVENT SOURCING 
ARCHITECTURE FOR DIFFERENT MICROSERVICES. 
IN THIS EXAMPLE, WE'RE USING AZURE 
COSMOS DB AS SORT OF A CENTRAL BUS 
TO PROCESS EVENTS. SO THE IDEA IS 
ALL THE EVENTS ARE PROCESSED ONCE 
THROUGH AZURE COSMOS DB, AND EACH 
MICROSERVICE SUBSCRIBES TO THE CHANGE 
FEED, EITHER THROUGH AN AZURE FUNCTION 
OR THE CHANGE FEED PROCESSOR LIBRARY 
TO TRIGGER CUSTOM BUSINESS LOGIC 
AND BASICALLY EXECUTE LOGIC BASED 
ON EVENTS THAT HAVE BEEN WRITTEN 
AND PROCESSED BY AZURE COSMOS DB. 
WITH THIS ARCHITECTURE, EACH MICROSERVICE 
IS HIGHLY INDEPENDENT. SO THE TAX 
MICROSERVICE HAS AN INDEPENDENT 
ATMOSPHERE. >> YOU DON'T SEEM EXCITED 
>> HELLO, EVERYONE. THANK YOU FOR 
. >> ALL RIGHT. HI, GUYS. WELCOME 
ATMOSPHERE. >> YOU DON'T SEEM EXCITED 
ENOUGH. [LAUGHING] PEOPLE SHOULD 
JOINING ME TODAY. I KNOW IT'S PROBABLY 
TO BROADENING IMPLEMENTATION OPTIONS 
ENOUGH. [LAUGHING] PEOPLE SHOULD 
BE JUMPING WITH EXCITEMENT. >> MAYBE 
BEEN A LONG DAY, AND A LOT OF YOU 
OF A . NET FRAMEWORK. MICROSOFT 
BE JUMPING WITH EXCITEMENT. >> MAYBE 
ARE COMING FROM TIME ZONES VERY 
LAWYERS DON'T KILL ME. SO IF YOU'RE 
FAR EAST OF HERE, SO IT PROBABLY 
HERE, IT'S BECAUSE YOU'RE INTERESTED 
FEELS LIKE MIDNIGHT TO YOU. I'M 
IN LEARNING ABOUT THE JOURNEY THAT 
TIM SANDER. I'M A PROGRAM MANAGER 
WE WENT THROUGH AS A . NET PLATFORM 
ON THE AZURE COSMOS DB TEAM. TODAY 
I'M GOING TO TALK TO YOU ABOUT BUILDING 
EVENT DRIVEN APPS WITH AZURE FUNCTIONS 
AND THE AZURE COSMOS DB CHANGE FEED. 
AND I KNOW THAT HAPPY HOUR FOR BUILD 
VIEW OF THE DATA THAT'S ENTIRELY 
SEPARATE FROM PAYMENT AND FULFILLMENT, 
SO EVERYTHING IS PROCESSED BY COSMOS 
DB, AND IF THE TAX MICROSERVICE, 
FOR EXAMPLE, GOES DOWN OR HAS SOME 
ISSUE, IT HAS ABSOLUTELY NO IMPACT 
ON PAYMENT AND NO IMPACT ON FULFILLMENT. 
WITH THIS ARCHITECTURE, IT'S ALSO 
POSSIBLE TO VERY EASILY ADD OR REMOVE 
MICROSERVICES. IF WE WANT TO TEST 
THE MICROSERVICE -- LET'S SAY WE 
WANTED TO ADD ON A SHIPPING LABEL 
MICROSERVICE -- IT WOULD BE VERY 
EASE Y TO ADD THAT ON, SUBSCRIBE 
TO CHANGES AND TEST THAT SEPARATELY 
COMPLETELY INDEPENDENT OF OUR EXISTING 
SYSTEM. THE IDEA IS THAT EVENTS 
ARE ONLY PROCESSED BY AZURE COSMOS 
DB ONCE, AND THE MICROSYSTEMS HAVE 
LOGIC THAT'S COMPLETELY INDEPENDENT 
FROM THE OTHERS. WE'LL INDEPENDENTLY 
SCALE OF SCOPE NOW TO A RETAIL EXAMPLE. 
FOR RETAIL, IF WE WERE MAKING, SAY, 
A RETAIL WEBSITE, EACH EVENT MIGHT 
A CHEER. >> DO THE MEXICAN WAVE. 
A CHEER. >> DO THE MEXICAN WAVE. 
>> WE SHOULD DO THAT BEFORE EVERYONE 
>> WE SHOULD DO THAT BEFORE EVERYONE 
STARTS. >> THE DOORS ARE CLOSING. 
STARTS. >> THE DOORS ARE CLOSING. 
>> OKAY. GOOD AFTERNOON EVERYONE. 
>> OKAY. GOOD AFTERNOON EVERYONE. 
I HOPE YOU ARE REALLY HAVING A MORE 
TO MAKE IT MORE JAVASCRIPT FRIENDLY. 
I HOPE YOU ARE REALLY HAVING A MORE 
ENJOYABLE BUILD THAN I'M HEARING 
MY COMPANY HAS A PLATFORM THAT LETS 
ENJOYABLE BUILD THAN I'M HEARING 
YOU, YOU SHOULD SHOUT OUT IT'S A 
CLIENTS BUILD WEBSITES USING -- 
YOU, YOU SHOULD SHOUT OUT IT'S A 
GREAT THING. [APPLAUSE] . TLANK 
IT'S A . NET BACK END, IT'S ALL 
GREAT THING. [APPLAUSE] . TLANK 
THANK YOU FOR JOINING THUS AFTERNOON. 
. NET, SQL, YOU HAVE TO BE A . NET 
THANK YOU FOR JOINING THUS AFTERNOON. 
THIS TALK BUSINESS A GREAT CUSTOMER 
IS IMMEDIATELY FOLLOWING THIS, SO 
DEVELOPER TO IMPLEMENT OUR PLATFORM. 
THIS TALK BUSINESS A GREAT CUSTOMER 
STORY. OF LA LIG. HOW LA LIG USED 
I WANT TO MAKE SURE WE END ON TIME 
TRADITIONALLY, IT HAS NOT BEEN FRIENDLY 
STORY. OF LA LIG. HOW LA LIG USED 
AZURE CONVERSATIONALLY AI TO BUILD 
AND NOBODY IS LATE FOR THE TRULY 
TO A FRONT END WORKFLOW, SO WHAT 
AZURE CONVERSATIONALLY AI TO BUILD 
NEW BUSINESS OPPORTUNITIES AND TO 
IMPORTANT EVENT THIS WEEK. SO I 
WE'VE DONE IS BUILT A NEW WAY TO 
NEW BUSINESS OPPORTUNITIES AND TO 
HAVE MORE FAN ENGAGEMENT. TULASI 
WANT TO START OUT THIS SESSION WITH 
DRIVE IMPLEMENTATIONS SO THAT WE 
HAVE MORE FAN ENGAGEMENT. TULASI 
IS HERE, AND HE WILL BE RUNNING 
KIND OF A PROBLEM STATEMENT. IMAGINE 
COULD BE MORE OPEN TO DIFFERENT 
IS HERE, AND HE WILL BE RUNNING 
US THROUGH COOL DEMOS AND MYSELF, 
THAT WE HAVE A FICTIONAL RETAIL 
TYPES OF DEVELOPERS. SO IN THIS 
US THROUGH COOL DEMOS AND MYSELF, 
I'M NAYER, I LEAD THE DEV TEAM FOR 
COMPANY THAT HAS MANY DIFFERENT 
PRESENTATION, I WILL SHARE OUR EXPERIENCES 
I'M NAYER, I LEAD THE DEV TEAM FOR 
SUBSYSTEMS AS PART OF ITS INFRASTRUCTURE. 
AND HIGHLIGHT OUR LEARNINGS FOR 
THE RETAIL COMPANY HAS AN ORDER 
OTHER TEAMS WHO MAY BE BUILDING 
SUBSYSTEM WHERE WE PROCESS ORDERS. 
JAVASCRIPT LIBRARIES. SO PLEASE 
IT HAS A PAYMENT SUBSYSTEM WHERE 
BEAR WITH ME FOR THE NEXT COUPLE 
WE CHARGE CUSTOMERS. A TAX CALCULATION 
OF MINUTES AS THESE NEXT FEW SLIDES 
SUBSYSTEM, WHERE WE PROCESS TAX 
WILL SOUND SALES PITCH, BUT I NEED 
CALCULATIONS AND SO ON, AND EACH 
TO SET THE CONTEXT FOR WHAT MY COMPANY 
OF THESE SUBSYSTEMS IS VERY DEPENDENT 
ON ONE ANOTHER. ESSENTIALLY, THERE'S 
A HUGE INTERDEPENDENCY OF THESE 
DIFFERENT SUBSYSTEMS, WHICH INTRODUCES 
A TON OF LATENCY FOR THIS SYSTEM. 
IT ALSO MEANS BECAUSE THERE'S A 
HIGH INTERDEPENDENCY THAT IT'S VERY 
DIFFICULT TO ADD OR REMOVE SUBSYSTEMS. 
IF WE WANT TO MAKE AN UPDATE TO 
PAYMENT OR ADD ON A NEW SHIPPING 
LEVEL SUBSYSTEM, IT'S VERY HARD 
BE ADDING OR REMOVING AN ITEM FROM 
A SHOPPING CART. SO HERE WE HAVE 
A SAMPLE SHOPPING CART, AND THE 
POSSIBLE EVENTS ARE CREATING A SHOPPING 
CART, ADDING THE ITEM TO THE SHOPPING 
CART, REMOVING THE ITEM, OR CHECKING 
OUT. WE'LL KIND OF CLASSIFY EACH 
OF THESE AS BASICALLY AN EVENT. 
THIS IS KIND OF SIMILAR TO JET. 
COM'S ARCHITECTURE. AGAIN, THERE'S 
A VIDEO THAT I'M GOING TO PLACE 
IN THE LAST SLIDE OF THIS POWERPOINT 
THAT WILL BE AVAILABLE THAT I STRONGLY 
RECOMMEND WATCHING. IT'S REALLY 
AWESOME FOR MORE DETAILS ABOUT THIS 
KIND OF USE CASE. SO THE IDEA IS 
THAT COSMOS DB, THE CENTRAL BUS 
BASICALLY PROCESSES ALL OF THESE 
EVENTS, AND THE MICROSERVICES THROUGH 
THE CHANGE FEED CAN SUBSCRIBE TO 
UPDATES OR ADDITIONS TO THESE EVENTS. 
SO IF, FOR EXAMPLE, WE ADD AN ITEM 
TO OUR CART, WE MIGHT TRIGGER A 
CERTAIN INVENTORY MICROSERVICE. 
IF WE CHECK OUT OUR CART, WE MIGHT 
TRIGGER A PAYMENT IN SHIPPING MICROSERVICE. 
THIS IS ALL VERY SCALEABLE, AND 
EVERY EVENT IS BASICALLY PROCESSED 
THE UNDERSTANDING COGNITIVE SERVICE. 
THE UNDERSTANDING COGNITIVE SERVICE. 
I'LL GIVE YOU A QUICK INTRODUCTION, 
I'LL GIVE YOU A QUICK INTRODUCTION, 
PROMISE IT WON'T BE THAT LONG, IT'S 
PROMISE IT WON'T BE THAT LONG, IT'S 
NOT THAT EXCITING, THEN JUMP INTO 
NOT THAT EXCITING, THEN JUMP INTO 
THE LA LIGA CUSTOMER STORY, JESUS 
THE LA LIGA CUSTOMER STORY, JESUS 
WILL RUN US THROUGH THE DEM OEFT 
WILL RUN US THROUGH THE DEM OEFT 
VIRTUAL AGENT -- DEMO OF THE VIRTUAL 
VIRTUAL AGENT -- DEMO OF THE VIRTUAL 
ASSISTANT AND ARCHITECTURE BEHIND 
TO DOES, IT WILL GET BETTER AFTER 
ASSISTANT AND ARCHITECTURE BEHIND 
THAT. ZOOM INTO THE LANGUAGE PART 
THAT. SO MY COMPANY IS GLOBAL. AND 
THAT. ZOOM INTO THE LANGUAGE PART 
OF CREATING A VIRTUAL ASSISTANT 
ALTHOUGH, WE ONLY HAVE 1, 000 EMPLOYEES, 
OF CREATING A VIRTUAL ASSISTANT 
SUCH AS THE ONE WE'LL DEMONSTRATE 
THROUGH OUR MANY PARTNERS, WE COLLECTIVELY 
SUCH AS THE ONE WE'LL DEMONSTRATE 
WITH THE FOCUS ON QUESTION AND ANSWER 
HAVE OVER 18, 000 DEVELOPERS. AND 
WITH THE FOCUS ON QUESTION AND ANSWER 
AND LANGUAGE UNDERSTANDING. PRACTICALLY 
THE INTERESTING PART IS THAT THESE 
AND LANGUAGE UNDERSTANDING. PRACTICALLY 
IN EVERY SESSION I'VE HEARD, I HAVE 
ARE ALL C SHARP, . NET DEVS WHO 
IN EVERY SESSION I'VE HEARD, I HAVE 
HEARD SOMETHING ABOUT CONVERSATION. 
ARE WORKING IN WINDOWS GENERALLY, 
HEARD SOMETHING ABOUT CONVERSATION. 
BOT FRAME WORK, HOW THIS IS PICKING 
BECAUSE WHILE THEY'RE BUILDING THESE 
BOT FRAME WORK, HOW THIS IS PICKING 
UP. IN ORDER TO CREATE A GREAT CONVERSATION 
SITES, THEY USUALLY INSTALL THE 
UP. IN ORDER TO CREATE A GREAT CONVERSATION 
A LOT OF PARTS HAVE TO COME TOGETHER. 
PLATFORM LOCALLY ON THEIR MACHINES. 
A LOT OF PARTS HAVE TO COME TOGETHER. 
AT THE CORE OF THIS IS THE COGNITIVE 
TO DO THAT WITH SUCH A HIGH INTERDEPENDENCY 
AND IF YOU'RE LIKE ME, AND YOU LIKE 
AT THE CORE OF THIS IS THE COGNITIVE 
SERVICES WHICH ARE ABLE TO ADD ASPECTS 
HERE. AND IT'S ALSO NOT SCALEABLE 
TO WORK ON A MAC, THAT USUALLY MEANS 
SERVICES WHICH ARE ABLE TO ADD ASPECTS 
OF SPEECH, VISION, LANGUAGE INTO 
BECAUSE, IF WE NEED TO SCALE UP 
THAT YOU HAVE TO INSTALL A VM. SO 
OF SPEECH, VISION, LANGUAGE INTO 
YOUR APPLICATION. IN GENERAL. AND 
ONE SUBSYSTEM, THERE'S A LOT OF 
WHAT DOES A -- AND WHAT WE BUILD 
YOUR APPLICATION. IN GENERAL. AND 
TO CREATE AN INTELLIGENT EXPERIENCE 
DEPENDENCY ON IT. SO WE CAN'T INDEPENDENTLY 
IS BASICALLY HYPER PERSONALIZED 
TO CREATE AN INTELLIGENT EXPERIENCE 
AND CREATE A MORE ENGAGING CONVERSATIONAL 
SCALE THE SUBSYSTEMS. I'LL BE TALKING 
WEBSITES. IT'S A CONCEPT MANAGEMENT 
AND CREATE A MORE ENGAGING CONVERSATIONAL 
TODAY TO SOLUTIONS TO THESE KINDS 
SYSTEM ON STEROIDS AS I LIKE TO 
OF PROBLEMS IN INDUSTRIES SUCH AS 
CALL IT. SO WHAT DOES A CMS USER, 
RETAIL AND GAMING. TODAY I'LL BE 
SOMEBODY -- A CLIENT USING OUR SOFTWARE 
TALKING ABOUT AZURE FUNCTIONS, AND 
I'LL KIND OF START OUT WITH AN INTRO 
TO THAT. I DO ASSUME, SINCE AZURE 
FUNCTIONS WAS IN THE TITLE, THAT 
MOST PEOPLE HERE ARE VERY FAMILIAR 
WITH AZURE FUNCTIONS ALREADY. SO 
I'M ONLY GOING TO SPEND ABOUT A 
MINUTE OR TWO KIND OF LEVEL SETTING 
ON THAT TOPIC. AFTER I TALK ABOUT 
AZURE FUNCTIONS, I'M GOING TO INTRODUCE 
AZURE COSMOS DB AND THE AZURE COSMOS 
DB CHANGE FEED. AND THE GREAT THING 
ABOUT AZURE FUNCTIONS IS YOU CAN 
VERY EASILY SUBSCRIBE TO CHANGES 
IN THE CHANGE FEED WITHOUT REALLY 
UNDERSTANDING THE CHANGE FEED IN 
DEPTH. SO I'LL KIND OF SPEND ABOUT 
FIVE, TEN MINUTES ON THAT AS WELL. 
BUT WHERE WE'LL SPEND THE MOST OF 
OUR TIME TODAY IS ON THE USE CASE 
PATTERNS FOR THE CHANGE FEED. THESE 
USE CASES WILL INCLUDE EVENT SOURCING 
BY AZURE COSMOS DB. HE THE IDEA 
IS THAT COSMOS DB CAN NOT ONLY PROCESS 
THESE EVENTS, BUT BECAUSE IT'S A 
DATABASE, IT CAN PERSIST THESE EVENTS. 
IF YOU WANTED TO, SAY, HAVE A CUSTOMER 
CARE API, WHERE YOU GO BACK AND 
QUERY BASED ON PAST EVENTS, IT'S 
VERY EASE GROI DO THAT WHEN YOU 
USE AZURE COSMOS DB, BECAUSE IT 
NOT ONLY PROCESSES ALL EVENTS, BUT 
IT'S STORING ALL PAST EVENTS AS 
WELL. SO THE IDEA IS, IF A CUSTOMER 
IN YOUR CUSTOMER CARE API HAD A 
QUESTION ABOUT WHETHER A CERTAIN 
ITEM WAS ORDERED OR SOMETHING LIKE 
THAT, YOU COULD VERY EASILY BUILD 
AN API THAT JUST QUERIES THE PAST 
EVENTS PUBLISHED BY COSMOS DB. THIS 
IS VERY SIMPLE BECAUSE YOUR MICROSERVICES 
WERE BUILT USING FUNCTIONS AND COSMOS 
DB WAS BUILT TO PROCESS THESE EVENTS. 
SO YOU DON'T NEED SOME KIND OF TECHNOLOGY 
TO PROCESS EVENTS AND A SEPARATE 
KIND OF TECHNOLOGY TO STORE THE 
EVENTS. EVERYTHING IS DONE WITH 
AZURE COSMOS DB. SO YOU DON'T HAVE 
TO WORRY ABOUT LOTS OF MOVING PARTS. 
APPLICATION YOU NEED TO STITCH A 
APPLICATION YOU NEED TO STITCH A 
LOT OF OTHER THINGS TOGETHER AND 
LOT OF OTHER THINGS TOGETHER AND 
THAT COMES THROUGH BOT FRAME WORK. 
THAT COMES THROUGH BOT FRAME WORK. 
WHICH ALLOWS YOU TO INTEGRATE A 
NEED TO DO TO BUILD A PAGE IN THEIR 
WHICH ALLOWS YOU TO INTEGRATE A 
LOT OF CHANCE, AND WORK WITH A LOT 
WEBSITE? SO A WEBSITE CONSISTS OF 
LOT OF CHANCE, AND WORK WITH A LOT 
OF DEVICES AND WORK WITH DIFFERENT 
COMPONENTS AND IF YOU WORK WITH 
OF DEVICES AND WORK WITH DIFFERENT 
USER INPUTS IN ORDER TO PLUG THIS 
A JAVASCRIPT FRAMEWORK IN THE PAST, 
USER INPUTS IN ORDER TO PLUG THIS 
INTO THE INTELL GENT CORE. ALSO 
THEN YOU'RE FAMILIAR WITH THE IDEA 
INTO THE INTELL GENT CORE. ALSO 
CONNECT WITH A LOT OF KNOWLEDGE 
OF COMPONENT COMPOSITION. THE SPECIAL 
CONNECT WITH A LOT OF KNOWLEDGE 
SOURCES AND EVEN GABLE SKILLS THAT 
THING ABOUT COMPONENT COMPOSITION 
SOURCES AND EVEN GABLE SKILLS THAT 
YOU CAN CUSTOMIZE AND USE WITHIN 
IN A CONTENT MANAGEMENT SYSTEM LIKE 
YOU CAN CUSTOMIZE AND USE WITHIN 
THE CONVERSATION AND PLUG INTO THE 
MY COMPANIES, LIKE SITE CORES, IS 
THE CONVERSATION AND PLUG INTO THE 
CUSTOM BUSINESS LOGIC BACKEND AND 
THAT THE CMS USER, THE AUTHOR, NOT 
CUSTOM BUSINESS LOGIC BACKEND AND 
UTILIZE WITHIN THE REALITIES OF 
THE DEVELOPER IS IN CHARGE OF THE 
UTILIZE WITHIN THE REALITIES OF 
AZURE, GIVERTION YOU SECURITY AND 
COMPOSITION BECAUSE THEY HAVE TO 
AZURE, GIVERTION YOU SECURITY AND 
COMPLIANCE. AND IS THE BEST ENTERPRISE 
BE ABLE TO GO INTO THE INTERFACED, 
COMPLIANCE. AND IS THE BEST ENTERPRISE 
PLATFORM OUT THERE. THERE'S A GROWING 
BUILD THE PAGES, AND ASSEMBLE THE 
PLATFORM OUT THERE. THERE'S A GROWING 
MOMENTUM, AGAIN SORT OF I MENTION 
COMPONENTS HOWEVER THEY WANT, MAKE 
MOMENTUM, AGAIN SORT OF I MENTION 
THAT EVERY KEYNOTE SATYA, SCOTT, 
EDITS, AND ENTER INTO WORKFLOW, 
THAT EVERY KEYNOTE SATYA, SCOTT, 
RAJESH HAS TOUCHED ON CONVERSATION 
ASK FOR APPROVAL, MAKE CHANGES ON 
RAJESH HAS TOUCHED ON CONVERSATION 
IN MORE THAN ONE POINT. AND WE TRACTION, 
THE FLY, IT'S NOT UP TO THE DEVELOPERS. 
IN MORE THAN ONE POINT. AND WE TRACTION, 
MORE THAN 3, 000 NEW BOTS. ONE BILLION 
SO LET ME SHOW YOU WHAT I MEAN BY 
MORE THAN 3, 000 NEW BOTS. ONE BILLION 
MESSAGES FLOATING IN EVERY MONTH. 
THAT. SO THIS IS SOMETHING THAT 
MESSAGES FLOATING IN EVERY MONTH. 
AN AUTHOR MIGHT SEE WHEN THEY'RE 
CREATING A NEW PAGE. THEY MIGHT 
FOR DIFFERENT MICROSERVICES AND 
JUST GO IN AND SEE A BIG GIANT PLACE 
A MICROSERVICES ARCHITECTURE, GENERATING 
HOLDER. AND THEN THERE'S BUTTONS 
A MATERIALIZED VIEW FOR A GAMING 
LEADERBOARD, AND THEN FINALLY WE'LL 
CONCLUDE WITH THE USE CASE FOR REPLICATING 
DIFFERENT COSMOS CONTAINERS FOR 
MULTIPLE PARTITION KEYS. THE IDEA 
IS WITH EACH OF THESE USE CASES 
WE GO PROGRESSIVELY MORE IN DEPTH. 
THE SESSION WILL START OUT KIND 
OF HIGH LEVEL, AND AS WE PROGRESS, 
WE'LL GET DEEPER AND DEEPER INTO 
HOW WE BUILD THESE DIFFERENT USE 
CASES. SO THE FIRST THING I'M GOING 
TO TALK ABOUT IS AZURE FUNCTIONS. 
JUST A SHOW OF HANDS. AND I EXPECT 
EVERYONE'S HAND TO BE RAISED. WHO 
HAS HEARD OF AZURE FUNCTIONS BEFORE? 
THAT'S ABOUT 100. VERY NICE. IF 
THIS WERE A TEST, WE'D HAVE AN A-PLUS. 
I'LL SPEND ABOUT TWO MINUTES JUST 
KIND OF LEVEL SETTING ON AZURE FUNCTIONS. 
THE IDEA WITH AZURE FUNCTIONS IS 
YOU WRITE CUSTOM CODE THAT CAN BE 
EASILY DEPLOYED ON AZURE. YOU CAN 
WRITE THIS CUSTOM CODE IN VS CODE, 
IN VISUAL STUDIO. IF IT'S SIMPLE, 
YOU CAN WRITE IT DIRECTLY IN THE 
YOU JUST WORRY ABOUT KIND OF CREATING 
BUSINESS LOGIC AND DEPLOYING THAT 
SO EVERYTHING IS KIND OF SIMPLE 
AND MANAGEABLE. HOWEVER, WITH THIS 
ARCHITECTURE, THERE ARE CHALLENGES. 
WE NEED TO GUARANTEE DELIVERY OF 
THESE EVENTS. IN IOT, IF WE WERE 
TO, SAY, MISS A DATA POINT, IT COULD 
BE ABSOLUTELY DISASTROUS. IF WE 
MISS AN IOT DATA POINT, THAT COULD 
BE A VERY IMPORTANT SENSOR READING 
THAT COULD CAUSE A CATASTROPHE IF 
IT'S MISSED. SIMILARLY, IF WE MISS 
AN EVENT FOR A CUSTOMER ORDER IN 
RETAIL, THE CONSEQUENCES CAN ALSO 
BE PRETTY SIGNIFICANT. IF, FOR EXAMPLE, 
A CUSTOMER WERE TO REMOVE AN ITEM 
FROM THEIR CART AND THEN CHECK OUT, 
IF WE WERE TO PROCESS THE CUSTOMER 
CHECKOUT BEFORE WE PROCESS THE CUSTOMER 
MOVING THE ITEM FROM THEIR CART, 
WE COULD POTENTIALLY SEND THE CUSTOMER 
AN ITEM THAT THEY HAD MEANT TO REMOVE 
FROM THEIR CART. SO IT'S VERY CRITICAL 
THAT WE BASICALLY PROCESS THESE 
GLOBALLY WITH THE GLOBAL COVERAGE, 
GLOBALLY WITH THE GLOBAL COVERAGE, 
ENTERPRISES, SOME OF WHICH ARE LISTED 
ENTERPRISES, SOME OF WHICH ARE LISTED 
HERE AND ONE WE'LL TALK ABOUT TODAY 
HERE AND ONE WE'LL TALK ABOUT TODAY 
IS LA LIGA. FOR THOSE WHO DON'T 
IS LA LIGA. FOR THOSE WHO DON'T 
KNOW, LA LIGA IS THE SPANISH SOCCER 
THERE TO ADD A NEW COMPONENT. RIGHT? 
KNOW, LA LIGA IS THE SPANISH SOCCER 
LEAGUE. AND IT'S ONE OF THE BEST, 
SO SOME SCREENS MIGHT POP UP, OUR 
LEAGUE. AND IT'S ONE OF THE BEST, 
OR BIGGEST SPORTING LEAGUES IN THE 
PLATFORM, THE WHOLE CHOICE OF COMPONENTS 
OR BIGGEST SPORTING LEAGUES IN THE 
WORLD. AND THEY HAVE USED THROUGH 
THAT DEVELOPERS MIGHT HAVE BUILT 
WORLD. AND THEY HAVE USED THROUGH 
A PARTNERSHIP WITH MICROSOFT TO 
IN THE BACK END. SO AS THEY'RE BUILDING 
A PARTNERSHIP WITH MICROSOFT TO 
CREATE THIS VIRTUAL ASSISTANT THAT 
OUT THESE COMPONENTS, I MEAN, AS 
CREATE THIS VIRTUAL ASSISTANT THAT 
CREATES CUSTOMER ENGAGEMENT AND 
THEY'RE GOING THROUGH THIS UI, THEY 
CREATES CUSTOMER ENGAGEMENT AND 
CREATES CUSTOMER VALUE. TO THAT 
CAN ADD ADDITIONAL PLACE HOLDERS 
CREATES CUSTOMER VALUE. TO THAT 
I'LL LEAD TO JESUS TO RUN US THROUGH 
TO BUILD THEIR LAYOUT. ADD NEW COMPONENTS. 
I'LL LEAD TO JESUS TO RUN US THROUGH 
THE GREAT EXPERIENCE. PLEASE, GO 
EDIT THE CONTENT RIGHT THERE IN 
THE GREAT EXPERIENCE. PLEASE, GO 
AHEAD. >> THANK YOU. WELL INDEED, 
LINE IN THE EDITOR, THEY CAN SWITCH 
AHEAD. >> THANK YOU. WELL INDEED, 
IT IS ONE OF THE BIGGEST SPORTS 
STUFF AROUND OR TAKE COMPONENTS 
IT IS ONE OF THE BIGGEST SPORTS 
ORGANIZATIONS IN THE WORLD. BUT 
TOTALLY AWAY. LIKE I SAID, THE COMPOSITION 
ORGANIZATIONS IN THE WORLD. BUT 
NOT ONLY THAT, IT IS INDEED THE 
IS TOTALLY UP TO THE AUTHOR. AND 
NOT ONLY THAT, IT IS INDEED THE 
MUST FOLLOW ORGANIZATION OF THE 
THE INTERESTING STUFF IS THAT PLACE 
MUST FOLLOW ORGANIZATION OF THE 
WORLD IN SOCIAL NETWORKS. UP TO 
HOLDERS CAN BE NESTED INSIDE OF 
WORLD IN SOCIAL NETWORKS. UP TO 
1. 6 BILLION INFORMINGERS WITH OF 
THE COMPONENTS, TOO. SO THEY CAN 
1. 6 BILLION INFORMINGERS WITH OF 
THIS COMPETITION IN SOCIAL NETWORK. 
JUST PUT STUFF HOWEVER THEY WANT. 
THIS COMPETITION IN SOCIAL NETWORK. 
1. 6 BILLION. WHAT WE HAVE DONE 
ONCE THE PAGE IS ASSEMBLED, THE 
1. 6 BILLION. WHAT WE HAVE DONE 
DYNAMIC ELEMENT OF WHAT THE CONTENT 
AUTHOR IS DOING DOESN'T END THERE. 
SO THEN, THEY CAN CLICK ON THE COMPONENT 
AND ADD EXTRA OPTIONS AND RULES 
PORTAL. THE IDEA IS IT'S SERVERLESS. 
YOU WRITE THIS CUSTOM CODE. IN ONE 
CLICK, YOU DEPLOY IT TO THE CLOUD. 
YOU DON'T HAVE TO WORRY ABOUT WHAT 
SIZE AZURE FUNCTION DO I NEED TODAY? 
YOU DON'T HAVE TO WORRY ABOUT ANY 
OF THAT. THE IDEA WITH AZURE FUNCTIONS 
IS IT SIGNIFICANTLY SPEEDS UP TIME 
TO MARKET AND DEVELOPMENT TIME, 
AND THE GREAT THING ABOUT AZURE 
FUNCTIONS, WHICH I'M GOING TO TALK 
ABOUT TODAY, IS HOW YOU CAN VERY 
EASILY SUBSCRIBE TO AN AZURE FUNCTION 
USING DB COSMOS TRIGGER, AND YOU 
CAN SUBSCRIBE TO CHANGES IN A COSMOS 
DB CONTAINER USING THE CHANGE FEED. 
AZURE FUNCTIONS IS SERVERLESS, AND 
I DO FEEL I NEED TO SPEND AT LEAST 
A MINUTE KIND OF LEVEL SETTING ON 
THE BUZZ WORD. THE IDEA WITH SERVERLESS 
IS YOU DON'T NEED TO MANAGE SERVERS. 
YOU WRITE CUSTOM CODE THAT SOLVES 
A BUSINESS PROBLEM. YOU DEPLOY IT, 
AND THAT'S IT. THIS IS THE PRICING 
STRUCTURE FOR AZURE FUNCTIONS. YOU'RE 
GOING TO BE BILLED OFF OF EXECUTION 
TIME AND TOTAL EXECUTIONS. YOU DON'T 
EVENTS IN THE ORDER THAT THEY ACTUALLY 
HAPPEN. ESSENTIALLY, WE NEED TO 
GUARANTEE DELIVERY OF THESE EVENTS 
AND GUARANTEE WE PROCESS THEM IN 
THIS ORDER. IT'S ALSO IMPORTANT 
THAT WE HAVE THE CAPABILITY TO REPLAY 
PAST EVENTS. IF, FOR EXAMPLE, A 
MICROSYSTEM GOES DOWN OR SOMETHING 
LIKE THAT, YOU WANT THE ABILITY 
TO BE ABLE TO ESSENTIALLY RESTORE 
EVENTS TO THAT MICROSERVICE AND 
BRING IT UP TO SPEED. SO IT'S VERY 
IMPORTANT TO HAVE THAT FUNCTIONALITY 
AS WELL. SO HOW CAN WE, USING AZURE 
COSMOS DB AND AZURE FUNCTIONS HELP 
SOLVE THESE VERY COMMON DESIGN CHALLENGES. 
FOR GUARANTEED DELIVERY, THE IDEA 
IS THAT COSMOS DB CAN ELASTICALLY 
SCALE THROUGHPUT AND STORAGE. IF 
YOU NEED TO GUARANTEE AND REALLY 
DEPEND ON AZURE COSMOS DB TO PROCESS 
EVENTS, YOU CAN. IN THE RETAIL USE 
CASE, THIS IS ESPECIALLY KIND OF 
OBVIOUS. IN RETAIL, THERE TEND TO 
BE TIMES OF THE YEAR WHERE YOU HAVE 
A LOT MORE EVENTS. YOU CAN IMAGINE, 
IS NOT ONLY WHAT WE ARE GOING TO 
IS NOT ONLY WHAT WE ARE GOING TO 
INTRODUCE TODAY, IT IS AN ASSISTANT, 
INTRODUCE TODAY, IT IS AN ASSISTANT, 
NOT ONLY. THAT IT IS A FULL DETAILED 
NOT ONLY. THAT IT IS A FULL DETAILED 
TRANSFORMATION PROJECT WHERE LA 
TRANSFORMATION PROJECT WHERE LA 
LIGA WAS INVOLVED WITH US IN ALL 
ON THEM. FOR EXAMPLE, THEY MIGHT 
LIGA WAS INVOLVED WITH US IN ALL 
OF THESE THREE PILLARS. IT IS ABOUT 
WANT TO PERSONALIZE HOW THE COMPONENTS 
OF THESE THREE PILLARS. IT IS ABOUT 
IMPROVING DIGITAL CHANCE, IMPROVING 
ARE SHOWING UP TO TEND USER. THEY 
IMPROVING DIGITAL CHANCE, IMPROVING 
ALSO THEIR BRAND, AND FINALLY TO 
MIGHT WANT TO SAY FOR THESE COMPONENTS, 
ALSO THEIR BRAND, AND FINALLY TO 
BE ABLE TO CREATE MORE VALUE. IN 
SWITCH OUT WHAT YOU'RE SHOWING BASED 
BE ABLE TO CREATE MORE VALUE. IN 
THEIR SITE, DEFINITELY, WAYS TO 
ON WHICH USER PERSONA IS VIEWING 
THEIR SITE, DEFINITELY, WAYS TO 
MONETIZE WHAT THEY OWN, THE RIGHTS 
YOUR WEBSITE OR MAYBE IF THE USER 
MONETIZE WHAT THEY OWN, THE RIGHTS 
AND THE COMPETITION ITSELF AS PRODUCT. 
IS IN THIS COUNTRY, VERSUS IN THIS 
AND THE COMPETITION ITSELF AS PRODUCT. 
AS AN ENTERTAINMENT PRODUCT, INDEED. 
COUNTRY, SHOW SOMETHING DIFFERENT. 
AS AN ENTERTAINMENT PRODUCT, INDEED. 
FOR ILLUSTRATING, I'LL SHOW IT TO 
SHOW A DIFFERENT SOCIAL WEBSITE. 
FOR ILLUSTRATING, I'LL SHOW IT TO 
YOU WHAT THE ASSISTANT IS. FIRST 
OR MAYBE THEY WANT TO DO SOME KIND 
YOU WHAT THE ASSISTANT IS. FIRST 
OF ALL, ONE OF THE VERY FEW VOICE 
OF AB TESTING ON THE STUFF ON THEIR 
OF ALL, ONE OF THE VERY FEW VOICE 
ASSISTANTS THAT IS CAPABLE OF TALKING 
SITE. SO THE BOTTOM LINE IS, WE 
ASSISTANTS THAT IS CAPABLE OF TALKING 
IN DIFFERENT LANGUAGES AND MULTI 
DON'T KNOW WHAT'S GOING TO BE ON 
IN DIFFERENT LANGUAGES AND MULTI 
CHANNEL UP TO 11 DIFFERENT CHANCE, 
THE PAGE AT DEVELOPMENT TIME. THAT 
CHANNEL UP TO 11 DIFFERENT CHANCE, 
HERE WE'RE SHOWING THEM. MULTI COMPETITION, 
MAKES IT REALLY DIFFICULT TO BUILD 
HERE WE'RE SHOWING THEM. MULTI COMPETITION, 
CAN SEE SPEAKING IN ENGLISH, SPANISH, 
STUFF IN FRONT OF FRAMEWORKS, WHICH 
CAN SEE SPEAKING IN ENGLISH, SPANISH, 
KIND OF DEPEND ON THAT. THE WAY 
THAT THIS WORKS IN TRADITIONAL. 
NET AND DEVELOPMENT IS THAT EVERYTHING, 
ALL OF THE COMPONENT BLOCKS ARE 
WORRY ABOUT SERVERS OR ANY OF THAT. 
IT'S KIND OF LIKE PAAS SERVICE PLUS 
A LITTLE EXTRA FUNCTIONALITY. THE 
GOAL WITH THIS IS IT GIVES YOU FASTER 
TIME TO MARKET. ALL THE USE CASES 
I'M GOING TO SHOW YOU TODAY ARE 
ACTUALLY INCREDIBLY EASY TO IMPLEMENT, 
AND ONE OF THEM TOOK ME ONLY ABOUT 
TEN MINUTES TO MAKE. SO THE IDEA 
IS THAT OUR USE CASES OFFER INCREDIBLE 
BUSINESS VALUE, BUT IT'S REALLY 
EASY TO MAKE THEM USING AZURE FUNCTIONS 
TO SUBSCRIBE TO THE CHANGE FEED. 
NOW I'D ALSO LIKE TO TAKE SOME TIME 
AND INTRODUCE AZURE COSMOS DB. SO 
I'M HOPING THIS AUDIENCE POLL IS 
ALSO VERY CLOSE TO 100. WHO HAS 
HEARD OF AZURE COSMOS DB? AWESOME. 
WHO HAS USED AZURE COSMOS DB? WHO 
HAS USED AZURE COSMOS DB IN PRODUCTION? 
WOW, AWESOME. I DID NOT PLAN TO 
GO THAT DEEP IN COSMOS DB KNOWLEDGE 
BECAUSE I ASSUME PEOPLE HAVE THAT 
KIND OF BASE KNOWLEDGE, AND IT'S 
AWESOME TO SEE THAT THAT ASSUMPTION 
IF WE KIND OF DEFINE THAT EVENT 
IN OUR PREVIOUS EXAMPLE WHERE YOU'RE 
ADDING OR REMOVING ITEMS FROM YOUR 
SHOPPING CART, IF WE SAY EACH OF 
THOSE IS AN EVENT, THERE'S PROBABLY 
A LOT MORE OF THOSE DURING CERTAIN 
TIMES OF THE YEAR, LIKE BLACK FRIDAY, 
CYBER MONDAY, AROUND THE HOLIDAY 
SEASON. SO IT'S VERY IMPORTANT THAT 
AZURE COSMOS DB CAN ELASTICALLY 
SCALE TO BE ABLE TO PROCESS AND 
INGEST THESE EVENTS. AZURE COSMOS 
DB CAN INDEPENDENTLY SCALE THROUGHPUT 
AND STORAGE. THIS IS VERY CRITICAL 
FOR THIS KIND OF ARCHITECTURE. THE 
IDEA IS THAT YOU CAN, IF YOU NEED 
TO, BUMP UP THE AMOUNT OF THROUGHPUT 
THE NUMBER OF EVENTS YOU'RE INGESTING. 
YOU CAN DO THAT INDEPENDENTLY OF 
STORAGE, AND YOU CAN ALSO DO THAT 
IN REAL TIME WITH ESSENTIALLY NO 
DOWN TIME. AND THIS IS VERY POWERFUL 
FOR CUSTOMERS AND MAKES IT AWESOME 
FOR USE CASES LIKE JET. COM'S. COSMOS 
DB ALSO OFFERS TURNKEY GLOBAL DISTRIBUTION. 
THIS IS AN AWESOME AND VERY INTERESTING 
TOPIC. THE MAIN THING THAT TURNKEY 
GLOBAL DISTRIBUTION WILL GIVE COSMOS 
INDEPENDENTLY IN THAT LANGUAGE. 
INDEPENDENTLY IN THAT LANGUAGE. 
MULTI ASSISTANT. WE CAN PLAY CONTENT 
MULTI ASSISTANT. WE CAN PLAY CONTENT 
THAT IS PROTECTED BY THE LIGHTS 
THAT IS PROTECTED BY THE LIGHTS 
OF LA LIGA. EVEN ADVERTISING, AND 
OF LA LIGA. EVEN ADVERTISING, AND 
OF COURSE CAN YOU DO ANY QUESTION 
JUST MBC RENDERS, SO THE HTML SNIPPETS 
OF COURSE CAN YOU DO ANY QUESTION 
THAT YOU CAN IMAGINE ABOUT A PLAYER 
ARE IN RAZOR VIEWS, SO WHEN THEY'RE 
THAT YOU CAN IMAGINE ABOUT A PLAYER 
OF LA LIGA. BASICALLY SAY ALL OF 
SENT TO THE CONTENT AUTHOR FOR EDITING, 
OF LA LIGA. BASICALLY SAY ALL OF 
THESE QUESTIONS, HOW YOU CAN HELP 
BECAUSE THE CONTENT AUTHOR NEEDS 
THESE QUESTIONS, HOW YOU CAN HELP 
ME, SHOW THE MAIN MENU AND ALSO 
TO BE ABLE TO ADD RULES TO THEM, 
ME, SHOW THE MAIN MENU AND ALSO 
MORE COMPLEX QUESTIONS LIKE HOW 
AND MOVE THEM AROUND ON THE PAGE, 
MORE COMPLEX QUESTIONS LIKE HOW 
MANY GOALS HAS MESSI SCORED LAST 
WE HAVE TO ADD SPECIAL SPRINKLES 
MANY GOALS HAS MESSI SCORED LAST 
SEASON. IN THAT WAY. YOU WILL GET 
TO THEM TO MAKE THAT HAPPEN. SO 
SEASON. IN THAT WAY. YOU WILL GET 
THAT ANSWER EVEN FOR A JOURNALIST, 
WE WRAP THE HTML OF EVERY COMPONENT 
THAT ANSWER EVEN FOR A JOURNALIST, 
WOULD TAKE A WHILE TO FIND THE ANSWER. 
IN SOME EXTRA STUFF. BUT THAT MEANS 
WOULD TAKE A WHILE TO FIND THE ANSWER. 
OF COURSE ALL OF THIS, THE STATISTICS, 
THAT EVERY -- THAT THE HTML HAS 
OF COURSE ALL OF THIS, THE STATISTICS, 
SCHEDULES, STANDINGS, PAST MATCHES, 
TO BE SERVICE SIDE RENDERED AND 
SCHEDULES, STANDINGS, PAST MATCHES, 
FUTURE MATCHES, ALL OF WHAT YOU 
IT HAS TO BE A DISCREET MODULAR 
FUTURE MATCHES, ALL OF WHAT YOU 
EXPECT FROM AN ASSISTANT PROVIDED 
PIECE. ONCE THE AUTHOR IS DONE, 
EXPECT FROM AN ASSISTANT PROVIDED 
BY LA LIGA. LET ME SHOW IT TO YOU, 
WE TAKE WHAT THEY HAVE DONE AND 
BY LA LIGA. LET ME SHOW IT TO YOU, 
YOU ARE PROBABLY MORE FAMILIAR WITH 
SEND IT BACK TO THE SERVER AND SAVE 
YOU ARE PROBABLY MORE FAMILIAR WITH 
SKYPE AND MICROSOFT, BUT LET ME 
IT IN THE DATABASE. NO PROBLEM. 
SKYPE AND MICROSOFT, BUT LET ME 
SHOW YOU HOW THIS WORKS IN GOOGLE 
FROM THE FRONT END SIDE, THE END 
SHOW YOU HOW THIS WORKS IN GOOGLE 
ASSISTANT. BASICALLY, VALUABLE, 
USER MAKES A REQUEST TO THE SERVER 
ASSISTANT. BASICALLY, VALUABLE, 
A WAY TO BUILD SKILLS. WE HAVE ACTIVATED 
AND WE JUST SEND THEM THE RAW HTML 
A WAY TO BUILD SKILLS. WE HAVE ACTIVATED 
THIS, ONLY TRIGGERING THE NAME, 
AND IN THAT CASE, WE DON'T NEED 
THIS, ONLY TRIGGERING THE NAME, 
TALK TO LA LIGA, ARE YOU READY TO 
ANY EXTRA SPRINKLES, NO WRAPPING 
TALK TO LA LIGA, ARE YOU READY TO 
OF HTML NEEDED SO THEY JUST GET 
IS TRUE. I'LL QUICKLY INTRODUCE 
AZURE COSMOS DB. AZURE COSMOS DB 
IS A GLOBALLY DISTRIBUTED MULTIMODEL 
DATABASE HOSTED ON AZURE. IT'S A 
TRULY MULTIMODEL DATABASE, SO WE 
HAVE SEVERAL DIFFERENT MODELS WE 
EXPOSED YOU THROUGH DIFFERENT APIs. 
YOU CAN THINK OF OUR APIs TO INTERACT 
WITH DATA AS IT'S STORED IN COSMOS 
DB. FOR THIS SESSION, WE DON'T REALLY 
NEED TO KNOW A LOT ABOUT COSMOS 
DB, BUT TODAY WE DID ANNOUNCE OUR 
API AND SPARK API, SO THAT'S COOL 
AS WELL. WE HAVE TWO NEW APIs FOR 
COSMOS DB. FOR THIS SESSION, YOU 
NEED TO UNDERSTAND THAT COSMOS DB 
GIVES YOU ELASTICALLY SCALEABLE 
THROUGHPUT STORAGE AND GLOBAL DISTRIBUTION. 
THIS WILL BE IMPORTANT IN THE USE 
CASES WE'LL TALK ABOUT LATER, BUT 
OTHER THAN THAT, THERE'S REALLY 
NOT A LOT YOU NEED TO KNOW ABOUT 
COSMOS DB FOR THIS SESSION. FOR 
THIS SESSION, WE'LL BE DEALING WITH 
THE AZURE COSMOS DB CORE API, ALSO 
KNOWN AS OUR SQL API. THE IDEA WITH 
DB IN THIS CASE IS EXTREMELY LOW 
LATENCY AND A 5. 9s SLA FOR AVAILABILITY. 
IF IN THIS CASE, IF YOU'RE USING 
COSMOS DB FOR SOMETHING THAT'S REALLY 
CENTRAL IN YOUR ARCHITECTURE AND 
YOU'RE PROCESSING ALL EVENTS THROUGH 
COSMOS DB, IT IS AN AWESOME FIT. 
THE BIG REASON AZURE COSMOS DB IS 
AN AWESOME FIT IS IT HAS 5. 9s AVAILABLE, 
WHICH MEANS 99. 99 OF THE TIME YOU 
CAN COUNT ON AZURE COSMOS DB WHEN 
YOU GLOBALLY DISTRIBUTE IT, TO BE 
ABLE TO BOTH PROCESS, READ, AND 
WRITE. IN ADDITION, AZURE COSMOS 
DB IS ONE OF THE FEW DATABASES THAT 
HAS AN SLA ON LATENCY. WE GUARANTEE 
THAT 99 OF POINT READS AND WRITES 
OF 1 KILO BYTE DOCUMENTS WILL BE 
EXECUTED IN A MILLISECOND, WHICH 
IS ALSO IMPORTANT BECAUSE YOU WANT 
THINGS TO BE INGESTED IN COSMOS 
DB VERY QUICKLY. THIS IS ALSO IMPORTANT 
BE CONNECTED TO LA LIGA IN GOOGLE 
BE CONNECTED TO LA LIGA IN GOOGLE 
ASSISTANT IN YOUR OWN DEVICES. NOW 
THE RAW RAZOR HTML, NO PROBLEM. 
ASSISTANT IN YOUR OWN DEVICES. NOW 
WHEN I AM TALKING TO THIS ASSISTANT 
SO IN THIS NBC WORKFLOW, THE JAVASCRIPT 
WHEN I AM TALKING TO THIS ASSISTANT 
WE HAVE CONVERTED ALL OF THESE CHANCE 
ENDS UP BEING DEPENDANT ON THE NBC 
WE HAVE CONVERTED ALL OF THESE CHANCE 
IN GDPR COMPLIANCE, LAST MATCH OF 
LAYER BECAUSE THE RAISER VIEWS HAVE 
IN GDPR COMPLIANCE, LAST MATCH OF 
ATHLETICO MADRID, HAPPENED A FEW 
ALL OF THE HTML. SO THE JAVASCRIPT 
ATHLETICO MADRID, HAPPENED A FEW 
DAYS AGO, A GET THE CONTENT. IT 
DEVS AND THE BACK END DEVS END UP 
DAYS AGO, A GET THE CONTENT. IT 
IS GOING TO NARRATE THE MATCH, SHOW 
STEPS ON EACH OTHER'S TOES AS THEY 
IS GOING TO NARRATE THE MATCH, SHOW 
ME WHAT WAS THE FINAL RESULT, NARRATE 
ARE MAKING CHANGES IN THESE PARALLEL 
ME WHAT WAS THE FINAL RESULT, NARRATE 
THE MATCH WITH YELLOW CARDS, RED 
WORKFLOWS. SINCE NBC IS A BACK END 
THE MATCH WITH YELLOW CARDS, RED 
CARDS. THIS IS TO LEVERAGE OF THE 
DEVELOPER THING, AND BACK END DEVS 
CARDS. THIS IS TO LEVERAGE OF THE 
POWERFUL CONTENT THAT LA LIGA OWNS, 
END UP IN CONTROL IN TERMS OF HOW 
POWERFUL CONTENT THAT LA LIGA OWNS, 
PROTECTED BY RIGHTS, AND SHOW THE 
MODELS ARE STRUCTURED, HOW THE BACK 
PROTECTED BY RIGHTS, AND SHOW THE 
CONTENT EMBEDDED IN THE ASSISTANT. 
POINTS FOR A JABS ARE STRUCTURED, 
CONTENT EMBEDDED IN THE ASSISTANT. 
THANKS TO THE POWER OF ONE SINGLE 
IT'S JUST NOT AS AN IDEAL WORKFLOW 
THANKS TO THE POWER OF ONE SINGLE 
PLATFORM RUNNING ON OUR BOT FRAME 
FOR FRONT END DEVS AND THE BACK 
PLATFORM RUNNING ON OUR BOT FRAME 
WORK CAPABILITY, WITH OUR AZURE 
END DEVS IS JUST IN CONTROL. SO 
WORK CAPABILITY, WITH OUR AZURE 
COGNITIVE SERVICES. THIS IS BASICALLY 
ALTHOUGH THIS IS NOT PERFECT, THAT 
COGNITIVE SERVICES. THIS IS BASICALLY 
WHAT IS LIFE. THIS IS WHAT IS LIFE 
WORKFLOW HAS WORKED FOR US FOR ALMOST 
WHAT IS LIFE. THIS IS WHAT IS LIFE 
NOW JAY DAYS. WE WANTED TO SHOW 
20 YEARS. BUT WE REALLY -- WE WENT 
NOW JAY DAYS. WE WANTED TO SHOW 
YOU WHAT WE ARE EXPERIENCING WITH 
AND REINVENTED IT BECAUSE WE WANTED 
YOU WHAT WE ARE EXPERIENCING WITH 
LA LIGA. SO LET ME GO BACK TO MY 
TO PULL IN THIS NEW AUDIENCE OF 
LA LIGA. SO LET ME GO BACK TO MY 
MACHINE, ONE SECOND, AND LET ME 
MACHINE, ONE SECOND, AND LET ME 
OUR SQL API IS WE MODEL YOUR DATA 
ESSENTIALLY IN JSON DOCUMENTS, AND 
YOU CAN QUERY IT USING JUST REGULAR 
OLD SELECT STAR FROM SQL. WHO'S 
AN EXAMPLE OF THAT HERE WITH OUR 
SQL OR CORE API. YOUR DATA IS MODELED 
IN JUST A JSON FORMAT, AND IT'S 
STORED IN COSMOS CONTAINERS. SO 
THE IDEA IS THAT BECAUSE COSMOS 
DB DOESN'T ENFORCE SCHEMA AT THE 
DATABASE LEVEL, THERE'S A LOT OF 
COOL FUNCTIONALITY THAT YOU CAN 
DO WITHIN YOUR COSMOS DB CONTAINERS 
THAT YOU WOULD NOT BE ABLE TO DO 
WITH THE RELATIONAL DATABASE, AND 
WE'RE GOING TO TALK ABOUT SOME OF 
THESE COOL USE CASES TODAY AS WELL. 
HERE, AS YOU CAN SEE, I HAVE A VERY 
SIMPLE JSON DOCUMENT THAT HAS USER 
NAME DISPLAYED, EMAIL, FIRST NAME, 
LAST NAME, AND THAT JSON DOCUMENT 
IS ALL STORED WITHIN ONE COSMOS 
CONTAINER. IF I WERE TO AT ON A 
FIELD IN THIS JSON DOCUMENT, I COULD 
STORE IT IN THE SAME CONTAINER BECAUSE 
SCHEMA IS NOT GOING TO BE ENFORCED 
IN THE SAME CONTAINER. THAT'S IMPORTANT 
TO PROCESS EVENTS IN ORDER. LET'S 
SAY IT'S BLACK FRIDAY AND YOU'RE 
BUYING YOUR KIDS GIFTS FOR THE HOLIDAYS 
AND YOU DECIDE YOU WANT TO BUY YOUR 
SON OR DAUGHTER, LET'S SAY YOU WANT 
TO BUY THEM A MODEL AIRPLANE, AND 
YOU ACCIDENTALLY ADD A MODEL CAR 
TO YOUR SHOPPING CART AND YOU REMOVE 
IT, AND THEN YOU ADD ON THE AIRPLANE 
AND YOU ORDER THE SHOPPING CART, 
AND YOU EXPECT TO RECEIVE THE MODEL 
CAR. HOWEVER, IF, LET'S SAY, WE 
WERE TO PROCESS THE CHANGE FEED 
AND WE WERE TO PROCESS THE CHECKOUT 
BEFORE WE WERE TO PROCESS THE ITEM 
REMOVAL, IT'S POSSIBLE THAT YOU 
COULD RECEIVE THE MODEL CAR INSTEAD 
OF THE MODEL PLANE, AND WE WOULDN'T 
HAVE PROCESSED REMOVING OR ADDING 
THE ITEMS FROM YOUR COLLECTION, 
FROM YOUR CART ESSENTIALLY. SO THE 
IDEA WITH THIS IS IT'S ABSOLUTELY 
CRITICAL THAT YOU'RE ABLE TO PROCESS 
THESE RETAIL ORDERS AND RETAIL EVENTS 
DEVELOPERS AND WE WANTED TO MAKE 
SHOW TO YOU ONE OF THE FUNNY GAMES 
OUR PLATFORM ACCESSIBLE TO ALL DIFFERENT 
SHOW TO YOU ONE OF THE FUNNY GAMES 
THAT WE HAVE MADE WITH THIS. THE 
TYPES OF DEVS. AND I'M CAREFUL TO 
THAT WE HAVE MADE WITH THIS. THE 
CAPABILITY TO BASICALLY, THROUGH 
SAY THAT WE EVOLVED, WE DIDN'T CHANGE, 
CAPABILITY TO BASICALLY, THROUGH 
THE ASSISTANT, SEND A SELFIE AND 
BECAUSE THE TRADITIONAL APPROACH 
THE ASSISTANT, SEND A SELFIE AND 
GET BACK A MESSAGE WHERE YOU CAN 
IS STILL TOTALLY VALID. WE'VE MADE 
GET BACK A MESSAGE WHERE YOU CAN 
BE COMPARED WERE MAYORS. NOT ONLY 
IT SO THAT YOU CAN IMPLEMENT IN 
BE COMPARED WERE MAYORS. NOT ONLY 
A FUNNY GAME, YOU CAN SEE THE PICTURES 
BOTH TYPES. IN MBC OR AS A FRONT 
A FUNNY GAME, YOU CAN SEE THE PICTURES 
OF THE PLAYERS P WHEN THEY WERE 
END DEV, JUST TOTALLY DRIVING EVERYTHING 
OF THE PLAYERS P WHEN THEY WERE 
6, 9, AND 11 YEARS OLD. IT'S CAPABLE 
WITH JAVASCRIPT. SO HE SAID THAT 
6, 9, AND 11 YEARS OLD. IT'S CAPABLE 
TO FIND THOSE PLAYERS AMONG A DATABASE 
ENJOYABLE SOFTWARE IS ABOUT PUTTING 
TO FIND THOSE PLAYERS AMONG A DATABASE 
OF MORE THAN 800 PLAYERS. IT SAVES 
PEOPLE IN THE MIDDLE. AND SEEING 
OF MORE THAN 800 PLAYERS. IT SAVES 
THAT, THAT KID LOOKS MORE SIMILAR 
HOW PEOPLE USE THE SOFTWARE AS OPPOSED 
THAT, THAT KID LOOKS MORE SIMILAR 
TO THAT ADULT THAN ANY OTHER ONE. 
TO PUTTING TECHNOLOGY IN THE CENTER 
TO THAT ADULT THAN ANY OTHER ONE. 
INSTEAD OF SHOWING YOU ONLY THIS, 
AND SEEING WHAT THE TECHNOLOGY ALLOWS. 
INSTEAD OF SHOWING YOU ONLY THIS, 
LET'S SWITCH HERE, LET ME DO THE 
SO, YES, HE WAS TALKING ABOUT OFFICE 
LET'S SWITCH HERE, LET ME DO THE 
DEMO LIVE. LET'S CHECK WHO I LOOK 
365, BUT I THINK THAT THIS TOTALLY 
DEMO LIVE. LET'S CHECK WHO I LOOK 
MORE SIMILAR TO. THIS IS ME. OKAY, 
APPLIES TO DEVS, TOO, FOR ANY COMPANY 
MORE SIMILAR TO. THIS IS ME. OKAY, 
LET'S CHECK. I CANNING COMPARED 
THAT BUILDS APPS, API'S OR TOOLS 
LET'S CHECK. I CANNING COMPARED 
WITH MEN WORKS MEN, OR ALL WHICH 
THAT ARE USED BY TEAMS, COMPRISED 
WITH MEN WORKS MEN, OR ALL WHICH 
IS QUITE COOL.  COMPARED WITH MEN 
OF DIFFERENT DEV TYPES, WE NEED 
IS QUITE COOL.  COMPARED WITH MEN 
WORKS MEN, OR ALL WHICH IS QUITE 
COOL.B 
TO MAKE SURE WE'RE BEING INCLUSIVE 
WORKS MEN, OR ALL WHICH IS QUITE 
COOL.B 
COMPARED WITH MEN WORKS MEN, OR 
TO ALL OF THE DEVS. THIS INCREASES 
COMPARED WITH MEN WORKS MEN, OR 
ALL WHICH IS QUITE 
COOL.E COMPARED WITH MEN 
WORKS MEN, OR ALL WHICH IS 
QUITE COOL. 
THE TALENT AND TECHNOLOGY STACK 
ALL WHICH IS QUITE 
COOL.E COMPARED WITH MEN 
WORKS MEN, OR ALL WHICH IS 
QUITE COOL. 
I TAKE A PICTURE OF MYSELF, LIMIT'S 
I TAKE A PICTURE OF MYSELF, LIMIT'S 
SEE WHAT IT COMES IN A FEW SECONDS. 
SEE WHAT IT COMES IN A FEW SECONDS. 
WE ARE COMPARING AND ANALYZING. 
WE ARE COMPARING AND ANALYZING. 
IN MY CASE, OKAY, I LOOK MORE SIMILAR 
IN MY CASE, OKAY, I LOOK MORE SIMILAR 
TO UNDERSTAND FOR COSMOS DB AS WELL 
FOR THIS SESSION. BUT OTHER THAN 
THAT, YOU DON'T NEED TO KNOW TOO 
MUCH MORE TO GET A LOT OUT OF THE 
USE CASES I'LL TALK ABOUT. OF PEOPLE 
WHO HAVE USED COSMOS DB, WHO HAS 
USED THE CHANGE FEED BEFORE? WE'VE 
GOT A MUCH LOWER NUMBER NOW, WHICH 
IS GOOD BECAUSE THAT'S WHAT I'M 
GOING TO BE TALKING ABOUT TODAY. 
LUCKILY, IN ORDER TO USE THE CHANGE 
FEED, YOU REALLY DON'T NEED TO KNOW 
VERY MUCH ABOUT IT. THE IDEA WITH 
THE CHANGE FEED IS IT'S A SORTED 
LIST OF DOCUMENTS IN A COSMOS CONTAINER 
THAT'S BASED ON WHICH EACH DOCUMENT 
WAS LAST MODIFIED. SO THE CHANGE 
FEED IS GOING TO KEEP TRACK OF UPDATES 
AND INSERTS, AND YOU'LL BE ABLE 
TO ESSENTIALLY SEE THE ORDER IN 
WHICH DOCUMENTS WERE UPDATED OR 
INSERTED IN COSMOS DB. IN THE CHANGE 
FEED, WE'RE GOING TO STORE THE LATEST 
VERSION OF EACH DOCUMENT. SO IT 
ISN'T POSSIBLE TO SEE THE CHANGES 
FOR EACH DOCUMENT, BUT IT IS POSSIBLE 
TO VIEW THE CHANGE FEED AT ANY TIME 
ESSENTIALLY IN ORDER. THE IDEA HERE 
IN AZURE COSMOS DB, WHEN YOU SUBSCRIBE 
TO THE CHANGE FEED, WE CAN GUARANTEE, 
WHEN YOU'RE PROCESSING EVENTS FOR 
EACH PARTITION IN COSMOS DB IN ORDER. 
SO YOU'RE ABLE TO PROCESS COSMOS 
DB DIFFERENT EVENTS FROM DIFFERENT 
PARTITION S IN PARALLEL. THERE'S 
THREE PARTITIONS HERE. WE'RE ABLE 
TO PROCESS EVENTS FOR EACH PARTITION. 
THE IDEA HERE IS THAT YOU CAN SPECIFY 
A PARTITION KEY THAT IS YOUR ORDER 
I. D. , SO YOU CAN GUARANTEE THE 
ORDER I. D. s WILL BASICALLY STAY 
TOGETHER IN ONE PLACE, AND WHEN 
WE DO THIS, WE CAN GUARANTEE THAT 
ALL THESE ORDER IDs ARE GOING TO 
LIVE ON THE SAME PHYSICAL PARTITION. 
EVEN THOUGH WE'RE WITH OUR CHANGE 
FEED, HOWEVER WE'RE PROCESSING AND 
SUBSCRIBING TO THE CHANGE FEED, 
EVEN THOUGH WE'RE KIND OF PARALYZING 
THE PROCESS, PROCESSING ACROSS DIFFERENT 
PARTITIONS, WE'RE ABLE TO GUARANTEE, 
BY PARTITIONING ON ORDER ID, THAT 
EVERYTHING PERTAINING TO ONE ORDER 
ID OR USER SESSION IS ESSENTIALLY 
DIVERSITY IN OUR SOFTWARE, AND WHICH 
IS WHAT DRIVES INNOVATION AND CROSS-PLATFORM 
SELLING AND THE END USERS ARE THE 
ONES WHO BENEFIT IN THE END. FOR 
TO -- I THINK THAT'S BECAUSE OF 
US, THAT MEANT THAT C SHARP AND 
TO -- I THINK THAT'S BECAUSE OF 
THE MOHAWK, THE HAIR STYLE. IT'S 
JAVASCRIPT BECAME EQUAL CITIZENS 
THE MOHAWK, THE HAIR STYLE. IT'S 
VERY FUNNY. THIS IS A GAME FOR FUN, 
IN OUR CLIENT'S SITES, SO WE WERE 
VERY FUNNY. THIS IS A GAME FOR FUN, 
I SAID, THAT HAS BEEN FOR THE EXPERIENCE, 
ABLE TO TAKE ADVANTAGE OF WELL-KNOWN 
I SAID, THAT HAS BEEN FOR THE EXPERIENCE, 
BUT IT IS CONSUMING, THE SAME ASSISTANT 
FRONT END FRAMEWORK FEATURES LIKE 
BUT IT IS CONSUMING, THE SAME ASSISTANT 
THAT I HAVE SHOWED TO YOU. LET ME 
MORE EFFICIENT DOWNLOADING, WELL 
THAT I HAVE SHOWED TO YOU. LET ME 
SWITCH TO MY DEVICE. AND FOR THIS, 
DEFINED PATTERNS FOR PROJECT SETUP 
SWITCH TO MY DEVICE. AND FOR THIS, 
I'M GOING ON SHOW YOU A COOL DEMO. 
AND DATA MANAGEMENT AND OF COURSE, 
I'M GOING ON SHOW YOU A COOL DEMO. 
WHERE WE HAVE CREATED ANOTHER COMPLETELY 
OPEN SOURCE LIBRARIES AND TOOLS 
WHERE WE HAVE CREATED ANOTHER COMPLETELY 
DIFFERENT CHANNEL. YOU HAVE BEEN 
AND ALL OF THE GOOD STUFF THAT COMES 
DIFFERENT CHANNEL. YOU HAVE BEEN 
WORKING IN SKYPE, YOU HAVE SEEN 
WITH LONG -- MANY YEARS OF OPEN 
WORKING IN SKYPE, YOU HAVE SEEN 
GOOGLE ASSISTANT, THE EXPERIENCE, 
SOURCE PROJECTS WITH THOUSANDS OF 
GOOGLE ASSISTANT, THE EXPERIENCE, 
ALL OF THEM POWERED BY THE SAME 
PEOPLE BEHIND THEM. SO WHAT'S EVEN 
ALL OF THEM POWERED BY THE SAME 
PLATFORM. WHAT IS IN MY PHONE. I'M 
CHALLENGING ABOUT IMPLEMENTING FRONT 
PLATFORM. WHAT IS IN MY PHONE. I'M 
GOING TO POINT TO THIS SIDE, I HAVE 
END FRAME WORKS IN A CMS? SO AS 
GOING TO POINT TO THIS SIDE, I HAVE 
LESS LIGHT. LET ME SHOW IT TO YOU. 
I MENTIONED, FRONT END FRAMEWORKS 
LESS LIGHT. LET ME SHOW IT TO YOU. 
I OPEN THIS, YOU CAN WATCH IT. NOW, 
ARE AWESOME, BUT THEY ASSUME A PARTICULAR 
I OPEN THIS, YOU CAN WATCH IT. NOW, 
LET ME MAP THIS PLACE, I'M GOING 
WORKFLOW AND THAT IS THAT DEVS ARE 
LET ME MAP THIS PLACE, I'M GOING 
INTERACT IN A MORE IMMERSIVE EXPERIENCE. 
CONTROLLING THE COMPOSITION. SO 
INTERACT IN A MORE IMMERSIVE EXPERIENCE. 
THIS IS AUGUSTMENTED EXPERIENCE 
MAKING THAT PART DYNAMIC REQUIRED 
THIS IS AUGUSTMENTED EXPERIENCE 
SINCE YOU CREATED YOUR COSMOS CONTAINER. 
THESE THREE PARTS OF THE CHANGE 
FEED ARE GOING TO BE REALLY IMPORTANT 
IN THE USE CASES I'M GOING TO TALK 
ABOUT TODAY. ONE KEY ASPECT OF THE 
CHANGE FEED THAT I WANT EVERYONE 
TO REMEMBER IS IT'S VERY EASY TO 
DESCRIBE CHANGES IN THE CHANGE FEED 
USING AN AZURE FUNCTION. THERE'S 
THREE WAYS THAT YOU CAN SUBSCRIBE 
TO THE CHANGE FEED. THE IDEA IS 
THAT, AS WE GO DOWN THIS LIST, IT 
GETS HARDER AND COMPLICATED, AND 
YOU NEED TO HAVE A DEEPER UNDERSTANDING 
OF THE CHANGE FEED. THE TRADEOFF 
IS, AS YOU KIND OF MOVE DOWN THIS 
LIST, YOU'LL ALSO GET MORE CONTROL. 
WITH AZURE FUNCTIONS YOU'RE FOCUSING 
MORE ON YOUR BUSINESS LOGIC, YOU 
CLICK DEPLOY, IT'S DEPLOYED, AND 
THAT'S ALL YOU NEED TO WORRY ABOUT. 
WITH THE CHANGE FEED PROCESSOR LIBRARY, 
YOU HAVE TO IMPLEMENT A PROCESS 
CHANGES METHOD. THAT'S STILL VERY 
SIMPLE, BUT YOU DO HAVE TO MANAGE 
SERVERS IN THAT CASE SINCE YOU MIGHT 
BE DEPLOYING THEM ON A VM OR SOMETHING 
LIKE THAT. THEN WITH THIS, IF YOU 
WANTED TO IMPLEMENT YOUR OWN CHANGE 
FEED PROCESSOR LIBRARY WITH THE 
SQL API SDKs, YOU COULD DO THAT 
GOING TO BE STORED WITHIN ONE PARTITION 
KEY, AND THEN IN TURN WE GUARANTEE 
THAT EACH PARTITION KEY WILL BE 
STORED TOGETHER ON THE SAME PHYSICAL 
PARTITION SO, IF WE PROCESS EVENTS 
IN ORDER FOR THAT PHYSICAL PARTITION 
ON THE LEFT, WE WILL GUARANTEE THAT 
WE'RE PROCESSING ALL EVENTS THAT 
PERTAIN TO A CERTAIN ORDER ID ESSENTIALLY 
IN THE CORRECT SEQUENCE. IN THIS 
CASE, IN THE EVENT I MENTIONED BEFORE 
WHERE WE END UP BUYING A MODEL PLANE 
AND END UP RECEIVING A MODEL CAR. 
IT'S ALSO VERY USEFUL TO BE ABLE 
TO REPLAY PAST EVENTS. SO FOR EXAMPLE, 
LET'S SAY WE HAVE A SCENARIO WHERE 
THERE'S AN OUTAGE WITHIN A MICROSERVICE. 
MAYBE THERE WAS LIKE BAD LOGIC OR 
SOMETHING LIKE THAT, AND YOU NEED 
TO KIND OF TAKE THE MICROSERVICE 
DOWN WHEREVER IT'S DEPLOYED. WHEN 
YOU DO THIS, YOU'LL PROBABLY NEED 
TO TAKE SOME DOWN TIME FOR THAT 
MICROSERVICE. LET'S SAY IT'S A MICROSERVICE 
THAT PROCESSES SHIPPING LABELS, 
YOU'RE PROBABLY NOT GOING TO BE 
ABLE TO PROCESS ANY SHIPPING LABELS 
-- AUGMENTED. HEARTBEAT. LET ME 
SOME CUSTOMIZATION. HERE'S A CLOSER 
-- AUGMENTED. HEARTBEAT. LET ME 
TALK TO HIM. WHO IS LIONEL MESSI. 
LOOK AT WHAT I MEAN BY THE COMPOSITION 
TALK TO HIM. WHO IS LIONEL MESSI. 
>> LET ME LOOK IT UP, ONE MINUTE. 
NEEDING TO BE KNOWN AT DEVELOPMENT 
>> LET ME LOOK IT UP, ONE MINUTE. 
LIONEL MESSI IS A PROFESSIONAL SOCCER 
TIME. I TOOK THE SAMPLES FROM THE 
LIONEL MESSI IS A PROFESSIONAL SOCCER 
PLAYER -- >> THIS INFORMATION IS 
DOCUMENTATION OF THE THREE MAIN 
PLAYER -- >> THIS INFORMATION IS 
PROVIDED, NOW TO SHOW THE EXPERIENCE 
FRONT END FRAMEWORKS, AND THEY GIVE 
PROVIDED, NOW TO SHOW THE EXPERIENCE 
THIS A MORE IMMERSIVE WAY. >> BORN 
EXAMPLES OF HOW CODE NEEDS TO BE 
THIS A MORE IMMERSIVE WAY. >> BORN 
ON JUNE 24, 1987, IS THERE ANYTHING 
NESTED TO SUPPORT NESTED COMPONENTS 
ON JUNE 24, 1987, IS THERE ANYTHING 
ELSE I CAN HELP YOU WITH. >> WHAT'S 
AND FOR ALL THEM, EVERYTHING IS 
ELSE I CAN HELP YOU WITH. >> WHAT'S 
LA LIGA? IF I ASK WHAT IS LA LEAGUE, 
DEFINED EXPLICITLY IN THE CODE. 
LA LIGA? IF I ASK WHAT IS LA LEAGUE, 
A WE CAN SHOW VIDEOS, ADVERTISING, 
AND WHEN YOU DO HAVE SOME KIND OF 
A WE CAN SHOW VIDEOS, ADVERTISING, 
SHOW A VIDEO. >> THIS WAS GREAT. 
DYNAMIC COMPONENTS, IT'S USUALLY 
SHOW A VIDEO. >> THIS WAS GREAT. 
THE LOCALS ARE A BIT MAD. >> THIS 
HARD QUOTED RULES, SO YOU'LL AN 
THE LOCALS ARE A BIT MAD. >> THIS 
EXPERIENCE CAN BE GEO-LOCATED. >> 
IF STATEMENT IN YOUR REACT CODE, 
EXPERIENCE CAN BE GEO-LOCATED. >> 
THE WEIRDEST THINGS. >> LET ME SHOW 
WHICH IS A COMPONENT AT PAGE FRONT 
THE WEIRDEST THINGS. >> LET ME SHOW 
YOU ONE MORE. BARCELONA FULL SQUAD. 
END TIME. SO IT'S STILL -- IT CAN 
YOU ONE MORE. BARCELONA FULL SQUAD. 
FOR BARCELONA FULL SQUAD. >> BARCELONA 
BE -- IT CAN BE SOMETHING THAT'S 
FOR BARCELONA FULL SQUAD. >> BARCELONA 
FULL SQUAD. >> LET ME DO IT AGAIN. 
TOTALLY DYNAMIC BASED ON WHAT THE 
FULL SQUAD. >> LET ME DO IT AGAIN. 
AUTHOR IS PLACING THERE. SO WHAT 
WE BUILD AND WE CALL IT JAVASCRIPT 
AS WELL. HOWEVER, THAT'S A LITTLE 
BIT HARDER. YOU HAVE TO MANAGE CHECKPOINTS 
AND CHANGE FEED READING FROM DIFFERENT 
PARTITIONS, AND THAT'S A LITTLE 
MORE COMPLEX. WE'RE GOING TO FOCUS 
ON USER FUNCTIONS AND CHANGES TO 
THE LIBRARY. RIGHT NOW I'M GOING 
TO SHOW PROBABLY THE WORLD'S SIMPLEST 
DEMO, AND IT'S AN AZURE FUNCTION 
THAT SUBSCRIBES TO THE COSMOS DB 
CHANGE FEED. SO HERE I HAVE A COSMOS 
DB CONTAINER, A DATABASE CALLED 
FUNCTION SIMPLE THAT HAS A CONTAINER 
NAMED COLLECTION THAT HAS DIFFERENT 
DOCUMENTS. I'M GOING TO -- I'VE 
WRITTEN A VERY SIMPLE AZURE FUNCTION 
HERE. WHICH ESSENTIALLY WILL BE 
TRIGGERED BY ANY UPDATE OR INSERT 
IN MY COSMOS COLLECTION. SO I'LL 
START THE LOG DOWN HERE. IF I ADD 
WHILE YOU HAVE THAT MICROSERVICE 
DOWN. HOWEVER, YOU PROBABLY WANT 
TO KEEP OTHER PARTS OF YOUR MICROSERVICES 
ARCHITECTURE WORKING AND OTHER MICROSERVICES 
FUNCTIONING AS NORMAL. SO HERE LET'S 
SAY ONE MICROSERVICE WERE TO GO 
DOWN AND BE UNAVAILABLE, WE STILL 
WANT THE OTHER MICROSERVICES TO 
PROCESS WITH BUSINESS AS USUAL. 
EVENTUALLY, WE'LL PROBABLY BRING 
THE MICROSERVICE THAT WAS DOWN BACK ONLINE, AND WHEN 
WE DO THAT, IF IT'S SHIPPING LABELS 
OR IF IT'S PAYMENTS, WE'LL NEED 
TO GO AND PROCESS ALL THE SHIPPING 
LABELS AND PROCESS ALL THE PAYMENTS 
AND CHARGE THE APPROPRIATE CUSTOMERS 
AND MAKE THE APPROPRIATE SHIPPING 
LABELS. WITH THIS, IT'S VERY CRITICAL 
WE HAVE THE ABILITY TO REPLAY PAST 
EVENTS. THE SOLUTION TO THIS IS 
YOU CAN MANUALLY RESET THE START 
TIME AND REPLAY EVENTS ESSENTIALLY 
FROM THE CHANGE FEED. SO IF WE NEEDED 
TO TAKE OUR PAYMENT SYSTEM OFFLINE 
>> BARCELONA FULL SQUAD. IT FAILS, 
>> BARCELONA FULL SQUAD. IT FAILS, 
I DON'T KNOW WHY. IN THIS CASE, 
I DON'T KNOW WHY. IN THIS CASE, 
WHAT WE HAVE SHOWN TO YOU, IS A 
SERVICES, IT'S A SET OF MPM PACKAGES 
WHAT WE HAVE SHOWN TO YOU, IS A 
COMPLETELY DIFFERENT CHANNEL, USING 
AND APP STARTERS THAT MAKE IT POSSIBLE 
COMPLETELY DIFFERENT CHANNEL, USING 
THE SAME PLATFORM. LET'S SWITCH 
TO BUILD JAVASCRIPT DEV APPS POWERED 
THE SAME PLATFORM. LET'S SWITCH 
AGAIN TO THE 
SLIDE. I'M GOING TO 
BY DYNAMIC SERVICE SIDE LAYOUT DATA. 
AGAIN TO THE 
SLIDE. I'M GOING TO 
TRY TO EXPLAIN HOW ALL OF THIS MAGIC 
THEY STAY TRUE TO THE HEADLESS CMS 
TRY TO EXPLAIN HOW ALL OF THIS MAGIC 
HAS BEEN DONE. SO, HERE YOU HAVE 
CONCEPTS THAT ALLOW JAVASCRIPT DEVS 
HAS BEEN DONE. SO, HERE YOU HAVE 
THE ARCHITECTURAL DIAGRAM OF ALL 
TO WORK INDEPENDENTLY AND BE CONTROL 
THE ARCHITECTURAL DIAGRAM OF ALL 
OF THIS. AND HIGHLIGHTED IN GREEN, 
OF THE FRONT END, WHILE PRESERVING 
OF THIS. AND HIGHLIGHTED IN GREEN, 
LIGHT GREEN, YOU CAN SEE THE FOUR 
THE PERSONALIZATION CAPABILITIES 
LIGHT GREEN, YOU CAN SEE THE FOUR 
CHANCE THAT I SHOW TO YOU IN THE 
THAT I SHOWED YOU FROM THE TRADITIONAL 
CHANCE THAT I SHOW TO YOU IN THE 
DEMO. IT IS SKYPE, IT IS GOOGLE 
APPROACH. BEFORE WE DIVE INTO THE 
DEMO. IT IS SKYPE, IT IS GOOGLE 
ASSISTANT WHERE WE HAVE BUILT -- 
ARCHITECTURE DETAILS, LET'S GET 
ASSISTANT WHERE WE HAVE BUILT -- 
YOU KNOW SKYPE IS A CHANNEL BUILT IN. 
AN INTRODUCTION TO THE CODE. SO 
YOU KNOW SKYPE IS A CHANNEL BUILT IN. 
BUT FOR GOOGLE ASSISTANT WE HAVE 
THIS IS A SAMPLE APPLICATION THAT 
BUT FOR GOOGLE ASSISTANT WE HAVE 
CREATED A NEW CONNECTOR, THIS IS 
IMPLEMENTS JS, THIS ISN'T JS ITSELF. 
CREATED A NEW CONNECTOR, THIS IS 
CONNECTED TO THE LINE CHANNEL. THIS 
SO I'M IMPORTING JS, AND AT FIRST, 
CONNECTED TO THE LINE CHANNEL. THIS 
CONNECTOR IS BUILDING NO JS, TODAY 
IT JUST LOOKS LIKE YOUR STANDARD 
CONNECTOR IS BUILDING NO JS, TODAY 
WE ARE ANNOUNCING A PART OF THIS 
REACT APP. IT HAS SOURCE, WITH ALL 
WE ARE ANNOUNCING A PART OF THIS 
CONNECTOR WILL BE ALSO AVAILABLE 
OF THE COMPONENTS, THEY'RE JUST 
CONNECTOR WILL BE ALSO AVAILABLE 
TO DOWNLOAD OPEN SOURCE. THEN YOU 
COMPONENTS, THIS IS ACTUALLY BASED 
TO DOWNLOAD OPEN SOURCE. THEN YOU 
HAVE SEEN THE WINDOWS APP, THIS 
KIND OF ON CREATED APP, WE'RE EXTENDING 
HAVE SEEN THE WINDOWS APP, THIS 
APPLICATION, WITH CONCRETE FEATURES 
IT TO MAKE OUR STARTER APPS. BUT 
APPLICATION, WITH CONCRETE FEATURES 
OR UPDATE A DOCUMENT IN MY COSMOS 
DB CONTAINER, THIS WILL BASICALLY 
TRIGGER THAT AZURE FUNCTION. IF 
I ADD ID85, HIT SAVE, I'VE DONE 
A WRITE TO THIS CONTAINER, AND IT 
SHOULD SHOW UP IN THE CHANGE FEED. 
SO THE IDEA IS THAT I EXECUTED THE 
LOGIC HERE AND SAW THAT A DOCUMENT 
WAS MODIFIED AND OUTPUTTED THAT 
DOCUMENT'S ID. SO ESSENTIALLY WHEN 
I DID THAT INSERT OR UPDATE, I TRIGGERED 
THIS BUSINESS LOGIC HERE AND EXECUTED 
EVERYTHING WITHIN THIS -- WITHIN 
THAT I'M HIGHLIGHTING HERE ESSENTIALLY. 
SO I JUST OUTPUTTED THE NUMBER OF 
DOCUMENTS THAT WERE MODIFIED AND 
THE DOCUMENT ID. THROUGHOUT THIS 
SESSION, WE'RE OBVIOUSLY GOING TO 
PUT MUCH MORE COMPLEX LOGIC WITHIN 
AZURE FUNCTIONS AND SEE HOW WE CAN 
VERY EASILY WITH A FEW LINES OF 
CODE SOLVE INCREDIBLE LARGE SCALE 
AND WE STILL WANTED TO BE ABLE TO 
CALCULATE TAX AND PROCESS ORDERS 
AND FULFILLMENT, WE COULD DO THAT, 
AND WHEN WE WANTED THE PAYMENT TO 
COME BACK ON LINE, WE COULD REWIND 
THE FEED TO THE PAYMENT PERIOD AND 
START SO EVERYTHING COULD CONTINUE 
AS USUAL. THIS IS BASICALLY HOW 
AZURE FUNCTIONS AND THE CHANGE FEED 
CAN HELP YOU IMPLEMENT A MICROSERVICES 
ARCHITECTURE WITH EVENT SOURCING. 
THERE'S AN AWESOME VIDEO AT THE 
END OF MY SESSION THAT SPENDS ABOUT 
AN HOUR TALKING ABOUT THIS. SO I'D 
RECOMMEND WATCHING THAT FOR MORE 
INFORMATION. I MENTIONED AT THE 
BEGINNING OF THIS SESSION THAT WE'RE 
GOING TO PROGRESSIVELY GO DEEPER 
AND DEEPER WITHIN EACH USE CASE. 
THAT WAS THE FIRST OF OUR THREE 
USE CASES. WITH NUMBER TWO, WE'RE 
GOING TO GO A LITTLE DEEPER, AND 
WE'RE GOING TO SHOW YOU HOW WE CAN 
ACTUALLY IMPLEMENT THIS SOLUTION 
USING THE CHANGE FEED PROCESSOR 
LIBRARY. WITH THIS USE CASE, WE'RE 
GOING TO TALK ABOUT HOW YOU COULD 
THAT IS AGAIN CONNECTED THE BOT 
LET ME JUMP TO THIS HOME CONTAINER 
THAT IS AGAIN CONNECTED THE BOT 
SERVICE AND THE CAPABILITIES TO 
COMPONENT. AND THE INTERESTING THING 
SERVICE AND THE CAPABILITIES TO 
SEND AND RECEIVE. YOU HAVE SEEN 
HERE IS THAT WE HAVE A HELPER COMPONENT 
SEND AND RECEIVE. YOU HAVE SEEN 
CUSTOM IOS APP CREATED IN THIS CASE, 
FROM OUR LIBRARY CALLED PLACE HOLDER. 
CUSTOM IOS APP CREATED IN THIS CASE, 
WHERE I CAN INTERACT WITH AN AUGMENTED 
SO THIS IS KIND OF HOW WE DEFINE 
WHERE I CAN INTERACT WITH AN AUGMENTED 
REALITY EXPERIENCE. YOU HAVE ALSO 
THE HOLES IN YOUR FRONT END CODE. 
REALITY EXPERIENCE. YOU HAVE ALSO 
THE CAPABILITIES AND OTHER CHANCE 
SO WE HAVE A CLI COMMAND CAUSED 
THE CAPABILITIES AND OTHER CHANCE 
UP TO YOUR IMAGINATION OF THE CAPABILITIES 
JS START. AND WHEN I START THAT, 
UP TO YOUR IMAGINATION OF THE CAPABILITIES 
ON YOUR COMPANIES TO CONNECT WITH 
IT LAUNCHES THE APPLICATION LOCALLY. 
ON YOUR COMPANIES TO CONNECT WITH 
ALL OF THESE CAPABILITIES. IN THE 
SO IT'S SIMILAR TO THE START AND 
ALL OF THESE CAPABILITIES. IN THE 
CORE PART OF THIS, WHAT IS IT, YOU 
CREATE REACT APP. SO THIS IS JUST 
CORE PART OF THIS, WHAT IS IT, YOU 
KNOW, BASICALLY BOT FRAME WORK WITH 
THE -- A SAMPLE, A REALLY SIMPLE 
KNOW, BASICALLY BOT FRAME WORK WITH 
THE LOGIC, ALSO SCALE WITH THIS, 
DEMO HERE AND I'M JUST SHOWING WHAT 
THE LOGIC, ALSO SCALE WITH THIS, 
IN A DIFFERENT WAY, THROUGH THE 
IT DOES BECAUSE I'LL BRING IT BACK 
IN A DIFFERENT WAY, THROUGH THE 
FLEXIBILITY OF THE APP SERVICES. 
LATER IN MY PRESENTATION. BUT IT'S 
FLEXIBILITY OF THE APP SERVICES. 
WE ARE TRACKING OF COURSE EVERY 
SHOWING YOU A LIST OF SPORTING EVENTS 
WE ARE TRACKING OF COURSE EVERY 
SINGLE QUESTION AND EVERY SINGLE 
AND THEY'RE REPETITIVE HERE BECAUSE 
SINGLE QUESTION AND EVERY SINGLE 
ANSWER THROUGH APP AND STORING ALL 
THEY'RE PULLING FROM TEST DATA IN 
ANSWER THROUGH APP AND STORING ALL 
OF THIS IN STORAGE CHECKOUT, TO 
MY PROJECT. AND OF COURSE, WITH 
OF THIS IN STORAGE CHECKOUT, TO 
HAVE REPORTING ON TOP OF THAT. WE 
THE START APP, WE HAVE HOT RELOADING, 
HAVE REPORTING ON TOP OF THAT. WE 
KEEP SECURE ALL OF THE INFORMATION 
KEEP SECURE ALL OF THE INFORMATION 
ABOUT THE KEYS THAT WE NEED TO USE 
ABOUT THE KEYS THAT WE NEED TO USE 
FOR CONSUMING ALL OF THOSE SERVICES. 
FOR CONSUMING ALL OF THOSE SERVICES. 
IN THE MOST IMPORTANT PART, THE 
IN THE MOST IMPORTANT PART, THE 
SERVICES THAT WE ARE CON SUCHLING. 
SERVICES THAT WE ARE CON SUCHLING. 
BUSINESS PROBLEMS. FOR THE REMAINDER 
OF THIS SESSION, I WANT TO FOCUS 
ON PATTERNS THAT WE USE THE CUSTOMER 
CHANGE FEED FOR. THE FIRST USE CASE 
THAT I'M GOING TO TALK ABOUT IS 
EVENT SOURCING IN RETAIL. THIS IS 
A VERY, VERY COMMON USE CASE, AND 
THERE'S A VIDEO THAT I'M GOING TO 
POST AT THE END OF THE SESSION THAT 
TALKS ABOUT JET. COM'S ARCHITECTURE 
THAT'S BUILT USING EVENT SOURCING 
WITH THE CHANGE FEED. OF MY THREE 
USE CASES, I'M GOING TO SPEND THE 
LEAST TIME TALKING ABOUT THIS ONE 
BECAUSE THERE'S ALREADY AN AWESOME 
VIDEO THAT I'LL BE SHARING IN THE 
CALL TO ACTION SLIDE OF MY SESSION. 
HERE'S KIND OF A SAMPLE MICROSERVICES 
ARCHITECTURE, WHERE WE HAVE DIFFERENT 
MICROSERVICES THAT NEED TO COMMUNICATE 
WITH EACH OTHER. THINK OF EACH MICROSERVICE 
AS AN INDEPENDENT SUBSYSTEM THAT 
KIND OF PERFORMS A SAMPLE ACTION. 
SO IN THE TOP LEFT WE HAVE OUR TAX 
CALCULATIONS MICROSYSTEM THAT DOES 
BUILD A MATERIALIZED VIEW FOR A 
REALTIME LEADERBOARD IN GAMING. 
AZURE COSMOS DB IS AWESOME FOR GAMING, 
AND ONE OF OUR FIRST CUSTOMERS WAS 
NEXT GAMES, AND THEY BUILT A WALKING 
DEAD VIDEO GAME USING AZURE COSMOS 
DB, AND IT WAS REALLY, REALLY AWESOME 
BECAUSE THEY WERE ABLE TO BUILD 
A REALTIME LEADERBOARD TO DISPLAY 
PLAYER SCORES. THIS VIDEO GAME WAS 
A MASSIVE MULTIPLAYER GAME THAT 
NEEDED TO SCALE VERY SIGNIFICANTLY, 
AND AZURE COSMOS DB, BECAUSE OF 
ITS GLOBAL DISTRIBUTION AND SLAs 
ON LATENCY, IS A REALLY AWESOME 
FIT FOR THESE TYPES OF USE CASES. 
AS YOU CAN SEE HERE ON KIND OF A 
SCREENSHOT ON THE RIGHT, THIS IS 
KIND OF LIKE THE PLAYER EXPERIENCE 
IN THE GAME . YOU'RE TRYING TO GET 
POINTS AND SUCH, AND YOUR REALTIME 
LEADERBOARD IS CONSISTENTLY DISPLAYED 
WITH UP TO DATE LEADERBOARD STATS. 
SO WE'LL TALK ABOUT HOW WE COULD 
IMPLEMENT THIS KIND OF USE CASE 
USING THE CHANGE FEED PROCESSOR 
AND IF I CHANGE SOME CODE IN MY 
COPE REACT -- SO THE SAME THING 
AS YOUR STANDARD CREATE REACT APP. 
SO THE SDK STARTED, BECAUSE A FEW 
OF OUR DEVS HAD SOME GOOD IDEAS 
THE BOT INTELLIGENCE. OF COURSE 
ABOUT JAVASCRIPT AND THEY PITCHED 
THE BOT INTELLIGENCE. OF COURSE 
NOTHING OF THIS COULD BE DONE WITHOUT 
THIS TO THE COMPANY. THEY WERE REALLY 
NOTHING OF THIS COULD BE DONE WITHOUT 
Q AND A, WHICH THEY UNDERSTAND. 
DETERMINED ON HAVING THIS BEING 
Q AND A, WHICH THEY UNDERSTAND. 
BUT FOR SOME OF THE BUSINESS THAT 
OPEN SOURCE SO THEY STARTED TALKING 
BUT FOR SOME OF THE BUSINESS THAT 
I SHOW IT TO YOU, YOU HAVE SEEN 
ABOUT THAT RIGHT AWAY. SO IF YOU'RE 
I SHOW IT TO YOU, YOU HAVE SEEN 
ME INTERACTING WITH MY SPEECH. YOU 
A COMPANY THAT WANTS TO GO IN THAT 
ME INTERACTING WITH MY SPEECH. YOU 
HAVE SEEN MY INTERACTING WITH WHAT 
ROUTE, WE RECOMMEND DRIVING THAT 
HAVE SEEN MY INTERACTING WITH WHAT 
IS RECOGNIZED BY THE CPI AND DIFFERENTIATE 
IDEA RIGHT FROM THE START. AND THE 
IS RECOGNIZED BY THE CPI AND DIFFERENTIATE 
DIFFERENT LANGUAGES, TEXT ANALYTICS 
GOAL OF THE INITIAL POC WAS TO PROVE 
DIFFERENT LANGUAGES, TEXT ANALYTICS 
AND THE PLAYERS OF LA LIGA ARE FROM 
THAT IF WE REPLACED WITH THE MVC 
AND THE PLAYERS OF LA LIGA ARE FROM 
DIFFERENT COUNTRIES, CAN DO MISTAKES 
LAYER WITH A REACT APP, THAT WE 
DIFFERENT COUNTRIES, CAN DO MISTAKES 
OR MISS SPELLING ON THEIR NAME. 
COULD RENDER IT SERVER SIDE AND 
OR MISS SPELLING ON THEIR NAME. 
WE CORRECT THAT. AND FINALLY, WE 
THEREBY RENDER THE CAPABILITIES. 
WE CORRECT THAT. AND FINALLY, WE 
HAVE THE HIDDEN FEATURE, CONTENT 
THIS STARTED US ON THE THREE-YEAR 
HAVE THE HIDDEN FEATURE, CONTENT 
MODERATION, OBVIOUSLY WE DON'T WANT 
JOURNEY FROM ASSEMBLING A TEAM TO 
MODERATION, OBVIOUSLY WE DON'T WANT 
THE PEOPLE TRYING TO TROLL EIGHT 
IRONING OUT THE ARCHITECTURE TO 
THE PEOPLE TRYING TO TROLL EIGHT 
ASSISTANT. AND ALL OF THAT IS CONSUMING 
REITERATING THE PUBLIC TECH PREVIEW, 
ASSISTANT. AND ALL OF THAT IS CONSUMING 
THE DATA AND CACHE LAYER WHERE WE 
THE DATA AND CACHE LAYER WHERE WE 
HAVE A SUPER OPTIMIZED SQL DATA 
HAVE A SUPER OPTIMIZED SQL DATA 
PLACE. THE CMS, STATISTICS PROVIDER, 
PLACE. THE CMS, STATISTICS PROVIDER, 
AND ALSO THE FANTASY LEAGUE GAME. 
AND ALSO THE FANTASY LEAGUE GAME. 
ALL OF THESE SYNCHRONIZE WITH DIFFERENT 
ALL OF THESE SYNCHRONIZE WITH DIFFERENT 
FUNCTIONS. HAVING SAID SO, LET ME 
FUNCTIONS. HAVING SAID SO, LET ME 
SWITCH AGAIN TO SEE THAT THIS IS 
SWITCH AGAIN TO SEE THAT THIS IS 
ONE SIMPLE TAX CALCULATION AND A 
SEPARATE PAYMENT MICROSYSTEM AND 
A FULFILLMENT MICROSYSTEM, AND SO 
ON. IN THIS ARCHITECTURE I'M SHOWING 
HERE, THERE'S A DEPENDENCY OF EACH 
MICROSYSTEM ON OTHER MICROSERVICES. 
SO ESSENTIALLY IF THE TAX CALCULATION 
MICROSERVICE WERE TO GO DOWN OR 
HAVE AN ISSUE, WE WOULDN'T BE ABLE 
TO PROCESS SHIPPING LABELS AND SO 
ON. THIS KIND OF ARCHITECTURE IS 
NOT SCALEABLE. THE IDEA IS THAT, 
IF WE WANTED TO INDEPENDENTLY SCALE 
ONE MICROSERVICE OR PROCESS A LOT 
OF EVENTS, IT WOULDN'T REALLY WORK. 
EVENTS ARE GOING TO NEED TO BE PROCESSED 
BY MANY OF THESE MICROSERVICES, 
AND THERE'S A LOT OF UNNECESSARY 
LATENCY THAT YOU'RE INTRODUCING 
WITH THIS ARCHITECTURE. A MUCH BETTER 
APPROACH IS USING EVENT SOURCING 
TO ESSENTIALLY CREATE AN EVENT SOURCING 
ARCHITECTURE FOR DIFFERENT MICROSERVICES. 
IN THIS EXAMPLE, WE'RE USING AZURE 
COSMOS DB AS SORT OF A CENTRAL BUS 
TO PROCESS EVENTS. SO THE IDEA IS 
ALL THE EVENTS ARE PROCESSED ONCE 
LIBRARY. AZURE COSMOS DB IS AN AWESOME 
FIT FOR GAMING. I WOULD SAY PROBABLY 
THE BIGGEST REASON IT'S A GOOD FIT 
IS BECAUSE WE CAN ELASTICALLY SCALE 
PERFORMANCE UP OR DOWN, WHETHER 
WE HAVE A FEW DOZEN USERS OR MILLIONS 
OF USERS. THE THING ABOUT VIDEO 
GAMES IS THEY TEND TO START OUT 
MAYBE UNPOPULAR AND THEN STEADILY 
KIND OF RISE IN POPULARITY AND BECOME 
KIND OF A FAD, KIND OF THINGS THAT 
PEOPLE -- A LOT OF PEOPLE PLAY AND 
TELL THEIR FRIENDS ABOUT. BUT AFTER 
A WHILE, PEOPLE TEND TO GET TIRED 
OF VIDEO GAMES. IF YOU PLAYED A 
GAME FOR HUNDREDS OR THOUSANDS OF 
HOURS, YOU MIGHT KIND OF STOP PLAYING 
IT. SO AFTER A WHILE ARE THE DAILY 
ACTIVE USERS OF A VIDEO GAME MIGHT 
DECLINE. WITH COSMOS DB, WE'RE ABLE 
TO SCALE BOTH UPWARDS AS WE ADD 
MORE USERS AND ALSO SCALE DOWN AS 
WE BASICALLY LOSE USERS AS THEY 
KIND OF BEAT THE GAME OR FINISH 
THE GAME AND SUCH. AZURE COSMOS 
DB, IN ADDITION TO SCALING OVER 
A PERIOD OF DAYS AND MONTHS, CAN 
ALSO SCALE BY THE MINUTE AS WELL. 
WE GATHERED FROM THE COMMUNITY. 
THAT IS PART OF BUILDING A NEW LAYER 
TO THE SOFTWARE, GETTING THE INPUT 
FROM THE DEVELOPER USERS. SO REMEMBER 
THAT THE AUTHORS PAGE EDITOR FOR 
THE AUTHOR'S PAGE EDITOR TO WORK, 
THE SERVER NEEDS TO DELIVER THE 
GOING TO SHOW YOU NOT ONLY THIS 
COMPONENTS HTML, SO WE CAN WRAP 
GOING TO SHOW YOU NOT ONLY THIS 
CAPABILITY BUT ALSO WHERE THE NEXT 
THOSE IN THOSE EXTRA SPRINKLES SO 
CAPABILITY BUT ALSO WHERE THE NEXT 
CAPABILITIES, THAT WE ARE GOING 
THAT THE AUTHOR CAN GET THAT UI 
CAPABILITIES, THAT WE ARE GOING 
TO PROVIDE TO THIS SCENARIO. >> AWESOME. 
FOR, YOU KNOW, SETTING THE RULES 
TO PROVIDE TO THIS SCENARIO. >> AWESOME. 
THANKS, JESUS. SO YOU SAW AN AMAZING 
ON DYNAMIC FUNCTIONALITY. SO OUR 
THANKS, JESUS. SO YOU SAW AN AMAZING 
CUSTOMER STORY. I DIDN'T HEAR ANY 
IDEA WAS THAT WHAT IF WE COULD BUILD 
CUSTOMER STORY. I DIDN'T HEAR ANY 
CLAPS. GO AHEAD AND CLAP. [APPLAUSE] 
A REACT APP, BUT RENDER SERVER SIDE 
CLAPS. GO AHEAD AND CLAP. [APPLAUSE] 
YEAH. COOL. TO BUILD AN AMAZING 
SO WE COULD STILL, YOU KNOW, BASICALLY 
YEAH. COOL. TO BUILD AN AMAZING 
CUSTOMER STORY LIKE THAT YOU NEED 
DO THE SAME THING. SO IN THIS DIAGRAM, 
CUSTOMER STORY LIKE THAT YOU NEED 
TO USE THE WHOLE COMPREHENSIVE SET 
WE GET THE LAYOUT DATA FROM THE 
TO USE THE WHOLE COMPREHENSIVE SET 
OF SKILLS THAT MICROSOFT PROVIDES 
AUTHOR. THIS IS SOMETHING THAT WAS 
OF SKILLS THAT MICROSOFT PROVIDES 
FOR CONVERSATIONAL AI. AZURE COGNITIVE 
ALREADY HAPPENING. THE NEW PART 
FOR CONVERSATIONAL AI. AZURE COGNITIVE 
SERVICE, BOT AS FAR AS AND MICROSOFT 
IS A CUSTOM JAVASCRIPT CONTROLLER 
SERVICE, BOT AS FAR AS AND MICROSOFT 
BOLT FRAME WORK. THAT COMES TOGETHER 
THAT SERIALIZED THE DYNAMIC DATA 
BOLT FRAME WORK. THAT COMES TOGETHER 
TO HELP CREATE THIS. WHEN YOU ARE 
AS JSON. A SMALL NOTE SERVER RENDERED 
TO HELP CREATE THIS. WHEN YOU ARE 
CREATING ANY OTHER APPLICATION YOU 
CREATING ANY OTHER APPLICATION YOU 
HAVE, LIKE A DEVELOPMENT LIFECYCLE 
HAVE, LIKE A DEVELOPMENT LIFECYCLE 
THAT YOU FOLLOW. SIM ALREADILY YOU 
THAT YOU FOLLOW. SIM ALREADILY YOU 
HAVE A LIFECYCLE FOR CREATING A 
HAVE A LIFECYCLE FOR CREATING A 
CONVERSATIONAL BOT AS WELL. ALL 
CONVERSATIONAL BOT AS WELL. ALL 
THE WAY FROM DESIGN TO EVALUATE. 
THE WAY FROM DESIGN TO EVALUATE. 
A BIG PORTION OF THAT LIFECYCLE 
A BIG PORTION OF THAT LIFECYCLE 
IS ACTUALLY INFUSING NATURAL LANGUAGE 
IS ACTUALLY INFUSING NATURAL LANGUAGE 
THROUGH AZURE COSMOS DB, AND EACH 
MICROSERVICE SUBSCRIBES TO THE CHANGE 
FEED, EITHER THROUGH AN AZURE FUNCTION 
OR THE CHANGE FEED PROCESSOR LIBRARY 
TO TRIGGER CUSTOM BUSINESS LOGIC 
AND BASICALLY EXECUTE LOGIC BASED 
ON EVENTS THAT HAVE BEEN WRITTEN 
AND PROCESSED BY AZURE COSMOS DB. 
WITH THIS ARCHITECTURE, EACH MICROSERVICE 
IS HIGHLY INDEPENDENT. SO THE TAX 
MICROSERVICE HAS AN INDEPENDENT 
VIEW OF THE DATA THAT'S ENTIRELY 
SEPARATE FROM PAYMENT AND FULFILLMENT, 
SO EVERYTHING IS PROCESSED BY COSMOS 
DB, AND IF THE TAX MICROSERVICE, 
FOR EXAMPLE, GOES DOWN OR HAS SOME 
ISSUE, IT HAS ABSOLUTELY NO IMPACT 
ON PAYMENT AND NO IMPACT ON FULFILLMENT. 
WITH THIS ARCHITECTURE, IT'S ALSO 
POSSIBLE TO VERY EASILY ADD OR REMOVE 
MICROSERVICES. IF WE WANT TO TEST 
THE MICROSERVICE -- LET'S SAY WE 
WANTED TO ADD ON A SHIPPING LABEL 
MICROSERVICE -- IT WOULD BE VERY 
THE IDEA IS, IF YOU HAVE A SUDDEN 
BURST OF USERS PLAYING YOUR GAME, 
YOU CAN VERY EASILY AND SEAMLESSLY 
SCALE UP COSMOS DB TO ACCOMMODATE 
THAT DEMAND SO YOU CAN ASSURE THAT 
YOU'RE ABLE TO, IF YOU'RE USING 
COSMOS DB FOR A LEADERBOARD, YOU 
CAN ALWAYS GIVE YOUR CUSTOMERS REALTIME 
LEADERBOARD UPDATES. COSMOS DB, 
AS I MENTIONED EARLIER, ALSO GIVES 
YOU GUARANTEED LESS THAN 10 MILLISECOND 
READS AND WRITES OF 1 KILOBYTE DOCUMENTS. 
THIS IS OBVIOUS FOR VIDEO GAMES. 
FOR A GLOBALLY DISTRIBUTED VIDEO 
GAME, YOU NEED INCREDIBLY LOW LATENCY. 
AND COSMOS DB GIVES YOU LOW SQL 
DATABASE AND FLEXIBLE SCHEMA AND 
AUTOMATIC DATABASING AS WELL. ALL 
OF THIS IS GOODNESS FOR ESSENTIALLY 
ANY GAMING USE CASE. SO LET'S DESIGN 
A GAME. LET'S BUILD A MASSIVELY 
SCALEABLE MULTIPLAYER VIDEO GAME. 
LET'S BUILD A PINBALL GAME. FOR 
THIS I PICKED PINBALL BECAUSE IT'S 
A GAME WHERE YOU'RE SCORING INCREDIBLY 
FREQUENTLY. IF YOU EVER PLAYED PINBALL, 
THE APP USING THE LAYOUT DATA AND 
SENT HTML BACK. THE REACT APP WAS 
SUSTAINABLE PROJECT SO WE ACHIEVED 
UNPLUGGING FROM . NET AND CLEAR 
FRONT END AND BACK END SEPARATION. 
AS FOR HOW THE REACT APP CONSUMED 
THE LAYOUT DATA, THE TEAM BUILT 
THE PLACE HOLDER COMPONENT. THIS 
INTELLIGENCE. USING COGNITIVE SERVICES 
IS THE MOST BASIC EXAMPLE OF HOW 
INTELLIGENCE. USING COGNITIVE SERVICES 
LIKE LANGUAGE UNDERSTANDING AND 
THE PLACE HOLDER COMPONENT IS USED. 
LIKE LANGUAGE UNDERSTANDING AND 
Q AND A. WHEN WE MAKE A LITTLE MORE 
SO THE PLACE HOLDER IS GIVEN A NAME 
Q AND A. WHEN WE MAKE A LITTLE MORE 
TIME TALKING THROUGH THE DETAILS 
AND IN THIS CASE JSS MAIN. AND IT'S 
TIME TALKING THROUGH THE DETAILS 
OF THIS COGNITIVE SERVICES. LOOK 
JUST A HOLE THAT CAN BE FILLED WITH 
OF THIS COGNITIVE SERVICES. LOOK 
AT THIS CUSTOMER STORY OF LA LIGA. 
ANYTHING. LET'S TAKE A LOOK INSIDE 
AT THIS CUSTOMER STORY OF LA LIGA. 
I'LL DIVE RIGHT INTO THE DEMO. EXCITING 
OF THE JSS CODE TO SEE WHAT THE 
I'LL DIVE RIGHT INTO THE DEMO. EXCITING 
THING WE HAVE DONE, IS JUST FOR 
IMPLEMENTATION LOOKS LIKE. SO WE 
THING WE HAVE DONE, IS JUST FOR 
BUILD, CREATED A SIMPLE BOT OF SOME 
HAVE PACKAGES FOR EACH ONE OF THE 
BUILD, CREATED A SIMPLE BOT OF SOME 
SCENARIOS THAT LA LIGA WANTED IN 
FRAMEWORKS THAT WE SUPPORT. SO FOR 
SCENARIOS THAT LA LIGA WANTED IN 
THE FUTURE. AND MADE A BOT THAT 
EXAMPLE -- DOES IT ONLY SHOW MY 
THE FUTURE. AND MADE A BOT THAT 
WE CAN SHOW YOU LIVE. ALSO MADE 
WE CAN SHOW YOU LIVE. ALSO MADE 
A SAMPLE AVAILABLE ON GITHUB FOR 
A SAMPLE AVAILABLE ON GITHUB FOR 
TO YOU USE AND TRY 
OUT. WE WILL 
TO YOU USE AND TRY 
OUT. WE WILL 
DEMO THIS ON BOT FRAME WORK EMEMULATOR, 
DEMO THIS ON BOT FRAME WORK EMEMULATOR, 
THIS IS V4 VERSION. IN THE MIDDLE 
THIS IS V4 VERSION. IN THE MIDDLE 
IS WHERE WE TYPE THE QUESTIONS. 
IS WHERE WE TYPE THE QUESTIONS. 
IT SHOWS YOU THE ACTUAL ANSWERS 
IT SHOWS YOU THE ACTUAL ANSWERS 
IN THE SAME WEBCHAT, AND UI FRAME 
IN THE SAME WEBCHAT, AND UI FRAME 
WORK ON THE LEFT YOU CAN SEE CONNECTED 
WORK ON THE LEFT YOU CAN SEE CONNECTED 
SERVICES. SHOWS YOU THE SERVICES 
SERVICES. SHOWS YOU THE SERVICES 
THAT THE BOT IS CONNECTED TO. IN 
THAT THE BOT IS CONNECTED TO. IN 
THIS CASE THE BOT IS CONNECTED TO 
THIS CASE THE BOT IS CONNECTED TO 
EASE Y TO ADD THAT ON, SUBSCRIBE 
TO CHANGES AND TEST THAT SEPARATELY 
COMPLETELY INDEPENDENT OF OUR EXISTING 
SYSTEM. THE IDEA IS THAT EVENTS 
ARE ONLY PROCESSED BY AZURE COSMOS 
DB ONCE, AND THE MICROSYSTEMS HAVE 
LOGIC THAT'S COMPLETELY INDEPENDENT 
FROM THE OTHERS. WE'LL INDEPENDENTLY 
SCALE OF SCOPE NOW TO A RETAIL EXAMPLE. 
FOR RETAIL, IF WE WERE MAKING, SAY, 
A RETAIL WEBSITE, EACH EVENT MIGHT 
BE ADDING OR REMOVING AN ITEM FROM 
A SHOPPING CART. SO HERE WE HAVE 
A SAMPLE SHOPPING CART, AND THE 
POSSIBLE EVENTS ARE CREATING A SHOPPING 
CART, ADDING THE ITEM TO THE SHOPPING 
CART, REMOVING THE ITEM, OR CHECKING 
OUT. WE'LL KIND OF CLASSIFY EACH 
OF THESE AS BASICALLY AN EVENT. 
THIS IS KIND OF SIMILAR TO JET. 
COM'S ARCHITECTURE. AGAIN, THERE'S 
A VIDEO THAT I'M GOING TO PLACE 
IN THE LAST SLIDE OF THIS POWERPOINT 
THAT WILL BE AVAILABLE THAT I STRONGLY 
RECOMMEND WATCHING. IT'S REALLY 
AWESOME FOR MORE DETAILS ABOUT THIS 
KIND OF USE CASE. SO THE IDEA IS 
LIKE EVERY SECOND BASICALLY YOU'RE 
ADDING ON TO YOUR SCORE. WE'RE GOING 
TO BUILD A PINBALL GAME THAT DISPLAYS 
A REALTIME LEADERBOARD AND HAS HUNDREDS 
AND THOUSANDS OF LEADERS ALL AROUND 
THE WORLD, AND WE'LL BUILD IT USING 
COSMOS DB AND THE CHANGE FEED PROCESSOR 
LIBRARY. WE HAVE THREE REQUIREMENTS 
FOR THIS PINBALL VIDEO GAME. WE 
NEED TO BE ABLE TO HANDLE A MASSIVE 
NUMBER OF SCORING EVENTS. IF YOU'RE 
GOOD AT PLAYING PIN BALL, WHICH 
WE ASSUME THE PEOPLE PLAYING OUR 
VIDEO GAME ARE, YOU'RE GOING TO 
BE SCORING EVERY COUPLE OF SECONDS. 
A LOT OF USERS WITH OUR GAME, SO 
WE NEED TO OPTIMIZE FOR A HEAVY 
RIGHT INGEST. AND WE NEED TO DISPLAY 
THE PLAYER'S TOTAL SCORE IN REALTIME. 
IF A PLAYER SCORES A POINT, THEY 
WANT TO SEE THEIR SCORE QUICKLY 
UPDATED. THEY DON'T WANT TO SCORE 
A POINT AND SEE IT UPDATED TEN MINUTES 
LATER. EVERYTHING HAS TO BE IN REALTIME 
FOR THIS TO BE A GOOD EXPERIENCE 
FOR OUR USERS. IN ADDITION AND MOST 
LANGUAGE UNDERSTANDING, AS WELL 
LANGUAGE UNDERSTANDING, AS WELL 
AS QnAMaker AND DISPATCH. ANY TIME 
AS QnAMaker AND DISPATCH. ANY TIME 
A USER COMES IN, TO ARBITRATE BETWEEN 
A USER COMES IN, TO ARBITRATE BETWEEN 
MODELS. LET'S TRY IT OUT. I'M NOT 
MODELS. LET'S TRY IT OUT. I'M NOT 
A SUPER BOWL FOOTBALL SAVVY PERSON 
A SUPER BOWL FOOTBALL SAVVY PERSON 
AS NAYER TELLS ME. THERE'S A BIG 
AS NAYER TELLS ME. THERE'S A BIG 
GAME TOMORROW IN CHAMPION'S LEAGUE 
GAME TOMORROW IN CHAMPION'S LEAGUE 
WITH LIVERPOOL. ONE OF LA LIGA'S 
WITH LIVERPOOL. ONE OF LA LIGA'S 
TEAMS BARCELONA. LET'S TRY IT AND 
TEAMS BARCELONA. LET'S TRY IT AND 
SEE IF THE BOT KNOWS THAT. WHEN 
SEE IF THE BOT KNOWS THAT. WHEN 
IS LIVERPOOL VERSUS BARCELONA IN 
IS LIVERPOOL VERSUS BARCELONA IN 
THE CHAMPION'S LEAGUE? SO AS WE'RE 
THE CHAMPION'S LEAGUE? SO AS WE'RE 
TYPING IT, LET'S SEE, YOU CLICK 
TYPING IT, LET'S SEE, YOU CLICK 
ON IT, YOU DO YOU SEE ON THE RIGHT-HAND 
ON IT, YOU DO YOU SEE ON THE RIGHT-HAND 
CORNER, YOU SEE THE LOG SHOWING 
CORNER, YOU SEE THE LOG SHOWING 
UP. YOU CAN CLICK ON ANY OF THOSE 
UP. YOU CAN CLICK ON ANY OF THOSE 
TRACES, AND SHOW, SEE THE DETAILS 
TRACES, AND SHOW, SEE THE DETAILS 
OF THE JSON OBJECT IN THE TRACER 
OF THE JSON OBJECT IN THE TRACER 
SECTION ABOVE. THAT'S WHY THE EMULATOR 
SECTION ABOVE. THAT'S WHY THE EMULATOR 
IS DULY HELPFUL IN TESTING AND DEBUGGING 
IS DULY HELPFUL IN TESTING AND DEBUGGING 
THE BOT BEFORE YOU DI EMPLOY IT. 
THE BOT BEFORE YOU DI EMPLOY IT. 
EVEN IN PRODUCTION YOU CAN USE THIS 
EVEN IN PRODUCTION YOU CAN USE THIS 
TO QUICKLY KEEP DEBUGGING YOUR BOT 
TO QUICKLY KEEP DEBUGGING YOUR BOT 
THAT COSMOS DB, THE CENTRAL BUS 
BASICALLY PROCESSES ALL OF THESE 
EVENTS, AND THE MICROSERVICES THROUGH 
THE CHANGE FEED CAN SUBSCRIBE TO 
UPDATES OR ADDITIONS TO THESE EVENTS. 
SO IF, FOR EXAMPLE, WE ADD AN ITEM 
TO OUR CART, WE MIGHT TRIGGER A 
CERTAIN INVENTORY MICROSERVICE. 
IF WE CHECK OUT OUR CART, WE MIGHT 
TRIGGER A PAYMENT IN SHIPPING MICROSERVICE. 
THIS IS ALL VERY SCALEABLE, AND 
EVERY EVENT IS BASICALLY PROCESSED 
BY AZURE COSMOS DB. HE THE IDEA 
IS THAT COSMOS DB CAN NOT ONLY PROCESS 
THESE EVENTS, BUT BECAUSE IT'S A 
DATABASE, IT CAN PERSIST THESE EVENTS. 
IF YOU WANTED TO, SAY, HAVE A CUSTOMER 
CARE API, WHERE YOU GO BACK AND 
QUERY BASED ON PAST EVENTS, IT'S 
VERY EASE GROI DO THAT WHEN YOU 
USE AZURE COSMOS DB, BECAUSE IT 
NOT ONLY PROCESSES ALL EVENTS, BUT 
IT'S STORING ALL PAST EVENTS AS 
WELL. SO THE IDEA IS, IF A CUSTOMER 
IN YOUR CUSTOMER CARE API HAD A 
QUESTION ABOUT WHETHER A CERTAIN 
ITEM WAS ORDERED OR SOMETHING LIKE 
IMPORTANTLY, WE'RE GOING TO ALWAYS 
DISPLAY IN THE PINBALL GAME A TOP 
TEN LEADERBOARD OF THE PLAYERS' 
HIGH SCORES IN REALTIME. FOR OUR 
GAME, WE'RE GOING TO TRY TO MINIMIZE 
THE AMOUNT OF THROUGHPUT THAT WE 
NEED IN ORDER TO BUILD THE LEADERBOARD 
AND PROCESS ALL THESE SCORES. IN 
COSMOS DB, WE MEASURE THROUGHPUT 
IN REQUEST UNITS. REQUEST UNITS, 
THE IDEA IS THAT IT'S JUST ANOTHER 
UNIT THAT AZURE HAS TO MEASURE BASICALLY 
COMPUTING POWER. SO THE IDEA IS 
IT'S AN ABSTRACTION OF MEMORY, CPU, 
AND I OPS. AS A USER USING COSMOS 
DB, YOU ESSENTIALLY PROVISION ONE 
NUMBER. YOU PROVISION REQUEST UNITS, 
AND YOU CAN CONSUME UP TO THAT AMOUNT. 
FOR THE PURPOSE OF THIS EXERCISE, 
WE'RE GOING TO DEFINE A METRIC FOR 
HOW PERFORMANT OUR PINBALL GAME 
IS FOR THE NUMBER OF REQUEST UNITS 
WE CONSUME. THE IDEA IS, IF WE'RE 
AS WELL. LET'S KEEP GOING. EVERYONE 
AS WELL. LET'S KEEP GOING. EVERYONE 
KNOWS, I DIDN'T KNOW WHAT THIS MATCH 
KNOWS, I DIDN'T KNOW WHAT THIS MATCH 
IS, IT'S APPARENTLY REAL MADRID 
IS, IT'S APPARENTLY REAL MADRID 
VERSUS BARCELONA, GETS THREE TIMES 
VERSUS BARCELONA, GETS THREE TIMES 
THE VIEWING OF SUPER BOWL MATCHES. 
THE VIEWING OF SUPER BOWL MATCHES. 
LET'S FIND OUT WHEN WAS THE LAST 
LET'S FIND OUT WHEN WAS THE LAST 
REAL VERSUS BARCA MATCH. >> WASN'T 
REAL VERSUS BARCA MATCH. >> WASN'T 
THE GREATEST SEASON FOR REAL MADRID. 
THE GREATEST SEASON FOR REAL MADRID. 
[ LAUGHING ] >> YOU CAN SEE THE 
[ LAUGHING ] >> YOU CAN SEE THE 
BOT IS RECOGNIZING IN THIS CASE, 
BOT IS RECOGNIZING IN THIS CASE, 
THE HOME TEAM, AND BARCE IS THE 
THE HOME TEAM, AND BARCE IS THE 
AWAY TEAM. THE BOT IS ABLE TO IDENTIFY 
AWAY TEAM. THE BOT IS ABLE TO IDENTIFY 
THAT BARCE, WE DON'T HAVE TO SAY 
THAT BARCE, WE DON'T HAVE TO SAY 
BARCELONA, CREATE THE INTELLIGENCE 
BARCELONA, CREATE THE INTELLIGENCE 
IN THE BOT. SWITCH IT AROUND, THE 
IN THE BOT. SWITCH IT AROUND, THE 
BOT UNDERSTANDS IN THIS CASE BARCELONA 
BOT UNDERSTANDS IN THIS CASE BARCELONA 
IS THE HOME TEAM AND REAL MADRID 
IS THE HOME TEAM AND REAL MADRID 
IS THE AWAY TEAM. LIMIT'S FIND OUT 
IS THE AWAY TEAM. LIMIT'S FIND OUT 
SOMETHING MORE ABOUT BARCELONA, 
SOMETHING MORE ABOUT BARCELONA, 
WHEN ARE THEY PLAYING ANOTHER TEAM. 
WHEN ARE THEY PLAYING ANOTHER TEAM. 
LET'S SAY I WANT TO BUY TICKETS 
LET'S SAY I WANT TO BUY TICKETS 
FOR THAT GAME. LET ME FIGURE OUT 
FOR THAT GAME. LET ME FIGURE OUT 
THAT, YOU COULD VERY EASILY BUILD 
AN API THAT JUST QUERIES THE PAST 
EVENTS PUBLISHED BY COSMOS DB. THIS 
IS VERY SIMPLE BECAUSE YOUR MICROSERVICES 
WERE BUILT USING FUNCTIONS AND COSMOS 
DB WAS BUILT TO PROCESS THESE EVENTS. 
SO YOU DON'T NEED SOME KIND OF TECHNOLOGY 
TO PROCESS EVENTS AND A SEPARATE 
KIND OF TECHNOLOGY TO STORE THE 
EVENTS. EVERYTHING IS DONE WITH 
AZURE COSMOS DB. SO YOU DON'T HAVE 
TO WORRY ABOUT LOTS OF MOVING PARTS. 
YOU JUST WORRY ABOUT KIND OF CREATING 
BUSINESS LOGIC AND DEPLOYING THAT 
SO EVERYTHING IS KIND OF SIMPLE 
AND MANAGEABLE. HOWEVER, WITH THIS 
ARCHITECTURE, THERE ARE CHALLENGES. 
WE NEED TO GUARANTEE DELIVERY OF 
THESE EVENTS. IN IOT, IF WE WERE 
TO, SAY, MISS A DATA POINT, IT COULD 
BE ABSOLUTELY DISASTROUS. IF WE 
MISS AN IOT DATA POINT, THAT COULD 
BE A VERY IMPORTANT SENSOR READING 
THAT COULD CAUSE A CATASTROPHE IF 
IT'S MISSED. SIMILARLY, IF WE MISS 
AN EVENT FOR A CUSTOMER ORDER IN 
CONSUMING FEWER REQUEST UNITS, WE 
NEED TO PROVISION FEWER REQUEST 
UNITS, AND THAT MEANS IT WILL PAY 
LESS AND ALSO THAT WE'RE PROCESSING 
THESE EVENTS AND DISPLAYING THE 
LEADERBOARD MUCH FASTER AND IN REAL 
TIME FOR OUR USERS. THE KEY METRIC 
IS MINIMIZING THE NUMBER OF REQUEST 
USES WE'LL NEED FOR THIS USE CASE. 
HERE'S AN INITIAL LEADERBOARD DESIGN. 
LET'S SAY THAT WE BASICALLY HAVE 
THREE KIND OF EVENTS THAT CAN HAPPEN 
WHERE WE'RE PROCESSING NEW SCORING 
EVENTS. SO BASICALLY EVERY TIME 
YOU SCORE IN THE PINBALL GAME, WE 
WRITE A DOCUMENT TO OUR COSMOS CONTAINER, 
AND THAT'S GOING TO TAKE ABOUT FIVE-HOUR 
USE. IT'S A VERY SMALL DOCUMENT. 
LET'S IMAGINE WE NEED TO PROCESS 
ABOUT TEN OR SO OF THESE OPERATIONS 
PER SECOND. THAT IN TOTAL WILL CONSUME 
ABOUT 50RUs OR SOMETHING LIKE THAT. 
WHEN WE NEED TO DISPLAY OUR PLAYER 
LEADERBOARDS AND PLAYER SCORE IN 
REALTIME, WE'RE GOING TO NEED TO 
CONSTANTLY WITH THIS DESIGN, CONSTANTLY 
BE RECOMPUTING A SUM FOR OUR PLAYERS 
ONE SCREEN AND DOESN'T 
HOW TO TYPE 
THAT. LET ME GET TICKETS. 
HOW TO TYPE 
THAT. LET ME GET TICKETS. 
SO THE BOT SEES THAT COMPLEX SENTENCE 
SO THE BOT SEES THAT COMPLEX SENTENCE 
AND PARSS IT AND GIVES ME TWO ANSWERS, 
AND PARSS IT AND GIVES ME TWO ANSWERS, 
WHEN IS THE NEXT GAME HAPPENING 
WHEN IS THE NEXT GAME HAPPENING 
AND ALSO GIVES ME TICKETS. YOU HAVE 
AND ALSO GIVES ME TICKETS. YOU HAVE 
CHOSEN TO BUY TICKETS. IT TELLS 
CHOSEN TO BUY TICKETS. IT TELLS 
ME WHERE THE GAME IS. THE GAME IS 
ME WHERE THE GAME IS. THE GAME IS 
IN THE HOME STADIUM FOR BARCELONA. 
IN THE HOME STADIUM FOR BARCELONA. 
GREAT, I HAVE MY TICKETS. I DON'T 
GREAT, I HAVE MY TICKETS. I DON'T 
KNOW HOW TO GET TO THE STADIUM. 
KNOW HOW TO GET TO THE STADIUM. 
HOW DO I GET THERE. NOW THE BOT 
HOW DO I GET THERE. NOW THE BOT 
GIVES ME MUCH MORE DETAILS. TELLS 
GIVES ME MUCH MORE DETAILS. TELLS 
ME HOW FAR AWAY BARCELONA IS, HOW 
ME HOW FAR AWAY BARCELONA IS, HOW 
TO GLET THERE, AND IT ALSO GIVES 
TO GLET THERE, AND IT ALSO GIVES 
ME OPTIONS FOR HOW TO GET THERE. 
ME OPTIONS FOR HOW TO GET THERE. 
DEPENDING WHAT MODE OF TRAVEL I 
DEPENDING WHAT MODE OF TRAVEL I 
WANT TO CHOOSE F I SAY I WANT TO 
WANT TO CHOOSE F I SAY I WANT TO 
DRIVE, DRIVING. I CAN GO THROUGH 
DRIVE, DRIVING. I CAN GO THROUGH 
THIS GUIDED CONVERSATIONAL FLOW. 
THIS GUIDED CONVERSATIONAL FLOW. 
RETAIL, THE CONSEQUENCES CAN ALSO 
BE PRETTY SIGNIFICANT. IF, FOR EXAMPLE, 
A CUSTOMER WERE TO REMOVE AN ITEM 
FROM THEIR CART AND THEN CHECK OUT, 
IF WE WERE TO PROCESS THE CUSTOMER 
CHECKOUT BEFORE WE PROCESS THE CUSTOMER 
MOVING THE ITEM FROM THEIR CART, 
WE COULD POTENTIALLY SEND THE CUSTOMER 
AN ITEM THAT THEY HAD MEANT TO REMOVE 
FROM THEIR CART. SO IT'S VERY CRITICAL 
THAT WE BASICALLY PROCESS THESE 
EVENTS IN THE ORDER THAT THEY ACTUALLY 
HAPPEN. ESSENTIALLY, WE NEED TO 
GUARANTEE DELIVERY OF THESE EVENTS 
AND GUARANTEE WE PROCESS THEM IN 
THIS ORDER. IT'S ALSO IMPORTANT 
THAT WE HAVE THE CAPABILITY TO REPLAY 
PAST EVENTS. IF, FOR EXAMPLE, A 
MICROSYSTEM GOES DOWN OR SOMETHING 
LIKE THAT, YOU WANT THE ABILITY 
TO BE ABLE TO ESSENTIALLY RESTORE 
EVENTS TO THAT MICROSERVICE AND 
BRING IT UP TO SPEED. SO IT'S VERY 
IMPORTANT TO HAVE THAT FUNCTIONALITY 
AS WELL. SO HOW CAN WE, USING AZURE 
COSMOS DB AND AZURE FUNCTIONS HELP 
AND THEN RANK THOSE SUMS IN THE 
LEADERBOARD. THIS OPERATION IS PROBABLY 
GOING TO CONSUME A LOT OF RUs. IF 
WE'RE TAKING A SUM, OBVIOUSLY, COSMOS 
DB HAS A LOT OF INDEXING AND WAYS 
TO MAKE THAT SUM OPERATION BE FAST, 
BUT IT STILL IS NOT A SIMPLE READ 
OF A DOCUMENT. IT WILL CONSUME MORE 
RUs, AND IT'S POSSIBLE WE COULD 
NEED TO LOOK THROUGH A LOT OF DOCUMENTS 
TO MAKE THAT CALCULATION. SO LET'S 
KIND OF BALLPARK THAT DISPLAYING 
EACH PLAYER'S SCORE WHEN WE NEED 
TO CALCULATE IT IN REALTIME CONSUMES 
ABOUT 50 RUs, AND DISPLAYING THE 
LEADERBOARD CONSUMES ABOUT 100 RUs. 
SINCE THIS SAY REALTIME GAME, WE 
NEED TO CONSTANTLY BE DISPLAYING 
THE LEADERBOARD, SO THIS IS ABOUT 
1, 000 RUs PER SECOND. YOU KNOW 
THAT'S A LOT OF RUs, AND THIS DESIGN 
IS NOT SCALEABLE AND NOT MANAGEABLE. 
SO OUR SOLUTION FOR THIS IS A MATERIALIZED 
SWITCH? ALL RIGHT. SO WE'RE TALKING 
ABOUT HOW THE PLACE HOLDERS ARE 
IMPLEMENTED IN THE BACK END. SO 
WE HAVE PACKAGES IN OUR JSS AS -- 
FOR ALL OF THE FRONT END FRAMEWORKS 
THAT WE SUPPORT. SO FOR EXAMPLE, 
WE HAVE REACT TO VIEW, ANGULAR, 
REACT NATIVE. SO I'M GOING TO USE 
REACT AS THE EXAMPLE. SO IF I GO 
INTO THE PLACE HOLDER, HELPER HERE, 
AND ALL OF THESE PLACE HOLDERS ARE 
PRETTY MUCH ANALOGOUS TO MVC HTML. 
IN THE PLACE HOLDER HELPER, SO IT 
STARTS OFF WITH GETTING SOMETHING 
CALLED THE COMPONENT FACTORY. SO 
IF I JUMP OVER TO THE APPLICATION 
THAT I SHOWED EARLIER THAT WAS IMPLEMENTING 
THEN LET'S SAY IS THERE PARKING 
THEN LET'S SAY IS THERE PARKING 
AVAILABLE? SHOWING ME OPTIONS FOR 
AVAILABLE? SHOWING ME OPTIONS FOR 
PARKING. I'M ALL SET, I KNOW HOW 
PARKING. I'M ALL SET, I KNOW HOW 
TO GET TO THE STADIUM, BUT NOW I 
TO GET TO THE STADIUM, BUT NOW I 
NEED TO FIGURE OUT WHERE MY SEAT IS. 
NEED TO FIGURE OUT WHERE MY SEAT IS. 
LET'S ASK IF THE BOT HAS THE SEATING 
LET'S ASK IF THE BOT HAS THE SEATING 
PLAN. >> EATING PLAN, I MUST BE 
PLAN. >> EATING PLAN, I MUST BE 
HUNGRY. >> NOT THE EATING PLAN, 
HUNGRY. >> NOT THE EATING PLAN, 
SEATING. I GET HAH AND I GET THE 
SEATING. I GET HAH AND I GET THE 
DETAILS FROM THE WEBSITE ITSELF. 
DETAILS FROM THE WEBSITE ITSELF. 
YOU CAN SEE, AGAIN, THIS IS A REAL 
YOU CAN SEE, AGAIN, THIS IS A REAL 
BOT, YOU CAN SEE THE SAMPLE LATER 
BOT, YOU CAN SEE THE SAMPLE LATER 
THAT, WHOLE FLOW OF ME FIGURING 
THAT, WHOLE FLOW OF ME FIGURING 
OUT WHERE THE MATCH IS, THAT'S HAPPENING, 
OUT WHERE THE MATCH IS, THAT'S HAPPENING, 
SCORES, GET THE TICKETS, AND THEN 
SCORES, GET THE TICKETS, AND THEN 
GET TO THE STADIUM AND GET MY SEATS. 
GET TO THE STADIUM AND GET MY SEATS. 
THIS IS WHAT WE BUILT. WE SHOW YOU 
THIS IS WHAT WE BUILT. WE SHOW YOU 
NOW HOW WE ACTUALLY BUILT THIS. 
NOW HOW WE ACTUALLY BUILT THIS. 
AND BUILT THE MODELS AROUND IT. 
AND BUILT THE MODELS AROUND IT. 
SWITCH BACK TO SITE. THAT WAS A 
SWITCH BACK TO SITE. THAT WAS A 
SOLVE THESE VERY COMMON DESIGN CHALLENGES. 
FOR GUARANTEED DELIVERY, THE IDEA 
IS THAT COSMOS DB CAN ELASTICALLY 
SCALE THROUGHPUT AND STORAGE. IF 
YOU NEED TO GUARANTEE AND REALLY 
DEPEND ON AZURE COSMOS DB TO PROCESS 
EVENTS, YOU CAN. IN THE RETAIL USE 
CASE, THIS IS ESPECIALLY KIND OF 
OBVIOUS. IN RETAIL, THERE TEND TO 
BE TIMES OF THE YEAR WHERE YOU HAVE 
A LOT MORE EVENTS. YOU CAN IMAGINE, 
IF WE KIND OF DEFINE THAT EVENT 
IN OUR PREVIOUS EXAMPLE WHERE YOU'RE 
ADDING OR REMOVING ITEMS FROM YOUR 
SHOPPING CART, IF WE SAY EACH OF 
THOSE IS AN EVENT, THERE'S PROBABLY 
A LOT MORE OF THOSE DURING CERTAIN 
TIMES OF THE YEAR, LIKE BLACK FRIDAY, 
CYBER MONDAY, AROUND THE HOLIDAY 
SEASON. SO IT'S VERY IMPORTANT THAT 
AZURE COSMOS DB CAN ELASTICALLY 
SCALE TO BE ABLE TO PROCESS AND 
INGEST THESE EVENTS. AZURE COSMOS 
DB CAN INDEPENDENTLY SCALE THROUGHPUT 
AND STORAGE. THIS IS VERY CRITICAL 
FOR THIS KIND OF ARCHITECTURE. THE 
IDEA IS THAT YOU CAN, IF YOU NEED 
VIEW, AND WE'LL IMPLEMENT THE MATERIALIZED 
VIEW USING THE CHANGE FEED PROCESSOR 
LIBRARY. SHOW OF HANDS, WHO IS FAMILIAR 
WITH WHAT A MATERIALIZED VIEW IS? 
OKAY, AWESOME. THAT'S ABOUT WHAT 
I EXPECTED. SO I WILL SPEND ABOUT 
FIVE MINUTES INTRODUCING WHAT EXACTLY 
A MATERIALIZED VIEW IS. THE IDEA 
WITH THE MATERIALIZED VIEW IS, INSTEAD 
OF COMPUTING A QUERY OVER AND OVER 
AND OVER AGAIN, WE BASICALLY STORE 
THE RESULTS OF THAT QUERY SOMEWHERE. 
SO THE VIEW IS BASICALLY THE RESULTS 
OF THAT QUERY, AND WE MATERIALIZE 
IT AND GENERATE EACH TIME THERE'S 
A NEW WRITE OR WITH SOME KIND OF 
BASICALLY POLLING FREQUENCY. THE 
IDEA IS, IF YOU'RE RUNNING A COMPLEX 
QUERY, WE STORE THE RESULTS SO YOU 
DON'T HAVE TO RUN THAT QUERY EVERY 
TIME WE NEED TO REFRESH THE LEADERBOARD. 
THE MATERIALIZED VIEW WILL PROVIDE 
A SUBSET OF THE DATA THAT YOU NEED 
FOR THE USE CASE AND THE RESULTS 
OF THE QUERY. THE GOAL WITH THIS 
IS THAT IT IMPROVES PERFORMANCE, 
AND WE CAN DEFINE PERFORMANCE AS 
COST AND LATENCY. SO IT WILL REDUCE 
JSS, WHICH IS THAT SITE WITH THE 
LIST OF EVENTS, SO WHENEVER THE 
FRONT END DEV ADDS COMPONENTS IN 
THEIR APPLICATION, SO HERE THEY 
ALL ARE. SO JUST FROM THEM HAVING 
THE COMPONENTS HERE IN THIS FOLDER, 
WE -- IN THEIR STARTER APP, WE HAVE 
A SCRIPT THAT WILL LOOK AT THIS 
FOLDER AND JUST BASED ON THE NAMING 
CONVENTIONS, IT WILL FIND ALL OF 
THE EXPORTED REACT COMPONENTS IN 
THIS FOLDER HERE. IT LOOKS THROUGH 
AND THEN IT GENERATES A FILE THAT 
MAPS NAMES TO COMPONENTS. SO IT 
LOOKS SOMETHING LIKE THIS. SO THIS 
FILE IS GENERATED. AND OF COURSE, 
IF PEOPLE DON'T LIKE THE DEFAULT 
STRUCTURE CONVENTION THAT WE EXPECT, 
THEY'RE WELCOME TO CHANGE THIS, 
DEMO. JUST LIKE I SHOWED YOU, THE 
DEMO. JUST LIKE I SHOWED YOU, THE 
DEVELOPMENT LIFECYCLE FOR CREATING 
DEVELOPMENT LIFECYCLE FOR CREATING 
THE CONVERSATIONAL BOT, YOU HAVE 
THE CONVERSATIONAL BOT, YOU HAVE 
A SIMILAR LIFECYCLE FOR CREATING 
A SIMILAR LIFECYCLE FOR CREATING 
A NATURAL LANGUAGE MODEL THAT GOES 
A NATURAL LANGUAGE MODEL THAT GOES 
BEHIND THE BOT. ALL WAIT FROM DESIGN 
BEHIND THE BOT. ALL WAIT FROM DESIGN 
TO VALUE. I SHOW YOU, FOR QnAMaker, 
TO VALUE. I SHOW YOU, FOR QnAMaker, 
WALK THROUGH THE LANGUAGE UNDERSTANDING. 
WALK THROUGH THE LANGUAGE UNDERSTANDING. 
LET'S START WITH QnAMaker, THOSE 
LET'S START WITH QnAMaker, THOSE 
WHO HAVEN'T TRIED IT, IT IS AWESOME, 
WHO HAVEN'T TRIED IT, IT IS AWESOME, 
YOU SHOULD TRY IT NOW. QnAMaker 
YOU SHOULD TRY IT NOW. QnAMaker 
IS AN EASY WAY TO CREATE A CONVERSATIONAL 
IS AN EASY WAY TO CREATE A CONVERSATIONAL 
LAYER OVER YOUR DATA. ANY EXISTING 
LAYER OVER YOUR DATA. ANY EXISTING 
DATE A THIS CAN BE FAQ PAGES SUSHGS 
DATE A THIS CAN BE FAQ PAGES SUSHGS 
PORT WEBSITES, PDF, PRODUCT MANUALS, 
PORT WEBSITES, PDF, PRODUCT MANUALS, 
WHATEVER. IT CAN BE OFFLINE FIRE, 
WHATEVER. IT CAN BE OFFLINE FIRE, 
SHAREPOINT, WE ARE ANNOUNCING THAT 
SHAREPOINT, WE ARE ANNOUNCING THAT 
TODAY, WITH THEIR POINT. POP IT 
TODAY, WITH THEIR POINT. POP IT 
INTO QnAMaker, EXTRACTS Q AND As 
INTO QnAMaker, EXTRACTS Q AND As 
AND PUTS NIGHT AN EASY TO USE UI. 
AND PUTS NIGHT AN EASY TO USE UI. 
YOU CAN USE THAT UI TO MANAGE, EDIT, 
YOU CAN USE THAT UI TO MANAGE, EDIT, 
CHANGE YOUR KNOWLEDGE BASE. THEN 
CHANGE YOUR KNOWLEDGE BASE. THEN 
QUICKLY DEPLOY A BOT FROM IT. NOW, 
QUICKLY DEPLOY A BOT FROM IT. NOW, 
TO, BUMP UP THE AMOUNT OF THROUGHPUT 
THE NUMBER OF EVENTS YOU'RE INGESTING. 
YOU CAN DO THAT INDEPENDENTLY OF 
STORAGE, AND YOU CAN ALSO DO THAT 
IN REAL TIME WITH ESSENTIALLY NO 
DOWN TIME. AND THIS IS VERY POWERFUL 
FOR CUSTOMERS AND MAKES IT AWESOME 
FOR USE CASES LIKE JET. COM'S. COSMOS 
DB ALSO OFFERS TURNKEY GLOBAL DISTRIBUTION. 
THIS IS AN AWESOME AND VERY INTERESTING 
TOPIC. THE MAIN THING THAT TURNKEY 
GLOBAL DISTRIBUTION WILL GIVE COSMOS 
DB IN THIS CASE IS EXTREMELY LOW 
LATENCY AND A 5. 9s SLA FOR AVAILABILITY. 
IF IN THIS CASE, IF YOU'RE USING 
COSMOS DB FOR SOMETHING THAT'S REALLY 
CENTRAL IN YOUR ARCHITECTURE AND 
YOU'RE PROCESSING ALL EVENTS THROUGH 
COSMOS DB, IT IS AN AWESOME FIT. 
THE BIG REASON AZURE COSMOS DB IS 
AN AWESOME FIT IS IT HAS 5. 9s AVAILABLE, 
WHICH MEANS 99. 99 OF THE TIME YOU 
CAN COUNT ON AZURE COSMOS DB WHEN 
YOU GLOBALLY DISTRIBUTE IT, TO BE 
ABLE TO BOTH PROCESS, READ, AND 
COST BECAUSE YOU NEED FEWER RUs, 
AND BECAUSE YOU DON'T CONSTANTLY 
NEED TO BE DOING THESE COMPUTATIONS, 
YOU'LL BASICALLY IMPROVE THE REALTIMENESS 
OF YOUR USER EXPERIENCE. HERE'S 
A KIND OF VISUAL EXAMPLE OF WHAT 
THE MATERIALIZED VIEW IS. FOR THE 
PINBALL GAME, WE'RE GOING TO MODEL 
THE SCORE EVENT DOCUMENT KIND OF 
LIKE THIS. SO WE HAVE JUST AN ID 
FOR THIS DOCUMENT, AND THEN WE HAVE 
A PLAYER ID FOR THE PLAYER THAT 
SCORED, AND THEN WE ALSO HAVE A 
SCORE, AND THAT'S THE AMOUNT THAT 
WILL BASICALLY BE INCREMENTING EACH 
PLAYER'S SCORE BY. THE IDEA IS THAT 
THESE ARE SMALL DOCUMENTS. SO THEY'RE 
BASICALLY REALLY EASY TO WRITE TO 
COSMOS DB, AND EACH TIME WE DO A 
WRITE, WE'LL RECALCULATE THE LEADERBOARD, 
AND AFTER EACH COUPLE OF SECONDS, 
WE RECALCULATE THE LEADERBOARD AND 
STORE THAT ALSO IN COSMOS DB, SO 
IT'S RECALCULATED, AND IF WE NEED 
TO DISPLAY THE LEADERBOARD, IT'S 
A SIMPLE READ OF THE ALREADY EXISTING 
BECAUSE THIS IS SCRIPT THAT IS IN 
THEIR FRONT END DEVS IMPLEMENTATION. 
SO IN THIS COMPONENT FACTORY, NAMES 
OF COMPONENTS ARE MAPPED TO ACTUAL 
COMPONENTS. SO THIS IS HOW WE KNOW 
WHEN WE'RE GETTING THE LAYOUT DATA 
OF WHAT THE CONTENT AUTHOR HAS PUT 
INTO OUR HOLES, WE KNOW WHAT WE 
HAVE TO INITIALIZE DYNAMICICLY. 
SO GOING BACK TO OUR PLACE HOLDER 
COMPONENT, WE GET THE FACTORY, SO 
WE HAVE THE POWER TO INITIALIZE 
ANYTHING WE WANT. AND GOING DOWN 
HERE, SO THIS IS WHERE THE MAGIC 
HAPPENS. SO IT'S GOING TO LOOP OVER 
EVERYTHING RECEIVED FROM THE SERVER, 
ALL THE LAYOUT DATA, SO ON PAGE 
LOAD, ALL OF THE LAYOUT -- THE DYNAMIC 
LAYOUT DATA WILL LOOP OVER IT AND 
OFFICIAL LIEZ WHAT NEEDS TO BE INITIALIZED. 
SO THIS IS THE MOST SIMPLE WAY, 
YOU CAN ALSO ADD PERSONALITY TO 
YOU CAN ALSO ADD PERSONALITY TO 
THE BOT. THEN SCALE IT UP OR DOWN 
EASILY. 
THE BOT. THEN SCALE IT UP OR DOWN 
EASILY. 
THE COOL THING, BECAUSE OF THE EASY 
THE COOL THING, BECAUSE OF THE EASY 
TO USE UI AND THE NO CODE BOT DEPLOYMENT 
TO USE UI AND THE NO CODE BOT DEPLOYMENT 
YOU CAN HAVE, YOU DON'T NEED EXPERTISE 
YOU CAN HAVE, YOU DON'T NEED EXPERTISE 
OR AI EXPERTISE TO CREATE A BOT 
OR AI EXPERTISE TO CREATE A BOT 
F YOU WANT THE DETAILS, GO UNDER 
F YOU WANT THE DETAILS, GO UNDER 
THE COVER, GET INTO THE CODE, CAN 
THE COVER, GET INTO THE CODE, CAN 
YOU USE, GO AND CHANGE STUFF, CUSTOMIZE 
YOU USE, GO AND CHANGE STUFF, CUSTOMIZE 
IT FOR YOUR SCENARIO, OR USE THE 
IT FOR YOUR SCENARIO, OR USE THE 
ASTOOUR CLI TOOLS TO DEPLOY ALL 
ASTOOUR CLI TOOLS TO DEPLOY ALL 
OF THIS. YOU DON'T HAVE TO USE THE 
OF THIS. YOU DON'T HAVE TO USE THE 
UI. WHAT'S NEW AT BUILD, THIS IS 
UI. WHAT'S NEW AT BUILD, THIS IS 
WHAT WE HAVE. IN QnAMaker WE HAVE 
WHAT WE HAVE. IN QnAMaker WE HAVE 
THREE PILLARS, EXTRACTION, INTELLIGENCE, 
THREE PILLARS, EXTRACTION, INTELLIGENCE, 
AND CONVERSATION. WE'RE ANNOUNCING 
AND CONVERSATION. WE'RE ANNOUNCING 
A FEW KEY THINGS AT BUILD THAT WILL 
A FEW KEY THINGS AT BUILD THAT WILL 
EVEN AGE THE SCENARIOS THAT I SHOW 
EVEN AGE THE SCENARIOS THAT I SHOW 
YOU. THE KEY THING, EXTRACTION, 
YOU. THE KEY THING, EXTRACTION, 
WHEN YOU GIVE ANY DOCUMENT, CURRENTLY 
WHEN YOU GIVE ANY DOCUMENT, CURRENTLY 
WE JUST EXTRACT SIMPLE Q AND A PAIRS. 
WE JUST EXTRACT SIMPLE Q AND A PAIRS. 
TODAY WE ARE ANNOUNCING EXTRACTING 
TODAY WE ARE ANNOUNCING EXTRACTING 
HIERARCHICAL INFORMATION FROM DOCUMENTS 
HIERARCHICAL INFORMATION FROM DOCUMENTS 
WRITE. IN ADDITION, AZURE COSMOS 
DB IS ONE OF THE FEW DATABASES THAT 
HAS AN SLA ON LATENCY. WE GUARANTEE 
THAT 99 OF POINT READS AND WRITES 
OF 1 KILO BYTE DOCUMENTS WILL BE 
EXECUTED IN A MILLISECOND, WHICH 
IS ALSO IMPORTANT BECAUSE YOU WANT 
THINGS TO BE INGESTED IN COSMOS 
DB VERY QUICKLY. THIS IS ALSO IMPORTANT 
TO PROCESS EVENTS IN ORDER. LET'S 
SAY IT'S BLACK FRIDAY AND YOU'RE 
BUYING YOUR KIDS GIFTS FOR THE HOLIDAYS 
AND YOU DECIDE YOU WANT TO BUY YOUR 
SON OR DAUGHTER, LET'S SAY YOU WANT 
TO BUY THEM A MODEL AIRPLANE, AND 
YOU ACCIDENTALLY ADD A MODEL CAR 
TO YOUR SHOPPING CART AND YOU REMOVE 
IT, AND THEN YOU ADD ON THE AIRPLANE 
AND YOU ORDER THE SHOPPING CART, 
AND YOU EXPECT TO RECEIVE THE MODEL 
CAR. HOWEVER, IF, LET'S SAY, WE 
WERE TO PROCESS THE CHANGE FEED 
AND WE WERE TO PROCESS THE CHECKOUT 
BEFORE WE WERE TO PROCESS THE ITEM 
REMOVAL, IT'S POSSIBLE THAT YOU 
DOCUMENT. THE IDEA WITH THIS IS 
THAT, IF YOU NEED TO DO 1, 000 OR 
1 MILLION OF THESE LEADERBOARD DISPLAYS 
IN A SECOND, THEY'RE SIMPLE READS 
OF A DOCUMENT. YOU'RE NOT PERFORMING 
ANY COMPLEX LOGIC OR CALCULATIONS. 
SOCAL CLATING THE LEADERBOARD EACH 
TIME IS GOING TO USE A LOT OF RUs. 
SO LET'S TAKE THE RESULTS OF THAT 
QUERY AND STORE IT SOMEWHERE, SO 
WHEN WE NEED TO DO THAT, IT'S JUST 
A SIMPLE LOOKUP. MAKE SENSE? SO 
OUR INITIAL DESIGN BASICALLY CONSUMED 
ABOUT 150, 000 RUs BECAUSE WE NEEDED 
TO CONSTANTLY, CONSTANTLY RECOMPUTE 
THE LEADERBOARD FOR EACH KIND OF 
PLAYER AND PLAYER SCORE AND TO DISPLAY 
THE AGGREGATED LEADERBOARD. WITH 
THIS NEW DESIGN, WE CAN SIGNIFICANTLY 
REDUCE THE AMOUNT OF OUR USE. THE 
IDEA IS THAT EACH SCORE EVENT WILL 
CONTINUE TO TAKE FIVE HOUR USE. 
LET'S IMAGINE WE HAVE ABOUT TEN 
SO IF IT'S JUST A HOLE WITH A STUFF, 
A BUNCH OF STUFF INSIDE OF IT THAT'S 
BEEN DECLARED IN THIS SIMPLE WAY, 
IT'S GOING TO USE THIS FUNCTION 
HERE. WHICH WILL JUST LOOP OVER 
THE COMPONENTS AND AGGREGATE ALL 
OF THE PROPS AND PASS THEM IN. BUT 
THE REASON WE HAVE ALL OF THESE 
OTHER IF STATEMENTS AND ALL OF THESE 
OTHER WAYS OF RENDERING PLACE HOLDERS 
IS BECAUSE REACT DEVS ALSO WANT 
TO HAVE ADDITIONAL WAYS TO RENDER 
THE COMPONENTS. THEY ALSO WANT TO 
BE ABLE TO WORK WITH THINGS LIKE 
RENDER PROPS, AND HIGHER ORDER COMPONENTS. 
SO ONE OF THE THINGS WE HAD TO DO, 
TO SUPPORT MULTIPLE FRAMEWORKS, 
IS TO FIND ALL OF THE WAYS THAT 
THE COMPONENTS CAN BE COMPOSED AND 
NESTED AND IN OUR PLACE HOLDER HELPERS, 
THAT HAVE INHERNT HIERARCHY IN THEM. 
THAT HAVE INHERNT HIERARCHY IN THEM. 
ENABLING SHAREPOINT EXTRACTION. 
ENABLING SHAREPOINT EXTRACTION. 
IN INTELLIGENCE, WE'RE ALLOWING 
IN INTELLIGENCE, WE'RE ALLOWING 
PEOPLE TO HAVE -- ALLOWING THE RANKING 
PEOPLE TO HAVE -- ALLOWING THE RANKING 
MODEL TO KEEP CONTEXT AND TO HAVE 
MODEL TO KEEP CONTEXT AND TO HAVE 
MUCH MORE INTELLIGENCE IN MULTI 
MUCH MORE INTELLIGENCE IN MULTI 
TURN CONVERSATIONTION. AS WELL AS 
TURN CONVERSATIONTION. AS WELL AS 
IMPROVEMENTS IN 507S ACTIVE LEARNING 
IMPROVEMENTS IN 507S ACTIVE LEARNING 
I'LL TALK ABOUT IN A MINUTE. THE 
I'LL TALK ABOUT IN A MINUTE. THE 
THIRD CONVERSATION CAN YOU EASILY 
THIRD CONVERSATION CAN YOU EASILY 
CREATE MUCH MORE COMPLEX GUIDED 
CREATE MUCH MORE COMPLEX GUIDED 
CONVERSATIONAL FLOW USING QnAMaker 
CONVERSATIONAL FLOW USING QnAMaker 
AS WELL AS BOT FRAME WORK. LET ME 
AS WELL AS BOT FRAME WORK. LET ME 
SHOW YOU WHAT I MEAN. WE'RE GOING 
SHOW YOU WHAT I MEAN. WE'RE GOING 
TO START BY TAKING AN EXAMPLE SCENARIO 
TO START BY TAKING AN EXAMPLE SCENARIO 
THAT YOU JUST SAW, HOW TO GET TO 
THAT YOU JUST SAW, HOW TO GET TO 
THAT STADIUM, STADIUM INFORMATION, 
THAT STADIUM, STADIUM INFORMATION, 
SEATING PLAN, ALL OF THAT. IN THAT 
SEATING PLAN, ALL OF THAT. IN THAT 
SAME FLOW, YOU FIRST IDENTIFY YOUR 
SAME FLOW, YOU FIRST IDENTIFY YOUR 
DATA SOURCES, FIND THAT. THEN CREATE 
DATA SOURCES, FIND THAT. THEN CREATE 
YOUR KNOWLEDGE BASE. LET ME SHOW 
YOUR KNOWLEDGE BASE. LET ME SHOW 
YOU. IN THIS CASE FOR LA LIGA, ONE 
YOU. IN THIS CASE FOR LA LIGA, ONE 
OF THE BIGGEST QUESTIONS THEY MAD 
OF THE BIGGEST QUESTIONS THEY MAD 
WAS GIVEN THAT YOU HAVE -- THAT 
WAS GIVEN THAT YOU HAVE -- THAT 
THEY HAD WAS GIVEN THAT YOU HAVE 
THEY HAD WAS GIVEN THAT YOU HAVE 
INFORMATION FOR A STADIUM LIKE THIS 
INFORMATION FOR A STADIUM LIKE THIS 
THAT WE JUST SAW, THERE'S A LOT 
THAT WE JUST SAW, THERE'S A LOT 
COULD RECEIVE THE MODEL CAR INSTEAD 
OF THE MODEL PLANE, AND WE WOULDN'T 
HAVE PROCESSED REMOVING OR ADDING 
THE ITEMS FROM YOUR COLLECTION, 
FROM YOUR CART ESSENTIALLY. SO THE 
IDEA WITH THIS IS IT'S ABSOLUTELY 
CRITICAL THAT YOU'RE ABLE TO PROCESS 
THESE RETAIL ORDERS AND RETAIL EVENTS 
ESSENTIALLY IN ORDER. THE IDEA HERE 
IN AZURE COSMOS DB, WHEN YOU SUBSCRIBE 
TO THE CHANGE FEED, WE CAN GUARANTEE, 
WHEN YOU'RE PROCESSING EVENTS FOR 
EACH PARTITION IN COSMOS DB IN ORDER. 
SO YOU'RE ABLE TO PROCESS COSMOS 
DB DIFFERENT EVENTS FROM DIFFERENT 
PARTITION S IN PARALLEL. THERE'S 
THREE PARTITIONS HERE. WE'RE ABLE 
TO PROCESS EVENTS FOR EACH PARTITION. 
THE IDEA HERE IS THAT YOU CAN SPECIFY 
A PARTITION KEY THAT IS YOUR ORDER 
I. D. , SO YOU CAN GUARANTEE THE 
ORDER I. D. s WILL BASICALLY STAY 
PER SECOND. IN REALITY, IT WOULD 
BE ABSOLUTELY NO ISSUE IF THIS VIDEO 
GAME NEEDED TO SCALE TO MILLIONS 
OF EVENTS PER SECOND. THAT WOULD 
BE NO PROBLEM AT ALL, AND THAT'S 
WHY IT'S AWESOME TO USE COSMOS DB. 
BUT LET'S IMAGINE FOR THE PURPOSES 
OF THIS CALCULATION THAT EACH SCORING 
EVENT BASICALLY CONSUMES ABOUT 5 
RUs. LET'S SAY THAT WE HAVE ABOUT 
10 OF THESE OPERATIONS, SCORE EVENTS 
PER SECOND. FOR THE RIGHTS, WE'LL 
CONSUME 50 RUs. WE DO NEED SOME 
RUs FROM THE CHANGE FEED. LET'S 
ASSUME IT'S 20 OR 30 READS PER SECOND. 
THESE ARE NEEDED TO PUT THE PLAYER 
SCORE DOCUMENT AND UPDATE THE LEADERBOARD 
AS WELL. FOR THIS, WE NEED TO CHANGE 
THE CHANGE FEED LIBRARY TO SUBSCRIBE 
TO CHANGES AND VERY EASILY READ 
FROM THE CHANGE FEED TO RECALCULATE 
OUR PLAYER'S TOTAL SCORE AND LEADERBOARD. 
WHEN WE NEED TO UPDATE THE LEADERBOARD 
DOCUMENT, IF WE NEED TO DO THAT 
FOR A PLAYER THAT'S BASICALLY PLAYED 
IT ONTO THE LEADERBOARD AND HAD 
WE HAD TO BUILD IN WAYS TO SUPPORT 
THAT. SO OVER TIME, WE MADE SOME 
IMPROVEMENTS TO THE ARCHITECTURE, 
WHICH IS CHANGING THAT JAVASCRIPT 
CONTROLLER TO ITS OWN SERVICE. AND 
THAT MADE IT MORE FLEXIBLE SINCE 
IT COULD BE CALLED AS A REST SERVICE 
FROM ANY CONTEXT. AND THE NOTE RENDERING 
ENGINE WAS EXTERNALIZED SO IT COULD 
LIVE ON A TOTALLY DIFFERENT MACHINE 
THAN THE LAYOUT SERVICE. IT STILL 
RECEIVES LAYOUT DATA AS JSON, BUT 
NOW THIS HAPPENS AS AN HTP POST. 
THE PHYSICAL DECOUPLING OF THE RENDERING 
HOST MEANS THAT IT'S NOW POSSIBLE 
TO DEVELOP ON A MAC. AGAINST A REMOTE 
PLATFORM INSTANCE. SO WITH THIS 
ARCHITECTURE, WE SOLVED THE CHALLENGE 
OF INFORMATION OUT THERE IN PUBLIC 
OF INFORMATION OUT THERE IN PUBLIC 
WEBSITES OR IN THEIR OWN DOCUMENTS. 
WEBSITES OR IN THEIR OWN DOCUMENTS. 
HOWEVER TO DO THIS AT SCALE TO EXTRACT 
HOWEVER TO DO THIS AT SCALE TO EXTRACT 
ALL OF THIS THE SCALE, AND TO BE 
ALL OF THIS THE SCALE, AND TO BE 
ABLE TO DO IT FOR 40 OR SO TEAMS 
ABLE TO DO IT FOR 40 OR SO TEAMS 
THAT LA LIGA HAS IS PRETTY HARD 
THAT LA LIGA HAS IS PRETTY HARD 
KUCHLT DO IT MANUALLY ONE AT A TIME. 
KUCHLT DO IT MANUALLY ONE AT A TIME. 
HOW DO YOU SOLVE THAT PROBLEM OF 
HOW DO YOU SOLVE THAT PROBLEM OF 
AUTOMATICALLY TAKING ALL OF THAT 
AUTOMATICALLY TAKING ALL OF THAT 
AND CREATING A CONVERSATIONAL INTERFACE 
AND CREATING A CONVERSATIONAL INTERFACE 
OUT OF IT AND DO IT AT SCALE. USING 
OUT OF IT AND DO IT AT SCALE. USING 
QnAMaker. USING QnAMaker CAN YOU 
QnAMaker. USING QnAMaker CAN YOU 
USE ALL OF THESE UI, POP THEM IN, 
USE ALL OF THESE UI, POP THEM IN, 
GET THE KIND OF EXPERIENCE THAT 
GET THE KIND OF EXPERIENCE THAT 
YOU JUST SAW IN THE GOO BOT. HOW 
YOU JUST SAW IN THE GOO BOT. HOW 
DOES THAT HAPPEN? LET ME SHOW YOU. 
DOES THAT HAPPEN? LET ME SHOW YOU. 
SO, IN THE EXAMPLE THAT I SHOWED 
SO, IN THE EXAMPLE THAT I SHOWED 
YOU, WHERE CAN YOU TALK ABOUT THE 
YOU, WHERE CAN YOU TALK ABOUT THE 
OPTIONS FOR DRIVING, THIS IS WHAT 
OPTIONS FOR DRIVING, THIS IS WHAT 
YOUR KNOWLEDGE BASE, IF YOU'RE FAMILIAR 
YOUR KNOWLEDGE BASE, IF YOU'RE FAMILIAR 
WITH QnAMaker, LOOKS LIKE. IF YOU 
WITH QnAMaker, LOOKS LIKE. IF YOU 
HAVE QUESTIONS AND ANSWERS, BUT 
HAVE QUESTIONS AND ANSWERS, BUT 
THERE'S A NEW VIEW NOW, CALLED THE 
THERE'S A NEW VIEW NOW, CALLED THE 
CONTEXT VIEW, WHICH SHOWS YOU THE 
CONTEXT VIEW, WHICH SHOWS YOU THE 
INHERENT RELATIONSHIPS BETWEEN Q 
INHERENT RELATIONSHIPS BETWEEN Q 
AND A PAIRS. YOU CAN SEE AND I SHOW 
AND A PAIRS. YOU CAN SEE AND I SHOW 
YOU IN THE LIVE DEM KNOW A SECOND, 
YOU IN THE LIVE DEM KNOW A SECOND, 
TOGETHER IN ONE PLACE, AND WHEN 
WE DO THIS, WE CAN GUARANTEE THAT 
ALL THESE ORDER IDs ARE GOING TO 
LIVE ON THE SAME PHYSICAL PARTITION. 
EVEN THOUGH WE'RE WITH OUR CHANGE 
FEED, HOWEVER WE'RE PROCESSING AND 
SUBSCRIBING TO THE CHANGE FEED, 
EVEN THOUGH WE'RE KIND OF PARALYZING 
THE PROCESS, PROCESSING ACROSS DIFFERENT 
PARTITIONS, WE'RE ABLE TO GUARANTEE, 
BY PARTITIONING ON ORDER ID, THAT 
EVERYTHING PERTAINING TO ONE ORDER 
ID OR USER SESSION IS ESSENTIALLY 
GOING TO BE STORED WITHIN ONE PARTITION 
KEY, AND THEN IN TURN WE GUARANTEE 
THAT EACH PARTITION KEY WILL BE 
STORED TOGETHER ON THE SAME PHYSICAL 
PARTITION SO, IF WE PROCESS EVENTS 
IN ORDER FOR THAT PHYSICAL PARTITION 
ON THE LEFT, WE WILL GUARANTEE THAT 
WE'RE PROCESSING ALL EVENTS THAT 
PERTAIN TO A CERTAIN ORDER ID ESSENTIALLY 
IN THE CORRECT SEQUENCE. IN THIS 
CASE, IN THE EVENT I MENTIONED BEFORE 
WHERE WE END UP BUYING A MODEL PLANE 
AND END UP RECEIVING A MODEL CAR. 
IT'S ALSO VERY USEFUL TO BE ABLE 
THEIR SCORE CHANGED, WE'RE GOING 
TO USE 10 RU s. WE'LL ALSO USE 10 
RUs TO UPDATE EACH PLAYER'S DOCUMENT. 
IN ORDER TO UPDATE, IT USES SLIGHTLY 
MORE RUs THAN JUST A WRITE. WE'LL 
ROUGHLY BALK THAT AT 10 RUs. FOR 
THAT IN TOTAL, WE'LL CONSUME 100 
RUs. MOST IMPORTANTLY, WHEN WE NEED 
TO DISPLAY THE PLAYER'S SCORE OR 
THE LEADERBOARD, WE'RE ONLY GOING 
TO CONSUME ROUGHLY 1 TO 2 RUs. IN 
COSMOS DB, IF YOU KNOW THE ID OF 
A DOCUMENT AND YOU KNOW WHAT PARTITION 
IT'S IN, IT'S A VERY SIMPLE LOOKUP, 
AND IT'S GOING TO BE INCREDIBLY 
PERFORMANT. WE CAN GUARANTEE WITH 
AN SLA, IF IT'S A SMALL DOCUMENT, 
IT WILL BE UNDER 10 MILLISECONDS. 
IN ADDITION, THAT OPERATION IS NOT 
GOING TO CONSUME MANY RUs. IN THIS 
CASE, WE'LL ASSUME IT'S GOING TO 
CONSUME 1 RU. IF WE NEED TO SCALE 
TO 1, 000 OR 1 MILLION READS PER 
SECOND, BECAUSE WE HAVE A MATERIALIZED 
VIEW, THIS IS REALLY NO ISSUE. ROUGHLY, 
THIS IS HOW WE MODEL OUR DIFFERENT 
OF NEEDING TO KEEP AUTHORS IN LAYOUT 
AND DEVS TO WORK FROM ANY OPERATING 
SYSTEM. BUT SO FASHGS THEY STILL 
NEED A REMOTE. THEY CAN'T WORK TOTALLY 
INDEPENDENT. WHAT IF WE COULD TOTALLY 
DISCONNECT THEM? AND LET THEM WORK 
FROM -- WITHOUT . NET DEVS AND WITHOUT 
WINDOWS AT ALL. SO WE BUILT SOMETHING 
CALLED DISCONNECTED DEVELOPMENT. 
SO THIS IS SOMETHING THAT HAPPENS 
AT THE START OF PROJECTS. AND THIS 
IS REALLY POWERFUL BECAUSE IT LETS 
JAVASCRIPT DEVS MOCK ALL OF THE 
BITS AND DEFINE THEIR OWN LAYOUT 
DATA DURING DEVELOPMENT. SO HOW 
THIS WORKS IS SO THE JAVASCRIPT 
DEVS ARE STILL, YOU KNOW, BUILDING 
THEIR ISOLATED REACT OR ANGULAR 
VIEW APPLICATION THAT'S RUNNING, 
THAT'S BEING RUN WITH NODE AND -- 
CAN SEE NOW THAT I'VE SEEN, I'M 
CAN SEE NOW THAT I'VE SEEN, I'M 
SEEING THE RELATIONSHIP BETWEEN 
SEEING THE RELATIONSHIP BETWEEN 
TRAVEL AND THE TRAVEL OPTIONS UNDER 
TRAVEL AND THE TRAVEL OPTIONS UNDER 
IT. SIMILARLY IN THE ANSWERS, I 
IT. SIMILARLY IN THE ANSWERS, I 
CAN NOW SEE PROMPT BUTTONS THAT, 
CAN NOW SEE PROMPT BUTTONS THAT, 
SHOW ME HOW CAN I CONNECT Q AND 
SHOW ME HOW CAN I CONNECT Q AND 
A PAIRS. THIS HAPPENS AUTOMATICALLY, 
A PAIRS. THIS HAPPENS AUTOMATICALLY, 
JUST WHEN I PUT THAT URL IN. LET'S 
JUST WHEN I PUT THAT URL IN. LET'S 
SEE A LIVE DEMO. THIS IS AN XAN 
SEE A LIVE DEMO. THIS IS AN XAN 
EXAMPLE WHERE YOU CAN SEE THIS URL 
EXAMPLE WHERE YOU CAN SEE THIS URL 
THAT I FOUND, WHICH HAS INFORMATION 
THAT I FOUND, WHICH HAS INFORMATION 
ABOUT THIS STADIUM. YOU CAN FIND 
ABOUT THIS STADIUM. YOU CAN FIND 
SIMILAR INFORMATION ABOUT EVERY 
SIMILAR INFORMATION ABOUT EVERY 
SINGLE STADIUM. THIS IS JUST THIS 
SINGLE STADIUM. THIS IS JUST THIS 
URL ITSELF, CONTAINS SOME STRUCTURE. 
URL ITSELF, CONTAINS SOME STRUCTURE. 
YOU CAN SEE, YOU CAN SEE THE IMAGES 
YOU CAN SEE, YOU CAN SEE THE IMAGES 
LOOK FAMILIAR. I PASTE THIS IN WITH 
LOOK FAMILIAR. I PASTE THIS IN WITH 
THE KNOWLEDGE BASE. YOU ARE SEE 
THE KNOWLEDGE BASE. YOU ARE SEE 
NOW THAT THE COURSE IS EXACTLY THAT 
NOW THAT THE COURSE IS EXACTLY THAT 
TO REPLAY PAST EVENTS. SO FOR EXAMPLE, 
LET'S SAY WE HAVE A SCENARIO WHERE 
THERE'S AN OUTAGE WITHIN A MICROSERVICE. 
MAYBE THERE WAS LIKE BAD LOGIC OR 
SOMETHING LIKE THAT, AND YOU NEED 
TO KIND OF TAKE THE MICROSERVICE 
DOWN WHEREVER IT'S DEPLOYED. WHEN 
YOU DO THIS, YOU'LL PROBABLY NEED 
TO TAKE SOME DOWN TIME FOR THAT 
MICROSERVICE. LET'S SAY IT'S A MICROSERVICE 
THAT PROCESSES SHIPPING LABELS, 
YOU'RE PROBABLY NOT GOING TO BE 
ABLE TO PROCESS ANY SHIPPING LABELS 
WHILE YOU HAVE THAT MICROSERVICE 
DOWN. HOWEVER, YOU PROBABLY WANT 
TO KEEP OTHER PARTS OF YOUR MICROSERVICES 
ARCHITECTURE WORKING AND OTHER MICROSERVICES 
FUNCTIONING AS NORMAL. SO HERE LET'S 
SAY ONE MICROSERVICE WERE TO GO 
DOWN AND BE UNAVAILABLE, WE STILL 
WANT THE OTHER MICROSERVICES TO 
PROCESS WITH BUSINESS AS USUAL. 
EVENTUALLY, WE'LL PROBABLY BRING 
THE MICROSERVICE THAT WAS DOWN BACK ONLINE, AND WHEN 
WE DO THAT, IF IT'S SHIPPING LABELS 
OR IF IT'S PAYMENTS, WE'LL NEED 
TO GO AND PROCESS ALL THE SHIPPING 
DOCUMENTS, AND THE GREAT THING ABOUT 
COSMOS DB IS, BECAUSE ITS SCHEMA 
IS ENFORCED AT THE APPLICATION LEVEL 
RATHER THAN THE DATABASE LEVEL, 
WE CAN STORE ALL OF THESE DOCUMENTS 
IN ONE GIANT COSMOS DB COLLECTION. 
SO WE HAVE A STORE DOCUMENT THAT 
HAS JUST AN ID. IT IS A PLAYER ID 
THAT CORRESPONDS TO WHICH PLAYER 
SCORED, AND THEN IT HAS A SCORE 
AMOUNT, WHICH IS WHAT WE'RE BASICALLY 
INCREMENTING OUR PLAYER'S SCORE 
BY. WE HAVE A PLAYER SCORE DOCUMENT 
THAT HAS THE ID, WHICH IS THE PLAYER'S 
NAME. SO TIM, IN THIS CASE, THAT'S 
MY NAME, THAT'S THE PLAYER ID, AND 
WE DISPLAY ALSO IN THE PLAYER SCORE 
DOCUMENT, THE PLAYER'S CURRENT TOTAL 
SCORES. THE IDEA IS WE'LL HAVE SOMEWHERE 
ON THE SCREEN FOR OUR VIDEO GAME 
A CURRENT UP TO DATE TOTAL OF THE 
PLAYER'S SCORE, AND THAT READ IS 
JUST GOING TO BE GOING TO THIS DOCUMENT 
AND DISPLAYING WHAT'S HERE. WE'LL 
ALSO HAVE A LEADERBOARD DOCUMENT. 
IT IS GOING TO BE SERVICE SIDE RENDERED. 
HOWEVER, WHEN THEY'RE RUNNING LOCALLY, 
AND THEY NEED TO MOCK WHAT'S ULTIMATELY 
GOING TO COME FROM OUR . NET PLATFORM, 
SO THE CONCEPT IS THEY'LL BE CREATING 
STATIC YAMMAL OR JSON FILES TO DEFINE 
THE SCHEME OF THAT LAYOUT DATA AND 
THEY PROVIDE SAMPLE DATAS OF THAT 
FILL IN SAMPLE DATA FOR WHAT THE 
AUTHOR WOULD NORMALLY POPULATE. 
SO FOR EXAMPLE, THIS IS -- THIS 
ONE HERE IS THE -- THIS IS THE CODE 
FOR THAT SPORTING EVENTS WEBSITE 
SAME URL, SEEING QUESTIONS AND ANSWERS. 
SAME URL, SEEING QUESTIONS AND ANSWERS. 
THE NEW VIEW IS A PUBLIC PREVIEW 
THE NEW VIEW IS A PUBLIC PREVIEW 
CALLED MULTI TURN WHICH YOU CAN 
CALLED MULTI TURN WHICH YOU CAN 
SHOW, WITH WHICH YOU CAN SEE CONTEXT. 
SHOW, WITH WHICH YOU CAN SEE CONTEXT. 
IN THIS CASE, WHEN YOU SEE THAT 
IN THIS CASE, WHEN YOU SEE THAT 
I OPEN THE CONTEXT VIEW, YOU WILL 
I OPEN THE CONTEXT VIEW, YOU WILL 
SEE, I CAN SEE THE STADIUM NAME 
SEE, I CAN SEE THE STADIUM NAME 
ON TOP AND THE SUB" NA PAIRS UNDER 
ON TOP AND THE SUB" NA PAIRS UNDER 
IT AND SIMILARLY. ALL OF THE HIERARCHY 
IT AND SIMILARLY. ALL OF THE HIERARCHY 
IS SHOWN IN DETAIL. HOW DOES THAT 
IS SHOWN IN DETAIL. HOW DOES THAT 
LOOK IN THE ACTUAL CHAT INTERFACE? 
LOOK IN THE ACTUAL CHAT INTERFACE? 
IT'S HARD TO SEE IT, AND UNDERSTAND 
IT'S HARD TO SEE IT, AND UNDERSTAND 
EXACTLY WHAT IS HAPPENING HERE. 
EXACTLY WHAT IS HAPPENING HERE. 
LET'S TRY THE SAME EXAMPLE OUT. 
LET'S TRY THE SAME EXAMPLE OUT. 
THIS IS THE ENTER PLACE THAT QnAMaker 
THIS IS THE ENTER PLACE THAT QnAMaker 
PROVIDES. HOW DO I GET THERE. YOU 
PROVIDES. HOW DO I GET THERE. YOU 
SEE THAT THIS IS TAKEN FROM THE 
SEE THAT THIS IS TAKEN FROM THE 
LABELS AND PROCESS ALL THE PAYMENTS 
AND CHARGE THE APPROPRIATE CUSTOMERS 
AND MAKE THE APPROPRIATE SHIPPING 
LABELS. WITH THIS, IT'S VERY CRITICAL 
WE HAVE THE ABILITY TO REPLAY PAST 
EVENTS. THE SOLUTION TO THIS IS 
YOU CAN MANUALLY RESET THE START 
TIME AND REPLAY EVENTS ESSENTIALLY 
FROM THE CHANGE FEED. SO IF WE NEEDED 
TO TAKE OUR PAYMENT SYSTEM OFFLINE 
AND WE STILL WANTED TO BE ABLE TO 
CALCULATE TAX AND PROCESS ORDERS 
AND FULFILLMENT, WE COULD DO THAT, 
AND WHEN WE WANTED THE PAYMENT TO 
COME BACK ON LINE, WE COULD REWIND 
THE FEED TO THE PAYMENT PERIOD AND 
START SO EVERYTHING COULD CONTINUE 
AS USUAL. THIS IS BASICALLY HOW 
AZURE FUNCTIONS AND THE CHANGE FEED 
CAN HELP YOU IMPLEMENT A MICROSERVICES 
ARCHITECTURE WITH EVENT SOURCING. 
THERE'S AN AWESOME VIDEO AT THE 
END OF MY SESSION THAT SPENDS ABOUT 
AN HOUR TALKING ABOUT THIS. SO I'D 
WE'LL HAVE ONE LEADERBOARD DOCUMENT 
THAT DISPLAYS THE TOP TEN PLAYERS 
RANKED IN TERMS OF SCORE. BASICALLY, 
IT HAS AN ID THAT'S LEADERBOARD. 
IF WE WANT TO LOOK UP THE LEADERBOARD, IT'S VERY 
SIMPLE. JUST SEARCH FOR IT BASED 
ON ITS ID, VERY PERFORMANT, VERY 
FAST. AND WITHIN A PLAYER'S RANKED 
ARRAY, WE HAVE BASICALLY THE TOP 
TEN PLAYERS AND THEIR SCORES. MAKE 
SENSE? SO THAT'S ESSENTIALLY THE 
DESIGN. I KNOW WE'VE BEEN SHOWING 
SLIDES FOR A WHILE. LET'S JUMP TO 
A DEMO AND SEE HOW EASY IT IS TO 
BUILD THIS USING THE CHANGE FEED 
PROCESSOR LIBRARY. NOW, I BUILT 
THIS USING THE CHANGE FEED PROCESSOR 
LIBRARY. IN REALITY, IT PROBABLY 
WOULD HAVE BEEN A LOT EASIER TO 
BUILD THIS WITH FUNCTIONS. HOWEVER, 
I'M SHOWING YOU THIS FOR MORE DEMONSTRATION 
PURPOSES, AND I WANT TO SHOW HOW 
EASY IT IS TO IMPLEMENT THE PROCESS 
CHANGES METHOD AND BASICALLY SUBSCRIBE 
TO THE CHANGE FEED. THIS USE CASE 
REALLY COULD HAVE ALSO BEEN BUILT 
WITH FUNCTIONS AS WELL. SO I'M GOING 
TO EXIT MY SLIDE DECK. THE FIRST 
THAT I SHOWED EARLIER. SO HERE'S 
WHAT I MEAN BY CREATING STATIC FILES 
TO MOCK WHAT WOULD NORMALLY COME 
FROM THE SERVER. SO THIS IS THE 
HOME PAGE THAT WE SAW THAT WAS SHOWING 
THE LISTING OF EVENTS. SO ONCE THE 
FRONT END DEV BUILT OUT ALL OF THE 
COMPONENTS IN REACT, THEN THEY WOULD 
COME HERE IN THIS DATA FOLDER WHICH 
IS -- WHICH REPRESENTS THEIR TEMPORARY 
STATIC MOCK DATA. AND THEY WILL 
BUILD OUT ALL OF THE ROUTES. SO 
IN THE HOME ROUTE, WHAT THEY'RE 
SEEING IS THERE'S A PLACE HOLDER 
CALLED HF NAV, ON THE PLACE HOLDER 
THERE'S NAVIGATION, THEY'RE ABLE 
TO NEST THE COMPONENTS AND FILL 
OUTFIELDS THAT ARE CONTENT AUTHOR 
URL THAT YOU SAW EARLIER. I CAN 
URL THAT YOU SAW EARLIER. I CAN 
CLICK ON THE PROMPT. MY AUDIO IS 
CLICK ON THE PROMPT. MY AUDIO IS 
IT CUTTING OUT. THE KIND OF INTERFACE 
IT CUTTING OUT. THE KIND OF INTERFACE 
THAT USERS HAVE AS WELL. SO I CAN 
THAT USERS HAVE AS WELL. SO I CAN 
NOW GO ON THIS -- >> MULTI TURN. 
NOW GO ON THIS -- >> MULTI TURN. 
>> CAN YOU HEAR NOW? I CAN NOW CHOOSE 
>> CAN YOU HEAR NOW? I CAN NOW CHOOSE 
TO TYPE THIS IN, AND SAY -- >> THE 
TO TYPE THIS IN, AND SAY -- >> THE 
MIKE. >> SO I CAN SEE ALL OF THIS. 
MIKE. >> SO I CAN SEE ALL OF THIS. 
NOW, THIS IS WHAT I'VE TAKEN OUT 
NOW, THIS IS WHAT I'VE TAKEN OUT 
OF THE BOX LIKE I MENTIONED. I CAN 
OF THE BOX LIKE I MENTIONED. I CAN 
ALWAYS EDIT AND CHANGE AND ADD MORE 
ALWAYS EDIT AND CHANGE AND ADD MORE 
STUFF TO THIS. SO FOR EXAMPLE, LET 
STUFF TO THIS. SO FOR EXAMPLE, LET 
ME GO TO THE SECOND PAGE. I'M GOING 
ME GO TO THE SECOND PAGE. I'M GOING 
TO SHOW YOU IN MATCH DAY TRAVEL, 
TO SHOW YOU IN MATCH DAY TRAVEL, 
WE NOW JUST HAVE DRIVING TRAIN, 
WE NOW JUST HAVE DRIVING TRAIN, 
METRO, AND AIRPORTS. I LIKE BUSES, 
METRO, AND AIRPORTS. I LIKE BUSES, 
PERSONALLY, LET ME ADD THE OPTION 
PERSONALLY, LET ME ADD THE OPTION 
RECOMMEND WATCHING THAT FOR MORE 
INFORMATION. I MENTIONED AT THE 
BEGINNING OF THIS SESSION THAT WE'RE 
GOING TO PROGRESSIVELY GO DEEPER 
AND DEEPER WITHIN EACH USE CASE. 
THAT WAS THE FIRST OF OUR THREE 
USE CASES. WITH NUMBER TWO, WE'RE 
GOING TO GO A LITTLE DEEPER, AND 
WE'RE GOING TO SHOW YOU HOW WE CAN 
ACTUALLY IMPLEMENT THIS SOLUTION 
USING THE CHANGE FEED PROCESSOR 
LIBRARY. WITH THIS USE CASE, WE'RE 
GOING TO TALK ABOUT HOW YOU COULD 
BUILD A MATERIALIZED VIEW FOR A 
REALTIME LEADERBOARD IN GAMING. 
AZURE COSMOS DB IS AWESOME FOR GAMING, 
AND ONE OF OUR FIRST CUSTOMERS WAS 
NEXT GAMES, AND THEY BUILT A WALKING 
DEAD VIDEO GAME USING AZURE COSMOS 
DB, AND IT WAS REALLY, REALLY AWESOME 
BECAUSE THEY WERE ABLE TO BUILD 
A REALTIME LEADERBOARD TO DISPLAY 
PLAYER SCORES. THIS VIDEO GAME WAS 
A MASSIVE MULTIPLAYER GAME THAT 
NEEDED TO SCALE VERY SIGNIFICANTLY, 
AND AZURE COSMOS DB, BECAUSE OF 
ITS GLOBAL DISTRIBUTION AND SLAs 
ON LATENCY, IS A REALLY AWESOME 
THING I'M GOING TO DO IS COME TO 
VS CODE AND RUN A LITTLE PROGRAM 
THAT I WROTE TO GENERATE SAMPLE 
PINBALL DATA. IT'S BASICALLY GENERATING 
THOSE EVENT DOCUMENTS THAT I TALKED 
ABOUT EARLIER. IT'S GENERATING BASICALLY 
A PLAYER ID AND A SCORE. AND THESE 
ARE BEING WRITTEN TO AZURE COSMOS 
DB. THE NEXT THING I'LL DO IS I'M 
GOING TO COME TO MY CHANGE FEED 
OBSERVER THAT I'VE IMPLEMENTED. 
I'M GOING TO COME TO MY CHANGE FEED 
OBSERVER THAT I'VE IMPLEMENTED AND 
COME TO PROCESS CHANGES ASYNC. THE 
IDEA WITH AN AZURE FUNCTION, YOU 
REMEMBER HOW I MENTIONED EARLIER 
THAT ALL THE LOGIC, ALL THE BUSINESS 
LOGIC WENT IN YOUR AZURE FUNCTION. 
WHEN YOU USE THE CHANGE FEED PROCESSOR 
LIBRARY, IT'S THE SAME IDEA. ALL 
YOUR LOGIC IS GOING TO GO HERE. 
WOULD FILL OUT. SO THEN WE HAVE 
A -- I LOST MY MOUSE AGAIN, SORRY, 
GUYS, THIS IS NOT -- THERE IT IS. 
SO IN OUR GSS CODE, WE HAVE A COMMAND 
LINE HELPER. SO THE MANIFEST PACKAGE 
IS WHAT DOES THIS. SO THE MANIFEST 
PACKAGE KNOWS HOW TO LOOK AT THE 
YAMMAL OR XML FILES THAT YOU CREATED, 
IT KNOWS HOW TO READ THEM. IT KNOWS 
WHAT THE DIFFERENT LINES MEANS. 
AND THEN FROM THERE, IT KNOWS HOW 
TO GENERATE A JSON FILE OF WHAT 
FOR BUSES. WHEN I CLICK ON ADD A 
FOR BUSES. WHEN I CLICK ON ADD A 
NEW PROMPT, PROMPT WINDOW SHOWED 
NEW PROMPT, PROMPT WINDOW SHOWED 
UP WHICH TELLS ME HOW TO CREATE 
UP WHICH TELLS ME HOW TO CREATE 
THIS. I CAN ADD A NEW DISPLAY TEXT, 
THIS. I CAN ADD A NEW DISPLAY TEXT, 
GOING TO SAY BUSES. AND CAN I EITHER 
GOING TO SAY BUSES. AND CAN I EITHER 
LINK TO AN EXISTING ANSWER, SEE 
LINK TO AN EXISTING ANSWER, SEE 
IF I START TYPING THE POSSIBLE ANSWERS, 
IF I START TYPING THE POSSIBLE ANSWERS, 
THE KNOWLEDGE BASE WILL SHOW UP. 
THE KNOWLEDGE BASE WILL SHOW UP. 
I DON'T HAVE ANY ANSWERS FOR BUSS 
I DON'T HAVE ANY ANSWERS FOR BUSS 
IN THIS CASE, GOING CREATE A BRAND 
IN THIS CASE, GOING CREATE A BRAND 
NEW ONE, SAY OKAY, THE BULLS ROUTE 
NEW ONE, SAY OKAY, THE BULLS ROUTE 
IS BEFORE. NOW IN THE SAME QUESTION, 
IS BEFORE. NOW IN THE SAME QUESTION, 
MATCH DAY TRAVEL, YOU IMMEDIATELY 
MATCH DAY TRAVEL, YOU IMMEDIATELY 
SEE A NEW OPTION CALLED BUSES AND 
SEE A NEW OPTION CALLED BUSES AND 
SEE THE RELATIONSHIP IN THE CONTEXT 
SEE THE RELATIONSHIP IN THE CONTEXT 
TREE AS WELL. IT'S THAT SIMPLE TO 
TREE AS WELL. IT'S THAT SIMPLE TO 
ADD IT, THE GUIDED CONVERSATIONAL 
ADD IT, THE GUIDED CONVERSATIONAL 
GLOW. AND YOU SAW HOW THAT WORKED 
GLOW. AND YOU SAW HOW THAT WORKED 
IN THE BOT AS WELL. SUPER SIMPLE. 
IN THE BOT AS WELL. SUPER SIMPLE. 
FIT FOR THESE TYPES OF USE CASES. 
AS YOU CAN SEE HERE ON KIND OF A 
SCREENSHOT ON THE RIGHT, THIS IS 
KIND OF LIKE THE PLAYER EXPERIENCE 
IN THE GAME . YOU'RE TRYING TO GET 
POINTS AND SUCH, AND YOUR REALTIME 
LEADERBOARD IS CONSISTENTLY DISPLAYED 
WITH UP TO DATE LEADERBOARD STATS. 
SO WE'LL TALK ABOUT HOW WE COULD 
IMPLEMENT THIS KIND OF USE CASE 
USING THE CHANGE FEED PROCESSOR 
LIBRARY. AZURE COSMOS DB IS AN AWESOME 
FIT FOR GAMING. I WOULD SAY PROBABLY 
THE BIGGEST REASON IT'S A GOOD FIT 
IS BECAUSE WE CAN ELASTICALLY SCALE 
PERFORMANCE UP OR DOWN, WHETHER 
WE HAVE A FEW DOZEN USERS OR MILLIONS 
OF USERS. THE THING ABOUT VIDEO 
GAMES IS THEY TEND TO START OUT 
MAYBE UNPOPULAR AND THEN STEADILY 
KIND OF RISE IN POPULARITY AND BECOME 
KIND OF A FAD, KIND OF THINGS THAT 
PEOPLE -- A LOT OF PEOPLE PLAY AND 
TELL THEIR FRIENDS ABOUT. BUT AFTER 
A WHILE, PEOPLE TEND TO GET TIRED 
OF VIDEO GAMES. IF YOU PLAYED A 
GAME FOR HUNDREDS OR THOUSANDS OF 
BASICALLY, ALL I DO IS I WRITE THAT 
I'M PROCESSING NEW SCORING EVENTS, 
AND THEN I JUST UPDATE THE LEADERBOARD. 
ALL OF THIS IS VERY SIMPLE. YOU 
DON'T REALLY NEED TO UNDERSTAND 
THE CHANGE FEED IN DEPTH TO DO SOMETHING 
LIKE THIS. IT'S ALL SIMPLE, AND 
YOU CAN REALLY FOCUS ON YOUR BUSINESS 
LOGIC AND NOT WORRY ABOUT UNDERSTANDING 
THE DETAILS OF THE CHANGE FEED. 
SO I'VE HAD A LOT OF EVENTS, PINBALL 
SCORES BEING KIND OF UPDATED DURING 
THE TIME THAT I'M TALKING. SO I'M 
GOING TO RUN THIS NOW. AS YOU CAN 
SEE, IT'S STARTED AND PROCESSING 
DIFFERENT SCORE UPDATES. IF I COME 
TO THE AZURE PORTAL AND I COME TO 
MY PINBALL LEADERBOARD COLLECTION, 
MY LEADERBOARD CONTAINER, IF I COME 
TO DOCUMENTS AND I SCROLL DOWN FOR 
-- SO THESE DOCUMENTS HERE WITH 
THE IDs ARE ALL LIKE SCORING DOCUMENTS 
ESSENTIALLY. SO IT HAS A PLAYER 
YOUR LAYOUT LOOKS LIKE. SO FROM 
FIELD TYPES, IT WILL COME HERE AND 
LITERALLY WRITE A JSON FILE ON YOUR 
FILE SYSTEM WITH YOUR MOCK DATA. 
SO IT WOULD LOOK LIKE THIS. SO WE'VE 
CREATED OUR SCHEME FOR OUR MODELS 
FOR OUR COMPONENTS FOR OUR PLACE 
HOLDERS, EVERYTHING THAT WOULD NORMALLY 
BE DONE BY BACK END DEVS AND BY 
CONTENT AUTHORS BUT WE'VE DONE THAT 
AS FRONT END DEVS. SO THE NEXT STEP 
IS TO ACTUALLY PLUGGING THAT INTO 
OUR LOCAL HOST WEB PACK CONFIGURATION. 
SO NORMALLY, WE USE WEB PACK DEV 
SERVER TO RUN OUR APP ON LOCAL HOST 
3, 000, BUT WHEN OUR APP IS RUNNING, 
IT NEEDS TO MAKE CALLS BACK TO OUR 
LAYOUT SERVICE TO, YOU KNOW, GET 
[APPLAUSE] WE SAW HOW TO TEST IT, 
[APPLAUSE] WE SAW HOW TO TEST IT, 
USING THAT TEST PANE AND PUBLIC 
USING THAT TEST PANE AND PUBLIC 
THE KNOWLEDGE. MAKE THAT AVAILABLE. 
THE KNOWLEDGE. MAKE THAT AVAILABLE. 
WHAT HAPPENS WHEN YOU PUBLIC IT, 
WHAT HAPPENS WHEN YOU PUBLIC IT, 
HOW IS THE CONTEXT MAINTAINED, HOW 
HOW IS THE CONTEXT MAINTAINED, HOW 
IS THIS FLOWING THROUGH THE API. 
IS THIS FLOWING THROUGH THE API. 
I'LL SHOW ENTHUSIASM TO AN EXAMPLE. 
I'LL SHOW ENTHUSIASM TO AN EXAMPLE. 
THE MAIN QUESTION, I SEND IN THE 
THE MAIN QUESTION, I SEND IN THE 
REQUEST USING THIS API THAT SAYS 
REQUEST USING THIS API THAT SAYS 
HOW DO I GET THERE. SIMPLE. WHAT 
HOW DO I GET THERE. SIMPLE. WHAT 
HAPPENS NEXT. HOW DO I MAKE SURE 
HAPPENS NEXT. HOW DO I MAKE SURE 
THE ANSWER I GET BACK CONTAINS THE 
THE ANSWER I GET BACK CONTAINS THE 
PROMPTS IN IT. NEW SETTLE OF FIELDS 
PROMPTS IN IT. NEW SETTLE OF FIELDS 
CALLED CONTEXT. THE CONTEXT FIELD 
CALLED CONTEXT. THE CONTEXT FIELD 
MAINTAIN AS BUNCH OF PROMPTS. EACH 
MAINTAIN AS BUNCH OF PROMPTS. EACH 
PROMPT HAS A DISPLAY TEXT WHICH 
PROMPT HAS A DISPLAY TEXT WHICH 
I JUST SAW IN THE POP-UP WINDOW. 
I JUST SAW IN THE POP-UP WINDOW. 
HOURS, YOU MIGHT KIND OF STOP PLAYING 
IT. SO AFTER A WHILE ARE THE DAILY 
ACTIVE USERS OF A VIDEO GAME MIGHT 
DECLINE. WITH COSMOS DB, WE'RE ABLE 
TO SCALE BOTH UPWARDS AS WE ADD 
MORE USERS AND ALSO SCALE DOWN AS 
WE BASICALLY LOSE USERS AS THEY 
KIND OF BEAT THE GAME OR FINISH 
THE GAME AND SUCH. AZURE COSMOS 
DB, IN ADDITION TO SCALING OVER 
A PERIOD OF DAYS AND MONTHS, CAN 
ALSO SCALE BY THE MINUTE AS WELL. 
THE IDEA IS, IF YOU HAVE A SUDDEN 
BURST OF USERS PLAYING YOUR GAME, 
YOU CAN VERY EASILY AND SEAMLESSLY 
SCALE UP COSMOS DB TO ACCOMMODATE 
THAT DEMAND SO YOU CAN ASSURE THAT 
YOU'RE ABLE TO, IF YOU'RE USING 
COSMOS DB FOR A LEADERBOARD, YOU 
CAN ALWAYS GIVE YOUR CUSTOMERS REALTIME 
LEADERBOARD UPDATES. COSMOS DB, 
AS I MENTIONED EARLIER, ALSO GIVES 
YOU GUARANTEED LESS THAN 10 MILLISECOND 
READS AND WRITES OF 1 KILOBYTE DOCUMENTS. 
THIS IS OBVIOUS FOR VIDEO GAMES. 
FOR A GLOBALLY DISTRIBUTED VIDEO 
ID AND THE SCORE. THESE ARE ALL 
RANDOMIZED NAMES, BY THE WAY. I 
CAN COME DOWN AND FIND MY LEADERBOARD 
DOCUMENT. IT HAS THE ID LEADERBOARD, 
AND IT DISPLAYS THE TOP TEN PLAYERS 
ESSENTIALLY RANKED. THE IDEA IS 
IT DOESN'T TAKE MUCH TO UPDATE THE 
LEADERBOARD DOCUMENT IF YOU DO IT 
ON THE FLY OR EVERY COUPLE OF SECONDS, 
SO YOU'RE BASICALLY SORTING TEN 
PLAYERS OR NUMBER OF PLAYERS, SO 
THAT'S ALL HANDLED IN THE LOGIC 
I PUT IN THE CHANGE FEED PROCESSOR, 
AND IT'S ALL HERE, AND IT'S VERY 
SIMPLE FOR OUR VIDEO GAME TO DO 
A QUICK LOOKUP AND OBTAIN THIS LEADERBOARD. 
IT'S ALSO, I GUESS, KIND OF GOOD 
TO POINT OUT ALL THESE DOCUMENTS 
WERE PUT IN ONE COSMOS CONTAINER. 
LEADERBOARD, TOTAL SCORES, IT'S 
ALL IN ONE CONTAINER, WHICH IS PRETTY 
COOL AS WELL. SO THAT'S HOW WE BUILT 
THIS LAYOUT DATA. SO WHAT WE'RE 
DOING IS WE'RE SPINNING UP AN EXTRA 
EXPRESS SERVER TO READ THE STATIC 
MANIFEST AND PROCESS OUR REQUESTS 
AND RETURN OUR FAKE DATA BAKE. AND 
WE'RE USING SOME MIDDLE WARE TO 
SET UP THAT PROXY. SO LET ME SHOW 
THAT. SO THIS IS -- THIS IS THE 
APP THAT'S USING GSS, SO IT COMES 
WITH A SCRIPT TO SET UP THE PROXY. 
SO IF WE CALL -- SO WE GET A COMMAND 
JSS START, THAT'S WHAT I CALLED 
IDs ARE WHAT WE USE TO CONNECT TWO 
IDs ARE WHAT WE USE TO CONNECT TWO 
Q AND A PAIRS TOGETHER. GOT THE 
Q AND A PAIRS TOGETHER. GOT THE 
RESULTS FOR HOW TO GET TO CAMP NOU. 
RESULTS FOR HOW TO GET TO CAMP NOU. 
CLICK ON DRIVING. WE NEED TO KNOW 
CLICK ON DRIVING. WE NEED TO KNOW 
WHAT THE PREVIOUS ANSWER WAS. WE 
WHAT THE PREVIOUS ANSWER WAS. WE 
NEED TO MAKE SURE THAT THE CONTEXT 
NEED TO MAKE SURE THAT THE CONTEXT 
IS SENT BACK. PASS IT BACK ON, WE 
IS SENT BACK. PASS IT BACK ON, WE 
SAW THE ID WAS 6. WITH THE NEW ANSWER, 
SAW THE ID WAS 6. WITH THE NEW ANSWER, 
I WANT NEW QUESTION, I WANT TO DRIVE. 
I WANT NEW QUESTION, I WANT TO DRIVE. 
WE PASS ON ALONG THE NORMAL REQUEST 
WE PASS ON ALONG THE NORMAL REQUEST 
FOR QnAMaker A NEW SET OF FIELDS, 
FOR QnAMaker A NEW SET OF FIELDS, 
CONTEXT, WE PASS ON WHAT THE PREVIOUS 
CONTEXT, WE PASS ON WHAT THE PREVIOUS 
QnA I. D. WAS, AS WELL AS THE PREVIOUS 
QnA I. D. WAS, AS WELL AS THE PREVIOUS 
QUESTION ANSWER. THAT'S IT. THAT'S 
QUESTION ANSWER. THAT'S IT. THAT'S 
HOW THIS WORKS. NOW, WE'RE BACK 
HOW THIS WORKS. NOW, WE'RE BACK 
TO THE LAST STAGE, EVALUATION, BUILD 
TO THE LAST STAGE, EVALUATION, BUILD 
YOUR AWESOME GUIDED CONVERSATIONAL 
YOUR AWESOME GUIDED CONVERSATIONAL 
FLOW MODEL, PUT IT OUT ON THE BOT, 
FLOW MODEL, PUT IT OUT ON THE BOT, 
PEOPLE ARE USING IT, HOW DO YOU 
PEOPLE ARE USING IT, HOW DO YOU 
MAKE IT GET BETTER AND BETTER WITH 
MAKE IT GET BETTER AND BETTER WITH 
TIME. USING ACTIVE LEARNING. ACTIVE 
TIME. USING ACTIVE LEARNING. ACTIVE 
GAME, YOU NEED INCREDIBLY LOW LATENCY. 
AND COSMOS DB GIVES YOU LOW SQL 
DATABASE AND FLEXIBLE SCHEMA AND 
AUTOMATIC DATABASING AS WELL. ALL 
OF THIS IS GOODNESS FOR ESSENTIALLY 
ANY GAMING USE CASE. SO LET'S DESIGN 
A GAME. LET'S BUILD A MASSIVELY 
SCALEABLE MULTIPLAYER VIDEO GAME. 
LET'S BUILD A PINBALL GAME. FOR 
THIS I PICKED PINBALL BECAUSE IT'S 
A GAME WHERE YOU'RE SCORING INCREDIBLY 
FREQUENTLY. IF YOU EVER PLAYED PINBALL, 
LIKE EVERY SECOND BASICALLY YOU'RE 
ADDING ON TO YOUR SCORE. WE'RE GOING 
TO BUILD A PINBALL GAME THAT DISPLAYS 
A REALTIME LEADERBOARD AND HAS HUNDREDS 
AND THOUSANDS OF LEADERS ALL AROUND 
THE WORLD, AND WE'LL BUILD IT USING 
COSMOS DB AND THE CHANGE FEED PROCESSOR 
LIBRARY. WE HAVE THREE REQUIREMENTS 
FOR THIS PINBALL VIDEO GAME. WE 
NEED TO BE ABLE TO HANDLE A MASSIVE 
NUMBER OF SCORING EVENTS. IF YOU'RE 
GOOD AT PLAYING PIN BALL, WHICH 
WE ASSUME THE PEOPLE PLAYING OUR 
VIDEO GAME ARE, YOU'RE GOING TO 
THE LEADERBOARD USING THE CHANGE 
FEED LIBRARY. ALSO COULD HAVE BEEN 
DONE WITH FUNK FUNCTIONS, BUT I 
WANTED TO SHOW THIS FOR MORE INSTRUCTIONAL 
PURPOSES. OUR FINAL USE CASE IS 
ONE WHERE WE'RE GOING TO GO MOST 
IN DEPTH, AND THAT'S REPLICATING 
FOR FINAL PARTITION KEYS. THOSE 
OF YOU FAMILIAR WITH COSMOS DB, 
WHO'S FAMILIAR WITH PARTITIONING 
AND HOW IT WORKS? THAT'S ABOUT HALF 
THE ROOM. COOL. SO BEFORE WE DIVE 
INTO THIS USE CASE, I'M GOING TO 
PRESENT KIND OF A CUSTOMER PROBLEM 
HERE, AND WE'RE GOING TO GO BACK 
TO THE RETAIL INDUSTRY. SO LET'S 
IMAGINE THAT WE HAVE A RETAIL COMPANY 
THAT HAS CUSTOMER DATA KIND OF MODELED 
IN THIS STRUCTURE IN THE DOCUMENT 
THAT I'M SHOWING HERE. CURRENTLY 
WE'RE STORING ABOUT 10 TERABYTES 
OF DATA, AND EACH DOCUMENT IS ABOUT 
IS KILOBYTE. IN THE DOCUMENT, WE 
HAVE EACH CUSTOMER'S USER NAME, 
EMAIL, AGE, IF THEY'RE BUYING ITEMS 
WITH A PAYMENT PLAN OR SOMETHING 
LIKE THAT. WE WANT TO ESSENTIALLY 
EARLIER, WHEN THE SITE CAME UP LOCALLY. 
SO WHAT WE'RE GOING TO DO FIRST 
IS SET UP SOME VARIABLES FOR OUR 
ENVIRONMENT LIKE, WHAT PORT TO RUN 
ON AND WHAT HOST NAME SINCE THE 
VARIABLES THAT WE USE IN OUR LOCAL 
MODE IS DIFFERENT FROM VARIABLES 
THAT WE WOULD USE IN A HIGHER ENVIRONMENT. 
AND WE HAVE TO TELL OUR PROXY ABOUT 
THAT. WEB PACK HAS A WAY TO DO THAT 
NATIVELY, BUT WE WANTED TO KIND 
OF WRAP THAT FUNCTIONALITY A BIT 
TO MAKE SURE THAT IT WORKS IN THE 
SAME WAY ACROSS ALL OF THE DIFFERENT 
FRAME WORKS AND TO MAKE SURE THAT 
IT WAS EASIER TO MAINTAIN. SO THAT'S 
WHY WE ARE KIND OF DOING THIS STEP 
MANUALLY. SO ONCE WE HAVE SET UP 
OUR VARIABLES, SO THEN WE JUST RUN 
START REACT, SO THAT'S BASIC START 
REACT FROM THE CREATE REACT APP. 
AND THEN WE'RE STARTING OUR PROXY. 
SO STARTING THE PROXY IS USING THIS 
LEARNING GIVES YOU QnA, THE FEATURE, 
LEARNING GIVES YOU QnA, THE FEATURE, 
WE ANNOUNCED IN FEBRUARY BUT MADE 
WE ANNOUNCED IN FEBRUARY BUT MADE 
IMPROVEMENTS. BASED ON USERS SUGGESTIONS 
IMPROVEMENTS. BASED ON USERS SUGGESTIONS 
AND USAGE, KWAN A MAKER IN THE UI 
AND USAGE, KWAN A MAKER IN THE UI 
WILL SHOW YOU SUGGESTIONS FOR THE 
WILL SHOW YOU SUGGESTIONS FOR THE 
OPTIMAL QUESTION THAT YOU NEED TO 
OPTIMAL QUESTION THAT YOU NEED TO 
ADD TO IMPROVE YOUR KNOWLEDGE BASE 
ADD TO IMPROVE YOUR KNOWLEDGE BASE 
AND IMPROVE YOUR BOT. GIVERS YOU 
AND IMPROVE YOUR BOT. GIVERS YOU 
A FEW SUGGESTIONS JUST BASED ON 
A FEW SUGGESTIONS JUST BASED ON 
WHAT THE OPTIMAL THING IS THAT ADDED. 
WHAT THE OPTIMAL THING IS THAT ADDED. 
SHOW YOU AN EXAMPLE JUST USING THIS 
SHOW YOU AN EXAMPLE JUST USING THIS 
ONE, LET ME SWITCH IT. YOU CAN SEE 
ONE, LET ME SWITCH IT. YOU CAN SEE 
THIS IS THE KNOWLEDGE BASE THAT 
THIS IS THE KNOWLEDGE BASE THAT 
I JUST SHOWED YOU EARLIER. YOU SEE 
I JUST SHOWED YOU EARLIER. YOU SEE 
FILTER BY SUGGESTIONS. WHEN I CLICK 
FILTER BY SUGGESTIONS. WHEN I CLICK 
ON THAT IT SHOWS ME A FEW OPTIONS 
ON THAT IT SHOWS ME A FEW OPTIONS 
N THIS CASE, HOW DO I GO TO CAMP 
N THIS CASE, HOW DO I GO TO CAMP 
NOU, TRAVEL TO CAMP NOU, THAT'S 
NOU, TRAVEL TO CAMP NOU, THAT'S 
ARE SUGGESTIONS. I CAN ACCEPT OR 
ARE SUGGESTIONS. I CAN ACCEPT OR 
REJECT THEM IF I FEEL LIKE THEY'RE 
REJECT THEM IF I FEEL LIKE THEY'RE 
NOT SUPER RELEVANT. SIMILARLY FOR 
NOT SUPER RELEVANT. SIMILARLY FOR 
THE OPTION FORMENT ROW, IS THERE 
THE OPTION FORMENT ROW, IS THERE 
A METRO STATION, I CAN ACCEPT OR 
A METRO STATION, I CAN ACCEPT OR 
REJECT IT. THAT'S IT, IT IS THAT 
REJECT IT. THAT'S IT, IT IS THAT 
SIMPLE, YOU DEPLOY IT, GETTING BETTER 
SIMPLE, YOU DEPLOY IT, GETTING BETTER 
WITH TIME AND THE QnAMaker PRAY 
WITH TIME AND THE QnAMaker PRAY 
BE SCORING EVERY COUPLE OF SECONDS. 
A LOT OF USERS WITH OUR GAME, SO 
WE NEED TO OPTIMIZE FOR A HEAVY 
RIGHT INGEST. AND WE NEED TO DISPLAY 
THE PLAYER'S TOTAL SCORE IN REALTIME. 
IF A PLAYER SCORES A POINT, THEY 
WANT TO SEE THEIR SCORE QUICKLY 
UPDATED. THEY DON'T WANT TO SCORE 
A POINT AND SEE IT UPDATED TEN MINUTES 
LATER. EVERYTHING HAS TO BE IN REALTIME 
FOR THIS TO BE A GOOD EXPERIENCE 
FOR OUR USERS. IN ADDITION AND MOST 
IMPORTANTLY, WE'RE GOING TO ALWAYS 
DISPLAY IN THE PINBALL GAME A TOP 
TEN LEADERBOARD OF THE PLAYERS' 
HIGH SCORES IN REALTIME. FOR OUR 
GAME, WE'RE GOING TO TRY TO MINIMIZE 
THE AMOUNT OF THROUGHPUT THAT WE 
NEED IN ORDER TO BUILD THE LEADERBOARD 
AND PROCESS ALL THESE SCORES. IN 
COSMOS DB, WE MEASURE THROUGHPUT 
IN REQUEST UNITS. REQUEST UNITS, 
THE IDEA IS THAT IT'S JUST ANOTHER 
UNIT THAT AZURE HAS TO MEASURE BASICALLY 
BE ABLE TO DO 1, 000 WRITES PER 
SECOND AND DO 50, 000 QUERIES PER 
SECOND AS WELL. AS DATA SIZE GROWS, 
HOW CAN WE MAKE SURE THE PERFORMANCE 
OF OUR QUERIES STAY CONSTANT? IF 
YOU ALREADY KNOW A LITTLE BIT ABOUT 
AZURE COSMOS DB, YOU PROBABLY HAVE 
SOME IDEAS AS TO THE ANSWER FOR 
THIS QUESTION. IF YOU DON'T, THAT'S 
TOTALLY FINE. WE'RE GOING TO QUICKLY 
INTRODUCE THESE CONCEPTS RIGHT NOW. 
THE SHORT ANSWER TO THIS QUESTION 
IS A GOOD PARTITIONING STRATEGY 
WILL ENSURE THAT PERFORMANCE FOR 
YOUR MOST FREQUENTLY EXECUTED QUERIES 
REMAIN CONSTANT REGARDLESS OF HOW 
LARGE DATA SIZE GROWS. THE IDEA 
HERE IS THAT EACH QUERY, FOR YOUR 
TOP QUERIES WILL CONSUME THE SAME 
NUMBER OF RUs AND TAKE THE SAME 
AMOUNT OF TIME, REGARDLESS OF WHETHER 
YOU'RE STORING 10 TERABYTES OF DATA 
OR STORING 1 PETABYTE OF DATA. IT'S 
GOOD TO HAVE A PARTITIONING STRATEGY. 
I'LL TALK ABOUT THAT FIRST, AND 
THEN I'LL TALK ABOUT THIS USE CASE 
NODE MODULE AND SO WITH THAT -- 
SO IF I -- SO THAT GOES TO OUR JSS 
CODE. WHICH IS HERE. THAT LAUNCHES 
AN EXPRESS SERVER, THAT TAKES IN 
ALL OF THE CONFIGURATION THAT WE 
DEFINED IN OUR APP. IT CREATES A 
MANIFEST OBJECT WHICH TAKES OUR 
MANIFEST JSON FILE, LOADS IT UP 
INTO MEMORY, SO NOW IT'S ABLE TO 
PROCESS OUR REQUESTS. AND FEEDBACK 
LAYOUT DATA ON THE FLY. AND HERE 
IS THE ACTUALLY PROXY CODE. SO ANY 
TIME THAT YOUR APP TRIES TO GO TO 
THE BACK END, WE'RE ABLE TO INTERCEPT 
THAT REQUEST AND GIVE THE DATA BACK. 
SO THAT'S HOW WE'RE MOCKING AS THOUGH 
WE'RE WORKING AGAINST A REAL BACK 
END BUT IT'S ALL TOTALLY DISCONNECTED 
IS READY. WHAT DO YOU NEED NEXT? 
IS READY. WHAT DO YOU NEED NEXT? 
LANGUAGE UNDERSTANDING. NAYER IS 
LANGUAGE UNDERSTANDING. NAYER IS 
GOING TALK ABOUT THAT. >> THANK 
GOING TALK ABOUT THAT. >> THANK 
YOU, TULASI. AS TULASI INTRODUCED, 
YOU, TULASI. AS TULASI INTRODUCED, 
YOU CAN GET A BOT UP AND RUNNING 
YOU CAN GET A BOT UP AND RUNNING 
BY GETTING. QnA PAIRS, KNOWLEDGE 
BY GETTING. QnA PAIRS, KNOWLEDGE 
THAT EXISTS, TO CREATE A CONVERSATIONAL 
THAT EXISTS, TO CREATE A CONVERSATIONAL 
EXPERIENCE. TO MAKE THE CONVERSATION 
EXPERIENCE. TO MAKE THE CONVERSATION 
INTELLIGENT, YOU NEED TO UNDERSTAND 
INTELLIGENT, YOU NEED TO UNDERSTAND 
WHAT YOUR USER IS TALKING ABOUT. 
WHAT YOUR USER IS TALKING ABOUT. 
AND TRY TO ABSTRACT THAT AND EXTRACT 
AND TRY TO ABSTRACT THAT AND EXTRACT 
IT FROM THESE UTTERANCES. THE LANGUAGE 
IT FROM THESE UTTERANCES. THE LANGUAGE 
UNDERSTANDING COGNITIVE SERVICES 
UNDERSTANDING COGNITIVE SERVICES 
DOES THAT. IT GIVES THE DEVELOP 
DOES THAT. IT GIVES THE DEVELOP 
AREA SIMPLE AND EASY WAY WITHOUT 
AREA SIMPLE AND EASY WAY WITHOUT 
ANY EXPERTISE ARTIFICIAL INTELLIGENCE 
ANY EXPERTISE ARTIFICIAL INTELLIGENCE 
MEANS TO EXTRACT ELEMENTS FROM THE 
MEANS TO EXTRACT ELEMENTS FROM THE 
UTTER ANSWERS AND USE IT TO CREATE 
UTTER ANSWERS AND USE IT TO CREATE 
AN INTELLIGENT CONVERSATION. THIS 
AN INTELLIGENT CONVERSATION. THIS 
BUILD WE'RE FOCUSING ON THREE MAIN 
BUILD WE'RE FOCUSING ON THREE MAIN 
HIGHLIGHTS. WE'RE INTRODUCING NEW 
HIGHLIGHTS. WE'RE INTRODUCING NEW 
ENHANCED ENTITIES. THESE ANSWERED 
ENHANCED ENTITIES. THESE ANSWERED 
ENTITY TYPES ALLOW YOU TO CREATE 
ENTITY TYPES ALLOW YOU TO CREATE 
MORE ENGAGING AND DEEPER UNDERSTANDING 
MORE ENGAGING AND DEEPER UNDERSTANDING 
COMPUTING POWER. SO THE IDEA IS 
IT'S AN ABSTRACTION OF MEMORY, CPU, 
AND I OPS. AS A USER USING COSMOS 
DB, YOU ESSENTIALLY PROVISION ONE 
NUMBER. YOU PROVISION REQUEST UNITS, 
AND YOU CAN CONSUME UP TO THAT AMOUNT. 
FOR THE PURPOSE OF THIS EXERCISE, 
WE'RE GOING TO DEFINE A METRIC FOR 
HOW PERFORMANT OUR PINBALL GAME 
IS FOR THE NUMBER OF REQUEST UNITS 
WE CONSUME. THE IDEA IS, IF WE'RE 
CONSUMING FEWER REQUEST UNITS, WE 
NEED TO PROVISION FEWER REQUEST 
UNITS, AND THAT MEANS IT WILL PAY 
LESS AND ALSO THAT WE'RE PROCESSING 
THESE EVENTS AND DISPLAYING THE 
LEADERBOARD MUCH FASTER AND IN REAL 
TIME FOR OUR USERS. THE KEY METRIC 
IS MINIMIZING THE NUMBER OF REQUEST 
USES WE'LL NEED FOR THIS USE CASE. 
HERE'S AN INITIAL LEADERBOARD DESIGN. 
LET'S SAY THAT WE BASICALLY HAVE 
THREE KIND OF EVENTS THAT CAN HAPPEN 
WHERE WE'RE PROCESSING NEW SCORING 
EVENTS. SO BASICALLY EVERY TIME 
YOU SCORE IN THE PINBALL GAME, WE 
WRITE A DOCUMENT TO OUR COSMOS CONTAINER, 
SPECIFICALLY. AGAIN, I MENTIONED 
THIS EARLIER, AND EVERYBODY PROBABLY 
KNOWS THIS ALREADY, BUT AZURE COSMOS 
DB MEASURES BASICALLY REQUESTS WITH 
REQUEST UNITS, SO REQUEST UNITS 
ARE THE METRIC FOR THROUGHPUT. WE 
CAN DEFINE OUR SYSTEM, IN THIS CASE, 
AS MORE PERFORMANT. IF WE NEED TO 
CONSUME FEWER REQUEST UNITS FOR 
OUR MOST COMMON OPERATIONS. IN THIS 
CASE, REQUEST UNITS IS AN ABSTRACTION 
FOR DIFFERENT COMPUTING RESOURCES, 
AND WE WANT TO MAKE SURE THAT OUR 
SYSTEM CONSUMES AS FEW REQUEST UNITS 
AS POSSIBLE. WE CAN DO THIS WITH 
A GOOD PARTITIONING STRATEGY. THE 
IDEA IS WITH PARTITIONING, AS DATA 
SIZE GROWS, WE DISTRIBUTE OUR DATA 
ACROSS MULTIPLE, SMALL MACHINES 
THAT ESSENTIALLY WORK IN A TEAM. 
WITH PARTITIONING, EACH MACHINE 
IS RESPONSIBLE FOR ONLY SERVING 
A SUBSET OF THE DATA. SO THE IDEA 
IS, IF EACH MACHINE ONLY SERVES 
ON A MAC, NO PLATFORM INSTALLED, 
YOU KNOW, I CAN -- I DON'T HAVE 
TO WAIT FOR SOME BACK END DEV TO 
SET UP AN INTEGRATION ENVIRONMENT. 
AS A JAVASCRIPT DEV, KI BE UP AND 
-- I CAN BE UP AND RUNNING IN FOUR 
COMMANDS. AND THIS IS JUST SHOWING 
THAT WHEN MY LOCAL APP WAS RUNNING, 
IF I LOOK AT THE NETWORK TAB AND 
I SEE THAT MANIFEST DATA IS COMING 
IN AND IT LOOKS JUST LIKE IT DID 
IN OUR MANIFEST JSON FILE THAT WAS 
GENERATED LOCALLY. AND THAT'S WHAT'S 
-- SO THIS DATA IS BEING FED INTO 
THE PROPS OF OUR REACT COMPONENTS. 
SO THEY'RE ALL BEING HYDRATED WITH 
THIS LAYOUT DATA AND THE PAGE IS 
BEING POPULATED DYNAMICLY BASED 
ON WHAT THE AUTHOR WOULD HAVE PUT 
OF THE UTTER ANSWERS AND USERS. 
OF THE UTTER ANSWERS AND USERS. 
WE'RE ALSO RUNNING THROUGH THE INSIGHTS 
WE'RE ALSO RUNNING THROUGH THE INSIGHTS 
ANALYSIS DASHBOARD THAT GIVES THE 
ANALYSIS DASHBOARD THAT GIVES THE 
DEVELOPER THE ABILITY TO UNDERSTAND 
DEVELOPER THE ABILITY TO UNDERSTAND 
THE PERFORMANCE OF THE MODEL THAT 
THE PERFORMANCE OF THE MODEL THAT 
THEY'RE DEVELOPING. FINALLY, WE 
THEY'RE DEVELOPING. FINALLY, WE 
HAVE UPDATED OUR API TO GIVE MORE 
HAVE UPDATED OUR API TO GIVE MORE 
CONTROL AND GIVE MORE ACCESS TO 
CONTROL AND GIVE MORE ACCESS TO 
THIS INFORMATION MUCH MORE EASILY. 
THIS INFORMATION MUCH MORE EASILY. 
I'LL RUN THROUGH EXAMPLES OF HOW 
I'LL RUN THROUGH EXAMPLES OF HOW 
WE USE THIS TO MAKE A BOT THAT WE 
WE USE THIS TO MAKE A BOT THAT WE 
CREATED LIKE THE HON ONE IN LA LIGA 
CREATED LIKE THE HON ONE IN LA LIGA 
MUCH SIMPLER AND EASIER TO DEVELOP 
MUCH SIMPLER AND EASIER TO DEVELOP 
WITH LESS LINES OF CODE. AS TULASI 
WITH LESS LINES OF CODE. AS TULASI 
STARTED OUT THE PROCESS OF BUILDING 
STARTED OUT THE PROCESS OF BUILDING 
THE LANGUAGE MODEL GOES THROUGH 
THE LANGUAGE MODEL GOES THROUGH 
THE DIFFERENT PHASES, ENHANCED ENTITIES 
THE DIFFERENT PHASES, ENHANCED ENTITIES 
HELPS YOU IN BUILDING AND DESIGNING 
HELPS YOU IN BUILDING AND DESIGNING 
A SCHEME A AND A MODEL TO UNDERSTAND 
A SCHEME A AND A MODEL TO UNDERSTAND 
THE UTTERANCES. IN THE WORLD OF 
THE UTTERANCES. IN THE WORLD OF 
SOCCER, OR IN THE WORLD OF SPORTS 
SOCCER, OR IN THE WORLD OF SPORTS 
AT LARGE, YOU KNOW THAT THERE IS 
AT LARGE, YOU KNOW THAT THERE IS 
A HOME AND AWAY TEAM. GAMES ARE 
A HOME AND AWAY TEAM. GAMES ARE 
AND THAT'S GOING TO TAKE ABOUT FIVE-HOUR 
USE. IT'S A VERY SMALL DOCUMENT. 
LET'S IMAGINE WE NEED TO PROCESS 
ABOUT TEN OR SO OF THESE OPERATIONS 
PER SECOND. THAT IN TOTAL WILL CONSUME 
ABOUT 50RUs OR SOMETHING LIKE THAT. 
WHEN WE NEED TO DISPLAY OUR PLAYER 
LEADERBOARDS AND PLAYER SCORE IN 
REALTIME, WE'RE GOING TO NEED TO 
CONSTANTLY WITH THIS DESIGN, CONSTANTLY 
BE RECOMPUTING A SUM FOR OUR PLAYERS 
AND THEN RANK THOSE SUMS IN THE 
LEADERBOARD. THIS OPERATION IS PROBABLY 
GOING TO CONSUME A LOT OF RUs. IF 
WE'RE TAKING A SUM, OBVIOUSLY, COSMOS 
DB HAS A LOT OF INDEXING AND WAYS 
TO MAKE THAT SUM OPERATION BE FAST, 
BUT IT STILL IS NOT A SIMPLE READ 
OF A DOCUMENT. IT WILL CONSUME MORE 
RUs, AND IT'S POSSIBLE WE COULD 
NEED TO LOOK THROUGH A LOT OF DOCUMENTS 
TO MAKE THAT CALCULATION. SO LET'S 
KIND OF BALLPARK THAT DISPLAYING 
EACH PLAYER'S SCORE WHEN WE NEED 
A SUBSET OF THE DATA AND OUR QUERY 
FILTERS ON, LET'S SAY, A CERTAIN 
FIELD, IS IT POSSIBLE WE COULD ROUTE 
IT TO ONLY THE RELEVANT PARTITIONS? 
SO IF WE FILTER ON OUR PARTITION 
KEY, CAN WE MAKE SURE THAT THAT 
QUERY ONLY NEEDS TO CHECK A CERTAIN 
AMOUNT OF DATA REGARDLESS OF HOW 
BIG OUR TOTAL DATA SET GROWS? IN 
COSMOS DB, ESSENTIALLY WHAT WE DO 
IS STORE YOUR DIFFERENT PARTITION 
KEYS ON DIFFERENT PHYSICAL PARTITIONS. 
AS A DEVELOPER, YOU SPECIFY A PARTITION 
KEY FOR EACH COSMOS CONTAINER. IN 
THIS CASE, LET'S SAY WE'RE SPECIFYING 
USER NAME AS OUR PARTITION KEY. 
WE HAVE DIFFERENT USER NAMES, TIM 
17, ROHAN 75, MARK 72. WE HAVE DIFFERENT 
USER NAMES, AND EACH ONE IS GUARANTEED 
TO BE STORED TOGETHER, AND THEY'RE 
GUARANTEED TO BE STORED TOGETHER 
ON EACH PHYSICAL PARTITION. SO THE 
IDEA HERE IS, IF WE NEEDED TO QUERY 
BASED ON USER NAME AND WE WANTED 
TOGETHER. SO WHEN IT'S TIME TO BRING 
IN THE REST OF THE TEAM AND START 
ADDING THE . NET BITS, THE JAVASCRIPT 
DEVS PUSH THEIR CODE, INCLUDING 
THE MANIFEST THROUGH SOURCE CONTROL. 
AND THEN THAT'S PULLED DOWN IN THE 
INTEGRATION ENVIRONMENT WHERE GENERATES 
THE MANIFEST AND DOES AN IMPORT 
TASK THAT EVERYBODY THAT THE JAVASCRIPT 
DEV BUILT IN TERMS OF ARCHITECTURE, 
THAT GETS PERSISTED, IT GOES INTO 
THE DATABASE AND NOW THAT BECOMES 
THE STARTING POINT OF WHAT THE . 
NET DEVS ARE WORKING WITH. SO AND 
THEN WE CAN PROCEED WITH THE NORMAL 
WORKFLOW, ONLY NOW, THE ARCHITECTURE 
HAS BEEN BUILT BY THE FRONT END 
DEVS, SO THEY'RE TOTALLY IN CONTROL. 
SO LET ME SHOW YOU NOW ONCE WE'VE 
GONE CONNECTED, HOW THE WORKFLOW 
LOOKS FOR FRONT END DEV. SO HERE, 
I HAVE A CONFIG FILE WHICH POINTS 
DIFFERENT. JUST SORT OF LIKE WE 
DIFFERENT. JUST SORT OF LIKE WE 
DEMONSTRATED IN THE BOT THAT WE 
DEMONSTRATED IN THE BOT THAT WE 
CREATED. IN ORDER TO UNDERSTAND 
CREATED. IN ORDER TO UNDERSTAND 
IT PREVIOUSLY, REALMA DRID AND BARCELONA 
IT PREVIOUSLY, REALMA DRID AND BARCELONA 
ARE TWO TEAMS AND RESOLVE IT DOWNSTREAM. 
ARE TWO TEAMS AND RESOLVE IT DOWNSTREAM. 
A BIT OF A PROBLEM. YOU HAVE TO 
A BIT OF A PROBLEM. YOU HAVE TO 
UNDERSTAND, IT'S REALLY COMPLICATED. 
UNDERSTAND, IT'S REALLY COMPLICATED. 
TO THAT END, WE HAVE INTRODUCED 
TO THAT END, WE HAVE INTRODUCED 
WHAT WE CALL ENTITY ROLES ACROSS 
WHAT WE CALL ENTITY ROLES ACROSS 
ALL ENTITY TYPES WITHIN THE LANGUAGE 
ALL ENTITY TYPES WITHIN THE LANGUAGE 
UNDERSTANDING MODEL THAT YOU CAN 
UNDERSTANDING MODEL THAT YOU CAN 
DEVELOP. ABLE TO USE MACHINE LEARNING 
DEVELOP. ABLE TO USE MACHINE LEARNING 
TO UNDERSTAND THAT THE FIRST TEAM 
TO UNDERSTAND THAT THE FIRST TEAM 
PLAYS THE ROLE OF THE HOME AND THE 
PLAYS THE ROLE OF THE HOME AND THE 
SECOND TEAM THE ROLE OF AWAY. YOU 
SECOND TEAM THE ROLE OF AWAY. YOU 
USE THAT EXTRACTION IMMEDIATELY 
USE THAT EXTRACTION IMMEDIATELY 
DOWNSTREAM IN YOUR LODGE CAKE TO 
DOWNSTREAM IN YOUR LODGE CAKE TO 
PROCESS THAT. I'LL QUICKLY SHOW 
PROCESS THAT. I'LL QUICKLY SHOW 
YOU HOW THIS LOOKS IN THE ADJACENT 
YOU HOW THIS LOOKS IN THE ADJACENT 
OBJECT F YOU AREN'T FAMILIAR WITH 
OBJECT F YOU AREN'T FAMILIAR WITH 
THIS, THIS IS THE USER INTERFACE 
THIS, THIS IS THE USER INTERFACE 
FOR THE LANGUAGE UNDERSTANDING SERVICE. 
FOR THE LANGUAGE UNDERSTANDING SERVICE. 
LUIS. AI. THIS IS NOT THE ONLY WAY 
LUIS. AI. THIS IS NOT THE ONLY WAY 
TO ACCESS ALL OF THIS COOL STUFF 
TO ACCESS ALL OF THIS COOL STUFF 
TO CALCULATE IT IN REALTIME CONSUMES 
ABOUT 50 RUs, AND DISPLAYING THE 
LEADERBOARD CONSUMES ABOUT 100 RUs. 
SINCE THIS SAY REALTIME GAME, WE 
NEED TO CONSTANTLY BE DISPLAYING 
THE LEADERBOARD, SO THIS IS ABOUT 
1, 000 RUs PER SECOND. YOU KNOW 
THAT'S A LOT OF RUs, AND THIS DESIGN 
IS NOT SCALEABLE AND NOT MANAGEABLE. 
SO OUR SOLUTION FOR THIS IS A MATERIALIZED 
VIEW, AND WE'LL IMPLEMENT THE MATERIALIZED 
VIEW USING THE CHANGE FEED PROCESSOR 
LIBRARY. SHOW OF HANDS, WHO IS FAMILIAR 
WITH WHAT A MATERIALIZED VIEW IS? 
OKAY, AWESOME. THAT'S ABOUT WHAT 
I EXPECTED. SO I WILL SPEND ABOUT 
FIVE MINUTES INTRODUCING WHAT EXACTLY 
A MATERIALIZED VIEW IS. THE IDEA 
WITH THE MATERIALIZED VIEW IS, INSTEAD 
OF COMPUTING A QUERY OVER AND OVER 
AND OVER AGAIN, WE BASICALLY STORE 
THE RESULTS OF THAT QUERY SOMEWHERE. 
SO THE VIEW IS BASICALLY THE RESULTS 
OF THAT QUERY, AND WE MATERIALIZE 
IT AND GENERATE EACH TIME THERE'S 
TO DO A QUERY BASED ON WHERE WE 
FILTER USER NAME WHERE TIM IS EQUAL 
TO 17, WE ONLY NEED TO SEARCH HERE 
FOR ALL THE TIMS, AND WE COULD ACTUALLY 
SPECIFY, WHEN EXECUTING THE QUERY 
THROUGH THE SDKs, THAT WE ONLY WANTED 
TO LOOK IN THIS PHYSICAL PARTITION. 
THIS MEANS THAT THIS QUERY WILL 
ALWAYS ONLY NEED TO LOOK IN THIS 
PHYSICAL PARTITION. SO FOR FILTERING 
ON USER NAME AND WE KNOW ESSENTIALLY 
WHAT USER NAME WE'RE LOOKING FOR, 
WE CAN TELL THE QUERY ONLY LOOK 
FOR ESSENTIALLY THE PARTITION KEY 
TIM 17, AND COSMOS DB WILL KNOW 
TIM 17 IS IN THIS PHYSICAL PARTITION, 
SO WE ONLY NEED TO LOOK THERE. THE 
IDEA IS, IF YOU HAVE ONE PARTITION, 
THIS QUERY WILL RUN AT THE SAME 
SPEED AND CONSUME THE SAME NUMBER 
OF RUs AS IF YOU HAVE 1, 000 OR 
MORE PARTITIONS. SO WE'LL GO BACK 
TO THE CUSTOMER PROBLEM. AGAIN, 
IT'S A RETAIL CUSTOMER. THEY'RE 
ME TO A REMOTE SITE, FOR INSTANCE. 
AND I RECORDED THIS DEMO BECAUSE 
I DIDN'T TRUST THE WIFI BUT INSTEAD 
OF RUNNING JSS START, I RUN JSS 
START CONNECTED. SO WHAT THIS DOES 
IS IT STILL STARTS ME ON LOCAL HOST 
3, 000, BUT INSTEAD OF PULLING DATA 
FROM MY LOCAL MANIFEST FILE, IT'S 
PULLING IN DATA FROM THAT REMOTE 
SITE AND WE SEE THAT, THE EVENTS 
I'M SEEING NOW LOOK DIFFERENT, IT'S 
NOT JUST THE REPETITIVE EVENTS THAT 
WERE IN MY MANIFEST, IT'S ALL ACTUALLY 
UNIQUE EVENTS, AND I KNOW IT'S WORKING 
FROM THE REAL BACK END BECAUSE I 
CAN GO AND DO SOME PERSONALIZATION, 
I CAN GO AND SAY THAT MY FAVORITE 
TYPE OF SPORTING EVENT IS BASKETBALL. 
AND THEN I'LL SEE THAT NOW, IT'S 
ONLY JUST SHOWING ME BASKETBALL 
EVENTS. SO THIS IS BECAUSE THE CONTENT 
AUTHOR SET UP THOSE PERSONALIZATION 
RULES ON THE BACK END. FURTHER MORE, 
IF I ACTUALLY GRAB THIS URL AND 
U CAN USE THE SDK, USE THE TOOLING, 
U CAN USE THE SDK, USE THE TOOLING, 
IN ORDER TO REACH 
THIS. THIS CREATES 
IN ORDER TO REACH 
THIS. THIS CREATES 
A GOOD VISUAL EFFECT TO LOOK AT 
A GOOD VISUAL EFFECT TO LOOK AT 
F YOU ARE UNFAMILIAR WITH THE INTERFACE, 
F YOU ARE UNFAMILIAR WITH THE INTERFACE, 
THE ASSETS AND COMPONENTS THAT YOU 
THE ASSETS AND COMPONENTS THAT YOU 
HAVE WITHIN YOUR MODEL, INTENTS 
HAVE WITHIN YOUR MODEL, INTENTS 
AND ENTITIES, THE LIST OF INTENTS 
AND ENTITIES, THE LIST OF INTENTS 
WILL, AND I CAN RUN INTO ONE OF 
WILL, AND I CAN RUN INTO ONE OF 
THESE INTENTS. AND SEE THE UTTERANCES 
THESE INTENTS. AND SEE THE UTTERANCES 
THAT I LABLTD, IDENTIFY THE TEAMS, 
THAT I LABLTD, IDENTIFY THE TEAMS, 
THAT I LABELED, HOW SIMPLE IT IS 
THAT I LABELED, HOW SIMPLE IT IS 
TO CREATE A LANGUAGE MODEL. YOU 
TO CREATE A LANGUAGE MODEL. YOU 
NEED TO KNOW THE NAME OF TEAMS, 
NEED TO KNOW THE NAME OF TEAMS, 
CREATE THESE THINGS, AND YOU DON'T 
CREATE THESE THINGS, AND YOU DON'T 
NEED TO SEE THE UNDERLYING TECHNOLOGY 
NEED TO SEE THE UNDERLYING TECHNOLOGY 
THAT MAKES YOU UNDERSTAND THAT, 
THAT MAKES YOU UNDERSTAND THAT, 
YOU JUST GET THE UNDERSTANDING AT 
YOU JUST GET THE UNDERSTANDING AT 
THE THE OUTPUT. IF I HAVE THIS MODEL, 
THE THE OUTPUT. IF I HAVE THIS MODEL, 
AND I RUN THIS UTTERANCE, I TYPED 
AND I RUN THIS UTTERANCE, I TYPED 
IT, I DON'T DO TYPOS FOR THIS CASE, 
IT, I DON'T DO TYPOS FOR THIS CASE, 
I INSPECT THE OUTPUT, ABLE TO IDENTIFY 
I INSPECT THE OUTPUT, ABLE TO IDENTIFY 
THAT ONE OF THEM, ONE OF THE ENTITIES, 
THAT ONE OF THEM, ONE OF THE ENTITIES, 
REALMA DRID IS THE HOME TEAM AND 
REALMA DRID IS THE HOME TEAM AND 
BARCELONA IS IT A WAY TEAM. I CAN 
BARCELONA IS IT A WAY TEAM. I CAN 
A NEW WRITE OR WITH SOME KIND OF 
BASICALLY POLLING FREQUENCY. THE 
IDEA IS, IF YOU'RE RUNNING A COMPLEX 
QUERY, WE STORE THE RESULTS SO YOU 
DON'T HAVE TO RUN THAT QUERY EVERY 
TIME WE NEED TO REFRESH THE LEADERBOARD. 
THE MATERIALIZED VIEW WILL PROVIDE 
A SUBSET OF THE DATA THAT YOU NEED 
FOR THE USE CASE AND THE RESULTS 
OF THE QUERY. THE GOAL WITH THIS 
IS THAT IT IMPROVES PERFORMANCE, 
AND WE CAN DEFINE PERFORMANCE AS 
COST AND LATENCY. SO IT WILL REDUCE 
COST BECAUSE YOU NEED FEWER RUs, 
AND BECAUSE YOU DON'T CONSTANTLY 
NEED TO BE DOING THESE COMPUTATIONS, 
YOU'LL BASICALLY IMPROVE THE REALTIMENESS 
OF YOUR USER EXPERIENCE. HERE'S 
A KIND OF VISUAL EXAMPLE OF WHAT 
THE MATERIALIZED VIEW IS. FOR THE 
PINBALL GAME, WE'RE GOING TO MODEL 
THE SCORE EVENT DOCUMENT KIND OF 
LIKE THIS. SO WE HAVE JUST AN ID 
FOR THIS DOCUMENT, AND THEN WE HAVE 
A PLAYER ID FOR THE PLAYER THAT 
SCORED, AND THEN WE ALSO HAVE A 
SCORE, AND THAT'S THE AMOUNT THAT 
WILL BASICALLY BE INCREMENTING EACH 
STORING ABOUT A TERABYTE OF DATA. 
EACH DOCUMENT'S ABOUT 1 KB, SO PRETTY 
SMALL DOCUMENTS. THEY DO HAVE A 
VERY HEAVY WORKLOAD. THEY'RE DOING 
ABOUT 1, 000 READS PER SECOND. SO 
1, 000 READS TO 10 WRITES, THAT'S 
A PRETTY READ HEAVY RATIO. THIS 
IS WHAT THEIR DOCUMENTS LOOK LIKE. 
I'LL GIVE EVERYONE A SECOND TO TAKE 
IN THE DOCUMENT SINCE I KNOW THERE'S 
A LOT OF TEXT THERE. ESSENTIALLY, 
IT HAS THE USER NAME, EMAIL OF EACH 
CUSTOMER, THEIR FIRST NAME, THEIR 
LAST NAME, THEIR AGE, THEIR BALANCE, 
AND A BUNCH OF OTHER DATA THERE 
AS WELL. WITH THIS RETAIL WEBSITE, 
WE ALLOW YOU TO ESSENTIALLY LOGIN 
AND VIEW ALL YOUR CUSTOMER INFORMATION. 
WHEN YOU LOGIN, YOU LOGIN WITH YOUR 
USER NAME. SO A VERY COMMON QUERY 
FOR THIS WORKLOAD IS SELECT STAR 
WHERE USER NAME IS EQUAL TO WHATEVER 
VALUE YOU TYPED INTO THAT BOX. THIS 
QUERY, I SAID WE HAD 1, 000 QUERIES 
PER SECOND. FOR THIS EXAMPLE, LET'S 
ASSUME THAT THIS EXACT QUERY IS 
RUN 1, 000 TIMES PER SECOND. SO 
GO TO THE BACK END, I CAN PROVE 
THAT THIS LOCAL DATA THAT I'M WORKING 
WITH IS ACTUALLY DYNAMIC DATA BECAUSE 
I CAN GO AND CHANGE SOMETHING. SO 
I CAN GO INTO -- THIS IS WHAT THE 
AUTHOR WOULD SEE. SO THEY WOULD 
ACTUALLY BE ABLE TO EDIT THE PAGE 
AND SEE MY REACT COMPONENTS IN THIS 
INTERFACE BUT THEY CAN EDIT THEM 
AND ADD THEM OR MODIFY THEM AND 
CHANGE FIELD AND CHANGE CONTENT. 
SO I JUST ADDED A SECOND NAVIGATION 
COMPONENT, JUST BECAUSE I DON HAVE 
THE THAT MANY -- DON'T HAVE THAT 
MANY COMPONENTS HERE TO WORK WITH. 
AND ONCE I SAVE IT AND RELOAD THE 
LOCAL HOST 3, 000, I HAVE TWO NAVIGATION 
COMPONENTS HERE AS WELL. AND CONVERSELY, 
IF I START CHANGING MY CODE, LOCALLY, 
I WOULD SEE THOSE CHANGES REFLECTED 
BACK IN DIFFERENT MODE CYCLE SERVER 
BECAUSE ALTHOUGH, THE LAYOUT DATA 
LOOK AT THE DETAIL OBJECT. HELPS 
LOOK AT THE DETAIL OBJECT. HELPS 
YOU SIMPLIFY THE LOGIC DOWNSTREAM. 
YOU SIMPLIFY THE LOGIC DOWNSTREAM. 
LET'S GO BACK. NOT ONLY LIMITED 
LET'S GO BACK. NOT ONLY LIMITED 
TO TEAMS IN SPORTS. CAN YOU THINK 
TO TEAMS IN SPORTS. CAN YOU THINK 
OF OTHER SCENARIOS THAT YOU HAVE 
OF OTHER SCENARIOS THAT YOU HAVE 
THIS NOTION OF ROLES. E-MAILS AND 
THIS NOTION OF ROLES. E-MAILS AND 
CARBON COPY, THINK OF THE SHOPPING 
CARBON COPY, THINK OF THE SHOPPING 
LIST, ITEM NUMBER 2 AND YOU HAVE 
LIST, ITEM NUMBER 2 AND YOU HAVE 
TWO ITEMS OF THAT THING YOU WANT 
TWO ITEMS OF THAT THING YOU WANT 
TO BUY. THESE ARE TWO NUMBERS. BUT 
TO BUY. THESE ARE TWO NUMBERS. BUT 
HOW DO YOU DISTINGUISH BETWEEN THEM. 
HOW DO YOU DISTINGUISH BETWEEN THEM. 
SIMPLIFIES THE LOGIC YOU CAN USE 
SIMPLIFIES THE LOGIC YOU CAN USE 
FASTER IN YOUR BUSINESS LOGIC. MANY 
FASTER IN YOUR BUSINESS LOGIC. MANY 
CASES, AS A DEVELOPER, YOU HAVE 
CASES, AS A DEVELOPER, YOU HAVE 
A RESOLUTION FOR THESE ENTITIES. 
A RESOLUTION FOR THESE ENTITIES. 
YOU DON'T WANT TO PUSH IT TO THE 
YOU DON'T WANT TO PUSH IT TO THE 
LANGUAGE MODEL. YOU KNOW FOR EXAMPLE 
LANGUAGE MODEL. YOU KNOW FOR EXAMPLE 
PLAYER'S SCORE BY. THE IDEA IS THAT 
THESE ARE SMALL DOCUMENTS. SO THEY'RE 
BASICALLY REALLY EASY TO WRITE TO 
COSMOS DB, AND EACH TIME WE DO A 
WRITE, WE'LL RECALCULATE THE LEADERBOARD, 
AND AFTER EACH COUPLE OF SECONDS, 
WE RECALCULATE THE LEADERBOARD AND 
STORE THAT ALSO IN COSMOS DB, SO 
IT'S RECALCULATED, AND IF WE NEED 
TO DISPLAY THE LEADERBOARD, IT'S 
A SIMPLE READ OF THE ALREADY EXISTING 
DOCUMENT. THE IDEA WITH THIS IS 
THAT, IF YOU NEED TO DO 1, 000 OR 
1 MILLION OF THESE LEADERBOARD DISPLAYS 
IN A SECOND, THEY'RE SIMPLE READS 
OF A DOCUMENT. YOU'RE NOT PERFORMING 
ANY COMPLEX LOGIC OR CALCULATIONS. 
SOCAL CLATING THE LEADERBOARD EACH 
TIME IS GOING TO USE A LOT OF RUs. 
SO LET'S TAKE THE RESULTS OF THAT 
QUERY AND STORE IT SOMEWHERE, SO 
WHEN WE NEED TO DO THAT, IT'S JUST 
A SIMPLE LOOKUP. MAKE SENSE? SO 
OUR INITIAL DESIGN BASICALLY CONSUMED 
ABOUT 150, 000 RUs BECAUSE WE NEEDED 
WE REALLY WANT TO MAKE SURE THIS 
QUERY IS OPTIMAL, THAT IT'S FAST, 
AND CONSUMES THE FEWEST NUMBER OF 
RUs POSSIBLE. NOW, I KIND OF TALKED 
ABOUT EARLIER HOW IN COSMOS DB YOU 
CAN MAKE EACH QUERY GO TO A SINGLE 
PARTITION, AND THIS IS A GOOD DESIGN 
PRACTICE TO FOLLOW IF YOU HAVE A 
VERY LARGE DATA SET AND KIND OF 
A GOOD THING TO DESIGN FOR. KEEP 
IN MIND THAT THIS IS COMPLETELY 
SEPARATE FROM INDEXING. IF YOU HAVE 
A QUERY THAT NEEDS TO GO ACCESS 
DATA IN EVERY SINGLE PARTITION, 
IT WILL STILL ABSOLUTELY USE THE 
INDEX IN EACH PARTITION, ASSUMING 
YOU HAVE INDEXING SET ON THE RELEVANT 
PROPERTIES. SO THIS -- THE CONSEQUENCES 
OF NOT GOING WITH THIS DESIGN FOR 
MANY USE CASES IS TOTALLY FINE. 
IF YOU HAVE A QUERY THAT NEEDS TO 
GO AND CHECK EVERY PARTITION, FOR 
SMALL DATA SETS, THAT'S REALLY NOT 
GOING TO BE THAT BIG OF A DEAL. 
YOU'RE CHARGED A FEW RUs FOR EACH 
PARTITION, FOR EACH PHYSICAL PARTITION, 
IS COMING FROM THE REMOTE PLATFORM, 
IT'S USING THE NOTE SERVER ON MY 
MACHINE TO RENDER THE APP. SO NOW 
LET'S TALK ABOUT -- WE TALKED ABOUT 
THE WORKFLOW FOR THE DEVELOPER, 
THE DISCONNECTED MODE AND WE TALKED 
ABOUT THE WORKFLOW FOR WHAT IT'S 
LIKE TO BUILD FOR THE EDITOR. SO 
LET'S TALK A LITTLE BIT ABOUT BUILDING 
FOR TEND USER. SO FOR THE END USER, 
SINCE WE DIDN'T HAVE TO WRAP THE 
HTML GENERATED BY THE SERVER SIDE 
RENNERING IN ANY EXTRA BITS, WE 
REALIZED THAT NODE WAS DOING ALL 
OF THE WORK AND THERE'S NO REASON 
WHY WE COULDN'T EXTERNALIZE THAT 
NODE RENDERING, YOU KNOW, SEPARATELY 
AND PUT IT ON A DIFFERENT SERVER 
AND, YOU KNOW, THERE'S NO REASON 
WHY NODE CAN'T BE OUR EDGE AND WHY 
IN THIS CASE WHEN ARE THEY PLAYING 
IN THIS CASE WHEN ARE THEY PLAYING 
THEM, THEY REFERS TO BARCELONA. 
THEM, THEY REFERS TO BARCELONA. 
YOU KNOW IN THE MEMORY OF THE BOT 
YOU KNOW IN THE MEMORY OF THE BOT 
OR MY REFERENCES, YOU KNOW MY FAVORING 
OR MY REFERENCES, YOU KNOW MY FAVORING 
TEAM WHICH IS APPARENTLY NOT BARCELONA. 
TEAM WHICH IS APPARENTLY NOT BARCELONA. 
YOU HAVE A RESOLUTION FOR. THAT 
YOU HAVE A RESOLUTION FOR. THAT 
YOU DON'T WANT THE MODEL TO DO THAT. 
YOU DON'T WANT THE MODEL TO DO THAT. 
HOW DO I GET ABOUT THAT? YOU CAN 
HOW DO I GET ABOUT THAT? YOU CAN 
GO DO A CUMBERSOME MODEL THAT TRIES 
GO DO A CUMBERSOME MODEL THAT TRIES 
TO RESOLVE THEM OR WORK WITNESS, 
TO RESOLVE THEM OR WORK WITNESS, 
OR SIMPLIFY IT BEING ABLE TO RESOLVE 
OR SIMPLIFY IT BEING ABLE TO RESOLVE 
IT AND SEND THE RESOLUTION DOWN 
IT AND SEND THE RESOLUTION DOWN 
TO THE LANGUAGE UNDERSTANDING MODEL. 
TO THE LANGUAGE UNDERSTANDING MODEL. 
WE HAVE INTRODUCED WHAT WE CALL 
WE HAVE INTRODUCED WHAT WE CALL 
EXTERNAL ENTITIES, DO THE RESOLUTION 
EXTERNAL ENTITIES, DO THE RESOLUTION 
IN THE BOT END, THEN SEND IT ON 
IN THE BOT END, THEN SEND IT ON 
TO THE LANGUAGE UNDERSTANDING MODEL, 
TO THE LANGUAGE UNDERSTANDING MODEL, 
IN ORDER TO PROCESS AND FURTHER 
IN ORDER TO PROCESS AND FURTHER 
UNDERSTAND THE OTHER COMPONENTS 
UNDERSTAND THE OTHER COMPONENTS 
WITHIN THE UTTERANCE BY PASSING 
WITHIN THE UTTERANCE BY PASSING 
OVER THIS COMPONENT. YOU DO YOUR 
OVER THIS COMPONENT. YOU DO YOUR 
EXTERNAL RECOGNIZER THAT, CAN BE 
EXTERNAL RECOGNIZER THAT, CAN BE 
SOMETHING SPECIFIC FOR THE ORGANIZATION, 
SOMETHING SPECIFIC FOR THE ORGANIZATION, 
FOR YOUR ENTERPRISE THAT, CAN BE 
FOR YOUR ENTERPRISE THAT, CAN BE 
SOMETHING THAT ADDRESSES ISSUES 
SOMETHING THAT ADDRESSES ISSUES 
WITH SPEECH AND MODELS THAT ARE 
WITH SPEECH AND MODELS THAT ARE 
SPECIFIC TO THE ACOUSTIC ENVIRONMENT 
SPECIFIC TO THE ACOUSTIC ENVIRONMENT 
TO CONSTANTLY, CONSTANTLY RECOMPUTE 
THE LEADERBOARD FOR EACH KIND OF 
PLAYER AND PLAYER SCORE AND TO DISPLAY 
THE AGGREGATED LEADERBOARD. WITH 
THIS NEW DESIGN, WE CAN SIGNIFICANTLY 
REDUCE THE AMOUNT OF OUR USE. THE 
IDEA IS THAT EACH SCORE EVENT WILL 
CONTINUE TO TAKE FIVE HOUR USE. 
LET'S IMAGINE WE HAVE ABOUT TEN 
PER SECOND. IN REALITY, IT WOULD 
BE ABSOLUTELY NO ISSUE IF THIS VIDEO 
GAME NEEDED TO SCALE TO MILLIONS 
OF EVENTS PER SECOND. THAT WOULD 
BE NO PROBLEM AT ALL, AND THAT'S 
WHY IT'S AWESOME TO USE COSMOS DB. 
BUT LET'S IMAGINE FOR THE PURPOSES 
OF THIS CALCULATION THAT EACH SCORING 
EVENT BASICALLY CONSUMES ABOUT 5 
RUs. LET'S SAY THAT WE HAVE ABOUT 
10 OF THESE OPERATIONS, SCORE EVENTS 
PER SECOND. FOR THE RIGHTS, WE'LL 
CONSUME 50 RUs. WE DO NEED SOME 
RUs FROM THE CHANGE FEED. LET'S 
WHOSE INDEX YOU NEED TO CHECK AND 
WHERE YOU DON'T RECEIVE ANY VALUES. 
YOU'RE STILL DOING AN INDEX AND 
NOT DOING A FULL SCAN OF THE DOCUMENTS, 
BUT YOU DO PERFORM UNNECESSARY COMPUTATIONS. 
THE IDEA IS, IF WE'RE SCALING TO 
PETABYTES, THIS IS A VERY BIG THING 
WE WANT TO DESIGN FOR AND ACCOUNT 
FOR IN ESSENTIALLY OUR DATA MODEL 
AND HOW WE BUILD OUR APP. SO CUSTOMER 
PROBLEM, THEY'RE RUNNING THIS QUERY 
VERY OFTEN, AND THEY WANT TO MAKE 
SURE IT'S INCREDIBLY PERFORMANT. 
IF OUR QUERY FILTERS ON USER NAME, 
AS IT DOES HERE, WHAT WOULD WE WANT 
OUR PARTITION KEY TO BE TO ENSURE 
WE HAVE GOOD PERFORMANCE? THIS IS 
A QUESTION FOR YOU GUYS, AND TO 
INCENTIVIZE PARTICIPATION, SINCE 
I KNOW I'VE BEEN TALKING FOR 50 
MINUTES NOW, I DO HAVE A PRIZE, 
SOME SOCKS. ANY VOLUNTEERS? YES? 
SAY IT LOUDER. >> USER NAME? >> 
THERE WE GO. ALL RIGHT. ALL RIGHT. 
THERE'S A LITTLE BIT OF A BREEZE. 
SORRY ABOUT THAT. COOL. USER NAME. 
IT CAN'T BE THE ONE TAKING THE REQUEST 
AND PROXYING THEM BACK TO LAYOUT 
SERVICE. AND THIS MAKES IT REALLY 
GREAT BECAUSE THIS MAKES OUR PLATFORM 
TRULY HEADLESS. THE BROWSER HAS 
NO IDEA WHAT IS -- YOU KNOW, IT'S 
TALKING TO NODE DIRECTLY, SO IT 
JUST THINKS IT'S TALKING TO AN API, 
IT HAS NO IDEA WHAT'S HAPPENING 
ON THE BACK END. SO THE BIGGEST 
HURDLE IN THIS ARCHITECTURE WAS 
COOKIES. BECAUSE ALL OF THE PERSONALIZATION 
AND DYNAMIC STUFF I SHOWED ARE DRIVEN 
BY COOKIES. SO WE FOUND SOME MIDDLE 
WARE THAT HELPED US OVERCOME THIS 
CHALLENGE. IT WORKED WITH EXPRESS 
AND IT WAS ABLE TO PRESERVE COOKIES 
IN THE WAY THAT WE NEEDED WITH REWRITING 
ORIGINS IN A SAFE AND SECURE WAY. 
I WAS REALLY NEAT TO SEE THIS HEAD 
LESS ARCHITECTURE SNAP INTO PLACE. 
THIS OPENED UP THE PLATFORM TO TRACKING 
THAT YOU HAVE. ALL OF THESE RESOLUTIONS 
THAT YOU HAVE. ALL OF THESE RESOLUTIONS 
THAT YOU CAN DO ON YOUR SIDE, ON 
THAT YOU CAN DO ON YOUR SIDE, ON 
THE LOCAL SORT OF SIDE, YOU SEND 
THE LOCAL SORT OF SIDE, YOU SEND 
OVER THAT AND CAN YOU USE EXTERNAL 
OVER THAT AND CAN YOU USE EXTERNAL 
ENTITIES. THERE'S ANOTHER WAY TO 
ENTITIES. THERE'S ANOTHER WAY TO 
RESOLVE THAT, AND I HAVE THE INFORMATION, 
RESOLVE THAT, AND I HAVE THE INFORMATION, 
I HAVE THE KNOWLEDGE, BUT I DON'T 
I HAVE THE KNOWLEDGE, BUT I DON'T 
WANT TO DO MY OWN RESOLUTION. I 
WANT TO DO MY OWN RESOLUTION. I 
DON'T WANT TO SORT OF DO THAT ON 
DON'T WANT TO SORT OF DO THAT ON 
MY END. I WANT TO DO IT IN THE MODEL 
MY END. I WANT TO DO IT IN THE MODEL 
END. THIS PIECE OF INFORMATION YOU 
END. THIS PIECE OF INFORMATION YOU 
WANT TO PASS OVER. THE ONES WE SHOWED 
WANT TO PASS OVER. THE ONES WE SHOWED 
ABOUT LIVERPOOL TOMORROW, THE CHAMPION'S 
ABOUT LIVERPOOL TOMORROW, THE CHAMPION'S 
LEAGUE IS A BIG SPORTING EVENT, 
LEAGUE IS A BIG SPORTING EVENT, 
THAT HAPPENS IN EUROPE, BUT IT'S 
THAT HAPPENS IN EUROPE, BUT IT'S 
NOT REALLY LA LIGA. THIS PIECE OF 
NOT REALLY LA LIGA. THIS PIECE OF 
INFORMATION CHANGES EVERY YEAR AND 
INFORMATION CHANGES EVERY YEAR AND 
EVERY STAGE, YOU WANT TO PASS OVER 
EVERY STAGE, YOU WANT TO PASS OVER 
THIS INFORMATION INTO THE LANGUAGE 
THIS INFORMATION INTO THE LANGUAGE 
UNDERSTANDING MODEL. RATHER ON YOUR 
UNDERSTANDING MODEL. RATHER ON YOUR 
END, YOU POOL SOV IT ON THE LANGUAGE 
END, YOU POOL SOV IT ON THE LANGUAGE 
END. TO THAT YOU SEND THAT INFORMATION 
END. TO THAT YOU SEND THAT INFORMATION 
THEN YOU HAVE THAT KNOWLEDGE THAT 
THEN YOU HAVE THAT KNOWLEDGE THAT 
YOU HAVE OVER INTO THE LANGUAGE 
YOU HAVE OVER INTO THE LANGUAGE 
UNDERSTANDING MODEL. USES IT IN 
UNDERSTANDING MODEL. USES IT IN 
ORDER TO RESOLVE ENTITIES IN THE 
ORDER TO RESOLVE ENTITIES IN THE 
MODEL ITSELF. RATHER THAN HAVING 
MODEL ITSELF. RATHER THAN HAVING 
ASSUME IT'S 20 OR 30 READS PER SECOND. 
THESE ARE NEEDED TO PUT THE PLAYER 
SCORE DOCUMENT AND UPDATE THE LEADERBOARD 
AS WELL. FOR THIS, WE NEED TO CHANGE 
THE CHANGE FEED LIBRARY TO SUBSCRIBE 
TO CHANGES AND VERY EASILY READ 
FROM THE CHANGE FEED TO RECALCULATE 
OUR PLAYER'S TOTAL SCORE AND LEADERBOARD. 
WHEN WE NEED TO UPDATE THE LEADERBOARD 
DOCUMENT, IF WE NEED TO DO THAT 
FOR A PLAYER THAT'S BASICALLY PLAYED 
IT ONTO THE LEADERBOARD AND HAD 
THEIR SCORE CHANGED, WE'RE GOING 
TO USE 10 RU s. WE'LL ALSO USE 10 
RUs TO UPDATE EACH PLAYER'S DOCUMENT. 
IN ORDER TO UPDATE, IT USES SLIGHTLY 
MORE RUs THAN JUST A WRITE. WE'LL 
ROUGHLY BALK THAT AT 10 RUs. FOR 
THAT IN TOTAL, WE'LL CONSUME 100 
RUs. MOST IMPORTANTLY, WHEN WE NEED 
TO DISPLAY THE PLAYER'S SCORE OR 
THE LEADERBOARD, WE'RE ONLY GOING 
TO CONSUME ROUGHLY 1 TO 2 RUs. IN 
COSMOS DB, IF YOU KNOW THE ID OF 
A DOCUMENT AND YOU KNOW WHAT PARTITION 
THAT'S EXACTLY RIGHT. WE WANT TO 
PARTITION ON USER NAME. SO IN THIS 
CASE, WE HELD OUR DOCUMENT, AND 
WE'RE GOING TO DIVIDE UP OUR DATA 
TO THE DIFFERENT PHYSICAL PARTITIONS 
BASED ON THE USER NAME. THIS MAKES 
SENSE EVEN IF YOU DON'T UNDERSTAND 
COSMOS DB IN DEPTH. THIS EXAMPLE 
SHOULD MAKE A LOT OF SENSE AND BE 
CLEAR. THIS DESIGN IS AWESOME. IT'S 
INCREDIBLY SCALEABLE. IF WE DO A 
WRITE OF A DOCUMENT, JUST ESTIMATE 
IT CONSUMES ABOUT 5 RUs. IF WE NEED 
TO DO 10 PER SECOND, IT WILL CONSUME 
ABOUT 50 RUs. IF WE DO THE QUERY 
SELECT STAR FROM IS EQUAL TO THAT 
VALUE. IT'S GOING TO CONSUME, LET'S 
GUESS, ROUGHLY 3 RUs. IF WE NEED 
TO DO A THOUSAND OF THOSE PER SECOND, 
STILL NOT A LOT OF RUs. IF WE NEED 
TO DO A MILLION PER SECOND, IT STILL 
WOULD BE PERFORMANT, AND BECAUSE 
IT'S SCOPED TO A SINGLE PARTITION 
KEY, WE CAN MAKE SURE THAT QUERY 
HAS CONSTANT PERFORMANCE REGARDLESS 
OF HOW LARGE OUR DATA SIZE GROWS. 
IF OUR QUERY FILTERS ON EMAIL, WHAT 
A SINGLE USER SESSION ACROSS ALL 
DIFFERENT CHANNELS. SO IN OUR JSS 
CODE, JUST QUICKLY SHOWING -- THIS 
RIGHT HERE. SO, YEAH, THE JSS PROXY 
MODULE, THIS IS THE NODE MODULE 
THAT WE USED FOR THE MIDDLEWARE 
AND IT'S A LIGHT WRAPPER. THAT WE 
HAVE HERE AROUND THIS MIDDLEWARE. 
AND I JUST WANT TO SHOW REALLY QUICKLY, 
IF YOU GUYS END UP USING THIS, THE 
CHANGE ORIGIN WAS REALLY -- THE 
CHANGE ORIGIN ON LINE 435 WAS REALLY 
KEY FOR PRESERVING COOKIES AND THEN 
THE ON PROXY RES ON 43 9, THAT'S 
WHAT TAKES THE REQUEST FROM THE 
END USER AND WE CAN WRITE IT TO 
TO RESOLVE IT EXTERNALLY. AND THAT 
TO RESOLVE IT EXTERNALLY. AND THAT 
WOULD PREVIOUSLY HAPPEN THAT YOU 
WOULD PREVIOUSLY HAPPEN THAT YOU 
NEED TO GET THIS INFORMATION. PUT 
NEED TO GET THIS INFORMATION. PUT 
IT INTO YOUR MODEL. THEN REPUBLIC, 
IT INTO YOUR MODEL. THEN REPUBLIC, 
WHICH IS A PAINFUL EXPERIENCE. IF 
WHICH IS A PAINFUL EXPERIENCE. IF 
IT'S EVER-CHANGING THEN YOU HAVE 
IT'S EVER-CHANGING THEN YOU HAVE 
TO DO THE PROCESS OF REPUBLICING 
TO DO THE PROCESS OF REPUBLICING 
EVERY SINGLE TIME. NOW IT'S SIMPLER, 
EVERY SINGLE TIME. NOW IT'S SIMPLER, 
CAN ACTUALLY SEND IN ON THE FLY 
CAN ACTUALLY SEND IN ON THE FLY 
IN RUN TIME AND YOU DON'T HAVE TO 
IN RUN TIME AND YOU DON'T HAVE TO 
REPUBLIC. THE OTHER COOL -- REPUBLISH. 
REPUBLIC. THE OTHER COOL -- REPUBLISH. 
YOU CAN PERSONALIZE IT. THESE ENTITIES 
YOU CAN PERSONALIZE IT. THESE ENTITIES 
IN THE MODEL THAT YOU CAN CAPTURE 
IN THE MODEL THAT YOU CAN CAPTURE 
ARE THE MODELWIDE. THE APPLICATIONWIDE. 
ARE THE MODELWIDE. THE APPLICATIONWIDE. 
NOW IF I CAN SEND SOME DYNAMIC LICKSTS 
NOW IF I CAN SEND SOME DYNAMIC LICKSTS 
DOWN I CAN SEND MY PERSONAL FLAVOR 
DOWN I CAN SEND MY PERSONAL FLAVOR 
OF MUSIC. MY PERSONAL RESTAURANT 
OF MUSIC. MY PERSONAL RESTAURANT 
LIST. SEND THINGS THAT ARE PERSONAL, 
LIST. SEND THINGS THAT ARE PERSONAL, 
THEN RESOLVE THIS IN A MORE PERSONAL 
THEN RESOLVE THIS IN A MORE PERSONAL 
PERSPECTIVE. THIS COMES AS A WAY 
PERSPECTIVE. THIS COMES AS A WAY 
TO RESOLVE THAT AND HELP YOUR BUSINESS 
TO RESOLVE THAT AND HELP YOUR BUSINESS 
LOGIC FURTHER DOWN TO PERSONALIZE. 
LOGIC FURTHER DOWN TO PERSONALIZE. 
AND RESOLVE ALL OF THESE ENTITIES. 
AND RESOLVE ALL OF THESE ENTITIES. 
COLLECTIVELY, THESE NEW ENTITY EXTRACTIONS 
COLLECTIVELY, THESE NEW ENTITY EXTRACTIONS 
THAT WE HAVE PRESENTED IN THE LANGUAGE 
THAT WE HAVE PRESENTED IN THE LANGUAGE 
UNDERSTANDING, HELP YOU DESIGN AND 
UNDERSTANDING, HELP YOU DESIGN AND 
IT'S IN, IT'S A VERY SIMPLE LOOKUP, 
AND IT'S GOING TO BE INCREDIBLY 
PERFORMANT. WE CAN GUARANTEE WITH 
AN SLA, IF IT'S A SMALL DOCUMENT, 
IT WILL BE UNDER 10 MILLISECONDS. 
IN ADDITION, THAT OPERATION IS NOT 
GOING TO CONSUME MANY RUs. IN THIS 
CASE, WE'LL ASSUME IT'S GOING TO 
CONSUME 1 RU. IF WE NEED TO SCALE 
TO 1, 000 OR 1 MILLION READS PER 
SECOND, BECAUSE WE HAVE A MATERIALIZED 
VIEW, THIS IS REALLY NO ISSUE. ROUGHLY, 
THIS IS HOW WE MODEL OUR DIFFERENT 
DOCUMENTS, AND THE GREAT THING ABOUT 
COSMOS DB IS, BECAUSE ITS SCHEMA 
IS ENFORCED AT THE APPLICATION LEVEL 
RATHER THAN THE DATABASE LEVEL, 
WE CAN STORE ALL OF THESE DOCUMENTS 
IN ONE GIANT COSMOS DB COLLECTION. 
SO WE HAVE A STORE DOCUMENT THAT 
HAS JUST AN ID. IT IS A PLAYER ID 
THAT CORRESPONDS TO WHICH PLAYER 
SCORED, AND THEN IT HAS A SCORE 
AMOUNT, WHICH IS WHAT WE'RE BASICALLY 
INCREMENTING OUR PLAYER'S SCORE 
BY. WE HAVE A PLAYER SCORE DOCUMENT 
THAT HAS THE ID, WHICH IS THE PLAYER'S 
NAME. SO TIM, IN THIS CASE, THAT'S 
SHOULD OUR PARTITION KEY BE? AS 
YOU CAN IMAGINE, THERE'S PROBABLY, 
IF YOU'VE EVER LOGGED INTO A RETAIL 
WEBSITE BEFORE, YOU CAN USUALLY 
LOGIN WITH YOUR USER NAME, AND IF 
YOU FORGET YOUR USER NAME, THERE'S 
USUALLY HOPEFULLY AN OPTION TO TYPE 
IN YOUR EMAIL AS WELL. SO WHEN A 
CUSTOMER DOES THIS AND WE NEED TO 
LOOK UP THE CUSTOMER DATA, WHAT 
WOULD WE WANT OUR QUERY TO FILTER 
ON? SURPRISE, SURPRISE, MORE SOCKS 
TO INCENTIVIZE AN ANSWER. ANYBODY? 
YES. >> THE EMAIL? >> BINGO. SO 
I'M AFRAID I'M GOING TO HIT THE 
TV, SO I WON'T THROW THIS TO YOU. 
COME SEE ME AFTERWARDS, AND I WILL 
GIVE YOU YOUR SOCKS. I DON'T TRUST 
MY AIM TODAY. EXACTLY RIGHT. YOU'D 
WANT TO FILTER ON EMAIL. SO WITH 
THIS -- OR YOU WANT TO PARTITION 
ON EMAIL. WITH THIS, WHEN YOU FILTER 
ON EMAIL, SAME CONCEPT. IT'S ONLY 
GOING TO CHECK THE INDEX FOR THE 
RELEVANT PARTITION WHERE EMAIL IS 
STORED. VERY, VERY SIMPLE. I'M SURE 
EVERYONE UNDERSTANDS THIS NOW. BUT 
WHAT IF WE NEED TO ALLOW CUSTOMERS 
TO LOGIN BY EITHER USER NAME OR 
LOOK LIKE HOWEVER WE WANT. SO REACT 
FOR EXAMPLE, OR FRONT END APPS IN 
GENERAL HAVE THEIR OWN WAY OF DOING 
ROUTING. SO SINCE OUR BACK END STILL 
IS COMPATIBLE WITH MVC ROUTE, MVC 
ROUTING AND REACT, IT'S NOT A SINGLE-PAGE 
APP ON THE BACK END, SO WE HAVE 
TO DO SOME TRANSFORMATIONS TO HOW 
THE ROUTES ARE HANDLED, SO WE'RE 
DOING THAT HERE. SO ONCE WE GOT 
TO TECH PREVIEW, WE HAD THE ARCHITECTURE 
PRETTY 
MUCH IRONED OUT. SO NOW 
IT WAS TIME TO GO BEYOND REACT AND 
STARTED LOOKING TO SUPPORT THE OTHER 
FRAMEWORKS. ONE OF THE THINGS WE 
DID WAS IN OUR STARTERS, WE ADDED 
STYLE GUIDES TO SHOW EXAMPLES OF 
THE COMMON THINGS THAT PEOPLE DID 
IN THOSE FRAMEWORKS, LIKE FOR EXAMPLE, 
BUILD MORE ADVANCED MODELS. THERE'S 
BUILD MORE ADVANCED MODELS. THERE'S 
A COUPLE OF OTHER THINGS THAT HAPPEN, 
A COUPLE OF OTHER THINGS THAT HAPPEN, 
WE'RE EXPANDING OUR FOREIGN LANGUAGE 
WE'RE EXPANDING OUR FOREIGN LANGUAGE 
SUPPORT, WE ARE DEPLOYING OUR SERVICE 
SUPPORT, WE ARE DEPLOYING OUR SERVICE 
IN MORE LOCATIONS INCLUDING CHINA, 
IN MORE LOCATIONS INCLUDING CHINA, 
WE'RE ALSO ADDING A LOT OF THE SKILLS 
WE'RE ALSO ADDING A LOT OF THE SKILLS 
THAT ARE BEING DEVELOPED SO THAT 
THAT ARE BEING DEVELOPED SO THAT 
YOU CAN GET UP AND RUNNING WITH 
YOU CAN GET UP AND RUNNING WITH 
A CONVERSATIONAL MODEL PRETTY QUICKLY 
A CONVERSATIONAL MODEL PRETTY QUICKLY 
WITH THE SORT OF BASIC UTILITIES 
WITH THE SORT OF BASIC UTILITIES 
THAT YOU CAN HAVE. AND WE'VE ALSO 
THAT YOU CAN HAVE. AND WE'VE ALSO 
OPTIMIZED THE TRAINING SERVICE. 
OPTIMIZED THE TRAINING SERVICE. 
IF YOU HAVEN'T USED LUIS FOR SOME 
IF YOU HAVEN'T USED LUIS FOR SOME 
TIME, LANGUAGE UNDERSTANDING SERVICE, 
TIME, LANGUAGE UNDERSTANDING SERVICE, 
YOU WILL BE INTERESTED TO TRY THE 
YOU WILL BE INTERESTED TO TRY THE 
NEW TRAINING SERVICE FARTHER OPTIMIZED. 
NEW TRAINING SERVICE FARTHER OPTIMIZED. 
I HAVE BUILT AND DESIGNED MY MODEL. 
I HAVE BUILT AND DESIGNED MY MODEL. 
THEN COME THE QUESTION, WHICH USUALLY 
THEN COME THE QUESTION, WHICH USUALLY 
COMES MY QUESTION, THIS THE BEST 
COMES MY QUESTION, THIS THE BEST 
MODEL THAT I HAVE, HOW CAN I IMPROVE 
MODEL THAT I HAVE, HOW CAN I IMPROVE 
IT. AS A DEVELOPER YOU EVER SOMETHING. 
IT. AS A DEVELOPER YOU EVER SOMETHING. 
IS IT THE BEST? ARE THERE WAYS TO 
IS IT THE BEST? ARE THERE WAYS TO 
RESOLVE THAT? WE HAVE CREATED SOME 
RESOLVE THAT? WE HAVE CREATED SOME 
INSIGHTS, TRYING TO EXTRACT THE 
INSIGHTS, TRYING TO EXTRACT THE 
INSIGHTS THROUGH THE ANALYTICS DASHBOARD 
INSIGHTS THROUGH THE ANALYTICS DASHBOARD 
TO HELP YOU IMPROVE AND EVALUATE 
TO HELP YOU IMPROVE AND EVALUATE 
MY NAME, THAT'S THE PLAYER ID, AND 
WE DISPLAY ALSO IN THE PLAYER SCORE 
DOCUMENT, THE PLAYER'S CURRENT TOTAL 
SCORES. THE IDEA IS WE'LL HAVE SOMEWHERE 
ON THE SCREEN FOR OUR VIDEO GAME 
A CURRENT UP TO DATE TOTAL OF THE 
PLAYER'S SCORE, AND THAT READ IS 
JUST GOING TO BE GOING TO THIS DOCUMENT 
AND DISPLAYING WHAT'S HERE. WE'LL 
ALSO HAVE A LEADERBOARD DOCUMENT. 
WE'LL HAVE ONE LEADERBOARD DOCUMENT 
THAT DISPLAYS THE TOP TEN PLAYERS 
RANKED IN TERMS OF SCORE. BASICALLY, 
IT HAS AN ID THAT'S LEADERBOARD. 
IF WE WANT TO LOOK UP THE LEADERBOARD, IT'S VERY 
SIMPLE. JUST SEARCH FOR IT BASED 
ON ITS ID, VERY PERFORMANT, VERY 
FAST. AND WITHIN A PLAYER'S RANKED 
ARRAY, WE HAVE BASICALLY THE TOP 
TEN PLAYERS AND THEIR SCORES. MAKE 
SENSE? SO THAT'S ESSENTIALLY THE 
DESIGN. I KNOW WE'VE BEEN SHOWING 
SLIDES FOR A WHILE. LET'S JUMP TO 
A DEMO AND SEE HOW EASY IT IS TO 
BUILD THIS USING THE CHANGE FEED 
EMAIL? AS YOU CAN IMAGINE, IF YOU'RE 
A CUSTOMER, YOU MIGHT FORGET YOUR 
USER NAME, AND WE NEED TO SUPPORT 
THE SCENARIO WHERE YOU ALSO LOGIN 
WITH YOUR EMAIL. IN THIS CASE, WHAT 
DO WE DO? I WAS NOT EXPECTING SOMEONE 
TO RAISE THEIR HAND. AWESOME. AWESOME. 
>> [NO MICROPHONE] >> THAT ANSWER 
WAS TO CREATE A PARTITION THAT CONCANTENATES 
USER NAME AND EMAIL. YOU CAN CREATE 
PARTITION KEYS THAT ARE NOT NECESSARILY 
A FIELD IN YOUR DOCUMENT. WHAT HE 
WAS SUGGESTING WAS USING A KIND 
OF SYNTHETIC PARTITION, WHERE IT 
CONCANTENATED TWO FIELDS. BASICALLY 
WE WANT SOMEBODY WHO JUST TYPES 
IN THEIR USER NAME. WHEN THEY TYPE 
IN THEIR USER NAME, WE WOULDN'T 
NECESSARILY KNOW THEIR EMAIL. LOOKING 
IN REACT AND -- SORRY, REACT IS 
THE ONE I KNOW. HOW TO USE, RENDER 
PROPS AND HIGHER ORDER COMPONENTS. 
THAT WAS ALSO ONE OF THE MAIN FEEDBACK 
THAT WE GOT FROM OUR COMMUNITY IS 
GIVE US MORE EXAMPLES SINCE WE HAVE 
SO MANY . NET DEVS THAT, YOU KNOW, 
THEY WEREN'T REALLY SURE WHAT TO 
DO WITH THIS NEW THING AND THEY 
WANTED TO SEE MORE EXAMPLES OF HOW 
TO WORK WITH THIS. SO THE OTHER 
THING THAT THE COMMUNITY TOLD US 
ABOUT WAS THAT THEY WANTED US TO 
REFACTOR TWO TYPE SCRIPT, SO THAT'S 
ANOTHER BIG TAKE AWAY FROM THIS 
PHASE IN THE PROJECT. I REALLY LIKE 
THIS QUOTE. I THINK IT REALLY CAPTURES 
THE SPIRIT OF FRONT END DEVS. SO 
BEING ABLE TO -- RUN EPM INSTALL 
AND RUN A WATCHER BROWSER SNEAKER 
TASK AND GET RIGHT TO WORK, THAT'S 
YOUR MODEL. AND THIS ANALYSIS, NOT 
YOUR MODEL. AND THIS ANALYSIS, NOT 
ONLY GIVES YOU A RUN THROUGH THE 
ONLY GIVES YOU A RUN THROUGH THE 
MODEL, GIVES YOU ACTIONABLE RECOMMENDATIONS. 
MODEL, GIVES YOU ACTIONABLE RECOMMENDATIONS. 
I'LL SHOW YOU THE DASHBOARD. SO THIS 
I'LL SHOW YOU THE DASHBOARD. SO THIS 
IS THE MODEL THAT WE HAVE BUILT 
IS THE MODEL THAT WE HAVE BUILT 
FOR LA LIGA, FOR THE PURPOSE OF 
FOR LA LIGA, FOR THE PURPOSE OF 
BUILD. AND YOU HAVE A BIG SNAPSHOT 
BUILD. AND YOU HAVE A BIG SNAPSHOT 
OF HOW THIS MODEL IS PERFORMING. 
OF HOW THIS MODEL IS PERFORMING. 
OVERALL ON THE FRANING DATA I'M 
OVERALL ON THE FRANING DATA I'M 
GETTING OVER 95, REASONABLE, BUT 
GETTING OVER 95, REASONABLE, BUT 
THIS A TRAINING DATE A YOU SHOULD 
THIS A TRAINING DATE A YOU SHOULD 
BE DOING MUCH BETTER. WE NEED WAYS 
BE DOING MUCH BETTER. WE NEED WAYS 
OF IMPROVING IT. HIGHLIGHT THE MAJOR 
OF IMPROVING IT. HIGHLIGHT THE MAJOR 
ISSUES OF HOW I MODELED THIS, DATA 
ISSUES OF HOW I MODELED THIS, DATA 
IMBALANCE, INCORRECT PREDICTIONS, 
IMBALANCE, INCORRECT PREDICTIONS, 
AND UNCLARITY IN THE PREDICTIONS. 
AND UNCLARITY IN THE PREDICTIONS. 
IT ALSO GIVES YOU STATISTICS AND 
IT ALSO GIVES YOU STATISTICS AND 
THE ABILITY TO COMPARE WITH YOUR 
THE ABILITY TO COMPARE WITH YOUR 
PREVIOUS MODEL. QUICKLY CAN YOU 
PREVIOUS MODEL. QUICKLY CAN YOU 
LOOK AT THE DISTRIBUTION OF THE 
LOOK AT THE DISTRIBUTION OF THE 
DIFFERENT INTENTS AND CAN YOU IMMEDIATELY 
DIFFERENT INTENTS AND CAN YOU IMMEDIATELY 
IDENTIFY THAT THERE IS ONE THAT 
IDENTIFY THAT THERE IS ONE THAT 
SORT OF STANDS OUT, THAT IS WHERE 
SORT OF STANDS OUT, THAT IS WHERE 
I SHOULD FOCUS AND MAYBE THAT'S 
I SHOULD FOCUS AND MAYBE THAT'S 
THE MOST EFFICIENT WAY OF IMPROVING 
THE MOST EFFICIENT WAY OF IMPROVING 
THE MODEL. HIGHLIGHTED THAT THERE'S 
THE MODEL. HIGHLIGHTED THAT THERE'S 
PROCESSOR LIBRARY. NOW, I BUILT 
THIS USING THE CHANGE FEED PROCESSOR 
LIBRARY. IN REALITY, IT PROBABLY 
WOULD HAVE BEEN A LOT EASIER TO 
BUILD THIS WITH FUNCTIONS. HOWEVER, 
I'M SHOWING YOU THIS FOR MORE DEMONSTRATION 
PURPOSES, AND I WANT TO SHOW HOW 
EASY IT IS TO IMPLEMENT THE PROCESS 
CHANGES METHOD AND BASICALLY SUBSCRIBE 
TO THE CHANGE FEED. THIS USE CASE 
REALLY COULD HAVE ALSO BEEN BUILT 
WITH FUNCTIONS AS WELL. SO I'M GOING 
TO EXIT MY SLIDE DECK. THE FIRST 
THING I'M GOING TO DO IS COME TO 
VS CODE AND RUN A LITTLE PROGRAM 
THAT I WROTE TO GENERATE SAMPLE 
PINBALL DATA. IT'S BASICALLY GENERATING 
THOSE EVENT DOCUMENTS THAT I TALKED 
ABOUT EARLIER. IT'S GENERATING BASICALLY 
A PLAYER ID AND A SCORE. AND THESE 
ARE BEING WRITTEN TO AZURE COSMOS 
DB. THE NEXT THING I'LL DO IS I'M 
GOING TO COME TO MY CHANGE FEED 
UP THE USER NAME AND DETERMINING 
THE EMAIL WOULD BE IS ITS OWN QUERY. 
THAT'S ONE POSSIBLE APPROACH. WE'LL 
SEE IF WE CAN COME UP WITH SOMETHING 
A LITTLE MORE PERFORMANT THAN THAT. 
ALSO STOP BY AFTERWARDS FOR SOCKS. 
I DON'T TRUST MY AIM. WE WANT TO 
SUPPORT THESE TWO TYPES OF QUERIES. 
SELECT STAR FROM THREE WHERE USER 
NAME IS EQUAL TO TOM 124516. WE 
ALSO WANT TO SUPPORT THE QUERY WHERE 
IT'S EQUAL TO SOME VALUE. WE WANT 
EACH OF THESE QUERIES TO BE EQUALLY 
AS PERFORMANT. IF WE WANT TO OPTIMIZE 
FOR BOTH OF THESE FILTERS, WHAT 
DO WE DO? WE CAN'T PARTITION ON 
TWO VALUES. WE CAN'T CHEAT THE LAWS 
OF PHYSICS. OUR DATA CAN ONLY BE 
STORED ONE WAY. THERE'S NO WAY AROUND 
THIS. THIS IS NOT POSSIBLE. SO IF 
WE PICK ONE OF THESE TWO VALUES, 
IF WE JUST KIND OF ARBITRARILY SAY 
WE WANT TO OPTIMIZE FOR USER NAME, 
WHAT WILL BASICALLY HAPPEN IS CUSTOMERS, 
WHEN THEY LOGIN WITH THEIR USER 
NAME, THEY'RE GOING TO HAVE REALLY 
PAST PERFORMANCE. WHEN CUSTOMERS 
MY JAM, THAT FEELS LOOK A MODERN 
WELL-DONE FRONT END DEVELOPER WORKFLOW. 
FRONT END DEVS LOVE AUTOMATION. 
DURING TECH PREVIEW, WE ADDED A 
CLI, A COMMAND LINE INTERFACE, AND 
YOU CAN USE IT TO CREATE NEW APPS, 
TO ADD COMPONENTS, TO START YOUR 
DISCONNECTED DEVELOPMENT TO DEPLOY 
APPS AND DO THE IMPORT. AND JUST 
A QUICK DEMO HERE, OF WHAT IT'S 
LIKE TO CREATE A NEW APP THAT USES 
JSS, IT'S THREE COMMANDS, ONCE YOU 
HAVE THE CLI INSTALLED. JSS CREATE, 
THEN YOUR APP NAME AND THEN THE 
FRAMEWORK OF YOUR CHOICE. SO THE 
FRAMEWORK OF YOUR CHOICE, I USED 
REACT HERE, WHAT THAT DOES IS PULL 
FROM ONE OR SAMPLE APPS AND USES 
THAT AS YOUR STARTER. YOU CAN ALSO 
BUILD YOUR OWN STARTERS, SO INSTEAD 
OF SAYING REACT THERE, YOU CAN SAY 
ISSUES IN THE FIRST ONE THERE. AND 
ISSUES IN THE FIRST ONE THERE. AND 
IF I INVEST MORE IN THERE I WILL 
IF I INVEST MORE IN THERE I WILL 
PROBABLY GET A BETTER MOD EM. ALSO 
PROBABLY GET A BETTER MOD EM. ALSO 
ALLOWED YOU TO DIG DEEP NEAR THE 
ALLOWED YOU TO DIG DEEP NEAR THE 
SPECIFIC INTENTS HAH WE HAVE. LOOKS 
SPECIFIC INTENTS HAH WE HAVE. LOOKS 
AT THEM, SEES THEIR PERFORMANCE 
AT THEM, SEES THEIR PERFORMANCE 
ACROSS THEM, AND GIVES YOU A LIST 
ACROSS THEM, AND GIVES YOU A LIST 
OF POSSIBLE ACTIONABLE RECOMMENDATIONS 
OF POSSIBLE ACTIONABLE RECOMMENDATIONS 
MERGING DIFFERENT INTENTS TOGETHER, 
MERGING DIFFERENT INTENTS TOGETHER, 
INCLUDING SPLITTING INTENTS, THEY 
INCLUDING SPLITTING INTENTS, THEY 
SEEM TO BE TRYING TO DO TOO MUCH. 
SEEM TO BE TRYING TO DO TOO MUCH. 
TOOKING TO WHERE YOU CAN INTRODUCE PATTERNS. 
TOOKING TO WHERE YOU CAN INTRODUCE PATTERNS. 
WHERE YOU CAN INTRODUCE DIFFERENT 
WHERE YOU CAN INTRODUCE DIFFERENT 
COMPONENTS IN YOUR MODELLING TO 
COMPONENTS IN YOUR MODELLING TO 
HELP YOU. AND YOU CAN IMMEDIATELY 
HELP YOU. AND YOU CAN IMMEDIATELY 
JUMP IN TO ONE OF THESE AND LOOK 
JUMP IN TO ONE OF THESE AND LOOK 
AT WHERE THE PROBLEM IS. IDENTIFY 
AT WHERE THE PROBLEM IS. IDENTIFY 
SORT OF WHERE PAIN POINTS CAN BE 
SORT OF WHERE PAIN POINTS CAN BE 
AND TRY TO SORT OF DO RELABELING, 
AND TRY TO SORT OF DO RELABELING, 
REASSIGNMENT OF THESE UTTERANCES 
REASSIGNMENT OF THESE UTTERANCES 
TO DIFFERENT INTENTS. AND HENCE 
TO DIFFERENT INTENTS. AND HENCE 
SORT OF GAIN MORE EFFICIENTLY AN 
SORT OF GAIN MORE EFFICIENTLY AN 
IMPROVEMENT IN YOUR MODEL. THIS 
IMPROVEMENT IN YOUR MODEL. THIS 
DASHBOARD CURRENTLY FOCUSES ON INTENTS. 
DASHBOARD CURRENTLY FOCUSES ON INTENTS. 
OBSERVER THAT I'VE IMPLEMENTED. 
I'M GOING TO COME TO MY CHANGE FEED 
OBSERVER THAT I'VE IMPLEMENTED AND 
COME TO PROCESS CHANGES ASYNC. THE 
IDEA WITH AN AZURE FUNCTION, YOU 
REMEMBER HOW I MENTIONED EARLIER 
THAT ALL THE LOGIC, ALL THE BUSINESS 
LOGIC WENT IN YOUR AZURE FUNCTION. 
WHEN YOU USE THE CHANGE FEED PROCESSOR 
LIBRARY, IT'S THE SAME IDEA. ALL 
YOUR LOGIC IS GOING TO GO HERE. 
BASICALLY, ALL I DO IS I WRITE THAT 
I'M PROCESSING NEW SCORING EVENTS, 
AND THEN I JUST UPDATE THE LEADERBOARD. 
ALL OF THIS IS VERY SIMPLE. YOU 
DON'T REALLY NEED TO UNDERSTAND 
THE CHANGE FEED IN DEPTH TO DO SOMETHING 
LIKE THIS. IT'S ALL SIMPLE, AND 
YOU CAN REALLY FOCUS ON YOUR BUSINESS 
LOGIC AND NOT WORRY ABOUT UNDERSTANDING 
THE DETAILS OF THE CHANGE FEED. 
SO I'VE HAD A LOT OF EVENTS, PINBALL 
SCORES BEING KIND OF UPDATED DURING 
THE TIME THAT I'M TALKING. SO I'M 
GOING TO RUN THIS NOW. AS YOU CAN 
LOGIN WITH THEIR EMAIL, WE'RE GOING 
TO HAVE TO GO AND CHECK EVERY SINGLE 
PARTITION, WHEN WE DO A QUERY, THAT 
FOCUSES ON THEIR EMAIL. YOU CAN 
PARALYZE THE CHECKING OF EACH PARTITION, 
BUT REGARDLESS OF HOW WE OPTIMIZE 
THE LATENCY, IT'S STILL GOING TO 
CONSUME A TON OF RUs. I WOULD HONESTLY 
SAY 100 RUs IS A BIT OF A CONSERVATIVE 
ESTIMATE. IT WILL CONSUME ABOUT 
52, 000 RUs. IF WE'RE DOING AN EVEN 
SPLIT BETWEEN THE TWO QUERIES, WE 
COULD CONSUME 50, 000 RUs PER SECOND 
FOR A QUERY THAT NEEDS TO FAN OUT 
BETWEEN THE SOLUTIONS. THE SOLUTION 
INVOLVES AZURE FUNCTIONS AND IS 
INCREDIBLY SIMPLE TO IMPLEMENT. 
THE IDEA IS WE STORE THE DATA IN 
TWO SEPARATE COSMOS CONTAINERS. 
IN ONE PARTITION, WE FOCUS ON THE 
EMAIL. THE EMAIL QUERIES WHERE WE 
FOCUS ON EMAIL WILL BE VERY PERFORMANT 
PATH TO YOUR GITHUB OR A LOCAL FILE 
SYSTEM. SO THIS JUST MAKES IT VERY 
FLEXIBLE FOR CREATING NEW APPS. 
AND BASICALLY, THE FEEDBACK THAT 
WE GOT FROM PEOPLE IS IF YOU WANT 
TO BE A REAL FRAMEWORK, YOU HAVE 
TO HAVE A CLI. SO. WE LISTENED. 
SO WHEN YOU CREATE A NEW APP, THERE'S 
OUR STYLE GUIDE. WE PUT THAT IN 
THE STARTER. AND IT SHOWS YOU ALL 
OF THE DIFFERENT FIELDS, ALL OF 
THE DIFFERENT HELPERS THAT IT HAS. 
THIS WAS SOMETHING THAT THE COMMUNITY 
ASKED FOR. SO IN ADDITION TO HAVING 
A SITE WITH DOCUMENTATION, THEY 
ASKED FOR ACTUAL CODE EXAMPLES OF 
HOW TO DO STUFF RIGHT THERE ON YOUR 
STARTER THAT THEY CAN COPY AND PASTE 
FROM. WE USED YARDS TO IMPLEMENT 
OUR CLI. IT HAS SOME REALLY ADVANCED 
FEATURES, SO IF YOU LOOK IN THE 
WE INTEND TO SORT OF EXTEND POST-BUILD 
WE INTEND TO SORT OF EXTEND POST-BUILD 
ON TESTING PLATFORM IN GENERAL FOR 
ON TESTING PLATFORM IN GENERAL FOR 
LANGUAGE UNDERSTANDING MODELLING 
LANGUAGE UNDERSTANDING MODELLING 
INCLUDING USING THE BATCH TESTING 
INCLUDING USING THE BATCH TESTING 
WITH THIS, AND EXPANDING THIS TO 
WITH THIS, AND EXPANDING THIS TO 
ENTITIES. AS YOU SORT OF USE THIS 
ENTITIES. AS YOU SORT OF USE THIS 
YOU WILL SEE IT DEVELOP INTO BEING 
YOU WILL SEE IT DEVELOP INTO BEING 
A MUCH MORE INCLUSIVE TOOL FOR ALL 
A MUCH MORE INCLUSIVE TOOL FOR ALL 
OF THE COMPONENTS WITHIN LUIS. ONCE 
OF THE COMPONENTS WITHIN LUIS. ONCE 
WE'RE HAPPY WITH THE MODEL, THEN 
WE'RE HAPPY WITH THE MODEL, THEN 
WE GO PUBLISH IT, TO THE SHARED 
WE GO PUBLISH IT, TO THE SHARED 
RUN TIME OR THE CONTAINERIZED DEPLOYMENT. 
RUN TIME OR THE CONTAINERIZED DEPLOYMENT. 
AND YOU CONNECT IT, YOU CONNECT 
AND YOU CONNECT IT, YOU CONNECT 
THE DOTS USING BOT FRAME WORK. THAT 
THE DOTS USING BOT FRAME WORK. THAT 
CONNECTS IT WITH THE DIFFERENT CHANCE, 
CONNECTS IT WITH THE DIFFERENT CHANCE, 
CONNECTS IT WITH THE OVERALL BOT 
CONNECTS IT WITH THE OVERALL BOT 
LOGIC THAT IS PRESENT. AND TO PUT 
LOGIC THAT IS PRESENT. AND TO PUT 
THE ICING ON THE CAKE, BEFORE THAT, 
THE ICING ON THE CAKE, BEFORE THAT, 
SORRY, ONCE YOU DEPLOY IT THEN WE 
SORRY, ONCE YOU DEPLOY IT THEN WE 
HAVE THE NEW API. THE NEW API, THEY 
HAVE THE NEW API. THE NEW API, THEY 
COME WITH ENHANCED FEATURES, LISTEN 
COME WITH ENHANCED FEATURES, LISTEN 
TO THE FEEDBACK THAT CAME FROM DEVELOPERS, 
TO THE FEEDBACK THAT CAME FROM DEVELOPERS, 
OUR WAY, AND WE HAVE MADE SORT OF 
OUR WAY, AND WE HAVE MADE SORT OF 
OUR BEST EFFORT TO IMPROVE THEM 
OUR BEST EFFORT TO IMPROVE THEM 
SEE, IT'S STARTED AND PROCESSING 
DIFFERENT SCORE UPDATES. IF I COME 
TO THE AZURE PORTAL AND I COME TO 
MY PINBALL LEADERBOARD COLLECTION, 
MY LEADERBOARD CONTAINER, IF I COME 
TO DOCUMENTS AND I SCROLL DOWN FOR 
-- SO THESE DOCUMENTS HERE WITH 
THE IDs ARE ALL LIKE SCORING DOCUMENTS 
ESSENTIALLY. SO IT HAS A PLAYER 
ID AND THE SCORE. THESE ARE ALL 
RANDOMIZED NAMES, BY THE WAY. I 
CAN COME DOWN AND FIND MY LEADERBOARD 
DOCUMENT. IT HAS THE ID LEADERBOARD, 
AND IT DISPLAYS THE TOP TEN PLAYERS 
ESSENTIALLY RANKED. THE IDEA IS 
IT DOESN'T TAKE MUCH TO UPDATE THE 
LEADERBOARD DOCUMENT IF YOU DO IT 
ON THE FLY OR EVERY COUPLE OF SECONDS, 
SO YOU'RE BASICALLY SORTING TEN 
PLAYERS OR NUMBER OF PLAYERS, SO 
THAT'S ALL HANDLED IN THE LOGIC 
I PUT IN THE CHANGE FEED PROCESSOR, 
AND IT'S ALL HERE, AND IT'S VERY 
SIMPLE FOR OUR VIDEO GAME TO DO 
AND WILL GO TO THAT CONTAINER. ANOTHER 
CONTAINER ESSENTIALLY STORES THE 
CUSTOMER DOCUMENTS BASED ON USER 
NAME. SO QUERIES WHERE CUSTOMERS 
LOGIN WITH THEIR USER NAME AND WE 
NEED TO FILTER BASED ON THAT ARE 
GOING TO BE ROUTED TO THAT CONTAINER 
WHERE WE PARTITION ON USER NAME. 
THE OBVIOUS QUESTION IS HOW DO WE 
MAKE SURE THESE TWO CONTAINERS REMAIN 
IN SYNC? WE ARE DUPLICATING THE 
DATA HERE. IT'S INCREDIBLY IMPORTANT 
THAT DATA WRITTEN TO OUR EMAIL COLLECTION 
ALSO SHOWS UP IN THE USER COLLECTION 
AS WELL. THE TRICK HERE IS TO USE 
THE CHANGE FEED AND HAVE AN AZURE 
FUNCTION SUBSCRIBE TO THE CHANGE 
FEED, SO ANY TIME THERE'S AN INSERT 
OR UPDATE IN OUR EMAIL CONTAINER, 
WE HAVE THE AZURE FUNCTION, SUBSCRIBE 
TO THE CHANGE FEED, GET THOSE DOCUMENTS, 
AND THEN WRITE THEM TO THE USER 
NAME COLLECTION. WITH THIS, IT'S 
VERY SIMPLE TO IMPLEMENT. IT'S FOUR 
LINES OF CODE. IT'S QUICK TO WRITE, 
AND YOU CAN VERY QUICKLY DEPLOY 
COMMAND MODULE PART OF THEIR DOCUMENTATION, 
THAT HANDLES A LOT OF IT. SO LET'S 
TALK ABOUT THE STARTER KITS A LITTLE 
BIT. SO WE HAVE STARTER KITS FOR 
EVERY FRAMEWORK. SO THEY PROVIDE 
AN I IMPLEMENTATION STARTING POINT 
AND ROUTING AND INTERNAL SAYINGS. 
SO THINGS THAT DEVS MOST COMMONLY 
WORK WITH. WE BASED THEM ON THE 
STARTER APPS IN THOSE FRAMEWORKS, 
SO CREATE REACT APP, UCLI, CLI, 
AND THE GOOD THING ABOUT THEM IS 
THAT NOT ONLY DO THEY MAKE LIFE 
EASIER FOR THE DEVS WHO USE THEM, 
BUT AS YOU SAW, WITH THE STYLE GUIDE, 
THEY ACT AS LIVING DOCUMENTATION 
FOR WHAT OUR LIBRARIES DO. SO THAT 
MEANS THAT WE, THE DEV TEAM, CAN 
TO MAKE ACCESSING DATE A OUT OF 
TO MAKE ACCESSING DATE A OUT OF 
THE LANGUAGE UNDERSTANDING MUCH 
THE LANGUAGE UNDERSTANDING MUCH 
FAST EMP. I WILL -- FASTER. I WILL 
FAST EMP. I WILL -- FASTER. I WILL 
HIGH LIGHT THE FEATURES, MUCH MORE, 
HIGH LIGHT THE FEATURES, MUCH MORE, 
TOTALLY GO AND CHECK THESE APIs. 
TOTALLY GO AND CHECK THESE APIs. 
PREVIOUSLY IN ORDER TO, YOU PUBLISH 
PREVIOUSLY IN ORDER TO, YOU PUBLISH 
A MODEL AND YOU ONLY HAVE ONE VERSION 
A MODEL AND YOU ONLY HAVE ONE VERSION 
THAT YOU CAN ACCESS TO GET A DIFFERENT 
THAT YOU CAN ACCESS TO GET A DIFFERENT 
VERSION, YOU HAVE TO HAVE A DIFFERENT 
VERSION, YOU HAVE TO HAVE A DIFFERENT 
APPLICATION WHICH IS A MORE COMPLICATED 
APPLICATION WHICH IS A MORE COMPLICATED 
WAY OF MANAGING. YOUR LIFECYCLE 
WAY OF MANAGING. YOUR LIFECYCLE 
SORT OF IN DEVELOPING DIFFERENT 
SORT OF IN DEVELOPING DIFFERENT 
VERSIONS WITHIN YOUR OWN APPLICATION. 
VERSIONS WITHIN YOUR OWN APPLICATION. 
I'VE INTRODUCED VERSION ID DIRECTLY 
I'VE INTRODUCED VERSION ID DIRECTLY 
FROM THE URL,  PING DIFFERENT VERSIONS, 
FROM THE URL,  PING DIFFERENT VERSIONS, 
DON'T NEED TO BREAK THE PREVIOUS 
DON'T NEED TO BREAK THE PREVIOUS 
CODE. YOU CAN ACCESS THE DIFFERENT 
CODE. YOU CAN ACCESS THE DIFFERENT 
RESOURCES THAT YOU HAVE PRODUCED 
RESOURCES THAT YOU HAVE PRODUCED 
IN THE FINAL ADJACENT OBJECT MUCH 
IN THE FINAL ADJACENT OBJECT MUCH 
FASTER. SOME. HIGHLIGHTS OF THE 
FASTER. SOME. HIGHLIGHTS OF THE 
API, TOTALLY SORT OF HAVE A LOOK 
API, TOTALLY SORT OF HAVE A LOOK 
AT IT AND SEE A LOT HAVE INTERESTING 
AT IT AND SEE A LOT HAVE INTERESTING 
AND COOL STUFF THAT SIMPLIFIES THE 
AND COOL STUFF THAT SIMPLIFIES THE 
A QUICK LOOKUP AND OBTAIN THIS LEADERBOARD. 
IT'S ALSO, I GUESS, KIND OF GOOD 
TO POINT OUT ALL THESE DOCUMENTS 
WERE PUT IN ONE COSMOS CONTAINER. 
LEADERBOARD, TOTAL SCORES, IT'S 
ALL IN ONE CONTAINER, WHICH IS PRETTY 
COOL AS WELL. SO THAT'S HOW WE BUILT 
THE LEADERBOARD USING THE CHANGE 
FEED LIBRARY. ALSO COULD HAVE BEEN 
DONE WITH FUNK FUNCTIONS, BUT I 
WANTED TO SHOW THIS FOR MORE INSTRUCTIONAL 
PURPOSES. OUR FINAL USE CASE IS 
ONE WHERE WE'RE GOING TO GO MOST 
IN DEPTH, AND THAT'S REPLICATING 
FOR FINAL PARTITION KEYS. THOSE 
OF YOU FAMILIAR WITH COSMOS DB, 
WHO'S FAMILIAR WITH PARTITIONING 
AND HOW IT WORKS? THAT'S ABOUT HALF 
THE ROOM. COOL. SO BEFORE WE DIVE 
INTO THIS USE CASE, I'M GOING TO 
PRESENT KIND OF A CUSTOMER PROBLEM 
HERE, AND WE'RE GOING TO GO BACK 
TO THE RETAIL INDUSTRY. SO LET'S 
WITH AN AZURE FUNCTION. I WANT TO 
TALK ABOUT THAT IN A SECOND. FIRST 
I WANT TO TALK ABOUT HOW MANY RUs 
THIS WOULD CONSUME. DO YOU HAVE 
TO PAY EXTRA FOR RUs FROM THE CHANGE 
FEED, AND YOU WILL BE DOING AN EXTRA 
WRITE TO THE EXTRA COSMOS CONTAINER. 
HOWEVER, EACH QUERY IS INCREDIBLY 
MORE PERFORMANT. INSTEAD OF CHECKING 
EACH PARTITION, THEY ONLY NEED TO 
CHECK ONE. INSTEAD OF USING 100 
RUs, EACH QUERY WILL ONLY USE 3. 
THIS DATA CAN BE KIND OF GENERALIZED, 
AND THERE'S A THOUSAND OTHER USE 
CASES I COULD BE TALKING ABOUT HERE 
THAT REAL WORLD CUSTOMERS HAVE USED. 
I'M NOT GOING TO GET INTO THOSE 
TODAY. I WANT TO HIGHLIGHT A BASIC 
ONE, BUT THERE'S A DATA MODELING 
SESSION LATER THIS WEEK YOU MIGHT 
WANT TO ATTEND IF YOU THOUGHT THIS 
EXAMPLE WAS USEFUL. NOW I'LL KIND 
OF SHOW YOU HOW WE WOULD IMPLEMENT 
THIS KIND OF SOLUTION, AND THE GOOD 
NEWS IS IT'S FOUR LINES OF CODE 
THAT CAN BE WRITTEN USING AN AZURE 
USE THEM FOR TESTING. SO WE ACTUALLY 
USE THEM IN OUR END TO END TESTING, 
WHICH I'LL SHOW IN A SECOND AS WELL. 
WHAT I WANT TO SAY IS BE CAREFUL 
NOT TO END -- NOT TO ADD TOO MUCH 
BULK TO YOUR STARTERS BECAUSE WHEN 
YOU'RE SUPPORTING MULTIPLE FRAMEWORKS, 
NOT ONLY DO YOU HAVE TO STAY ON 
TOP OF ALL OF THE CHANGES HAPPENING 
IN THE ACTUAL FRONT END FRAMEWORKS 
BUT YOU ALSO HAVE TO STAY ON TOP 
OF ALL OF THE CHANGES HAPPENING 
IN THE STARTER KITS THAT YOU'RE 
EXTENDING, WHEN THESE STARTUP KITS 
GET UPGRADED, THE MIGRATION PATHS 
AREN'T ALWAYS PUBLISHED RIGHT AWAY 
SO THAT ADDS SOME OVERHEAD. FOR 
EXAMPLE, OUR STARTERS HAVE A DEPENDANCY 
ON A POLLO, EXAMPLES OF HOW TO USE 
GRAPH -- AND APOLLO IS A DEPEND 
SI THAT COMES WITH A LOT OF OVERHEAD, 
TO IMPROVE PERFORMANCE, SO WE HAVE 
PROCESS OF CONSUMING THE OUTPUT. 
PROCESS OF CONSUMING THE OUTPUT. 
OF LUIS. ALL OF THESE ARE PUBLIC 
OF LUIS. ALL OF THESE ARE PUBLIC 
PREVIEW, WE SHOULD BE HOPING TO 
PREVIEW, WE SHOULD BE HOPING TO 
G. A. THEM PRETTY QUICKLY AND THEY'RE 
G. A. THEM PRETTY QUICKLY AND THEY'RE 
MORE KOL LID THAN PROBABLY BEFORE 
MORE KOL LID THAN PROBABLY BEFORE 
IGNITE. FINALLY, TO THE WHOLE LIFECYCLE, 
IGNITE. FINALLY, TO THE WHOLE LIFECYCLE, 
AT THE END OF THE SPECTRUM, WHICH 
AT THE END OF THE SPECTRUM, WHICH 
PUTS THE ICING ON THE QUAKE AND 
PUTS THE ICING ON THE QUAKE AND 
HELPS DEVELOPERS WHO HAVE BOOT STRAPPED 
HELPS DEVELOPERS WHO HAVE BOOT STRAPPED 
IT USING THEIR END POINT HITS, TO 
IT USING THEIR END POINT HITS, TO 
THAT, WE HAVE ACTIVE LEARNING WHICH 
THAT, WE HAVE ACTIVE LEARNING WHICH 
HAS BEEN PART OF THE LANGUAGE UNDERSTANDING 
HAS BEEN PART OF THE LANGUAGE UNDERSTANDING 
SERVICE FROM THE GET GO. AND YOU 
SERVICE FROM THE GET GO. AND YOU 
HEAR, YOU LOCK AT THE UTTERANCES 
HEAR, YOU LOCK AT THE UTTERANCES 
THAT YOU HAVE COME. WE HAVE SELECTED 
THAT YOU HAVE COME. WE HAVE SELECTED 
THEM. YOU DON'T TO HAVE RUN THROUGH 
THEM. YOU DON'T TO HAVE RUN THROUGH 
ALL OF THEM. WE SELECT THE MOST 
ALL OF THEM. WE SELECT THE MOST 
EFFICIENT ONES THAT WILL HELP YOU 
EFFICIENT ONES THAT WILL HELP YOU 
PROGRESS YOUR MODEL THE BEST. PRESENT 
PROGRESS YOUR MODEL THE BEST. PRESENT 
THEM TO YOU IN ORDER TO BE ABLE 
THEM TO YOU IN ORDER TO BE ABLE 
IMAGINE THAT WE HAVE A RETAIL COMPANY 
THAT HAS CUSTOMER DATA KIND OF MODELED 
IN THIS STRUCTURE IN THE DOCUMENT 
THAT I'M SHOWING HERE. CURRENTLY 
WE'RE STORING ABOUT 10 TERABYTES 
OF DATA, AND EACH DOCUMENT IS ABOUT 
IS KILOBYTE. IN THE DOCUMENT, WE 
HAVE EACH CUSTOMER'S USER NAME, 
EMAIL, AGE, IF THEY'RE BUYING ITEMS 
WITH A PAYMENT PLAN OR SOMETHING 
LIKE THAT. WE WANT TO ESSENTIALLY 
BE ABLE TO DO 1, 000 WRITES PER 
SECOND AND DO 50, 000 QUERIES PER 
SECOND AS WELL. AS DATA SIZE GROWS, 
HOW CAN WE MAKE SURE THE PERFORMANCE 
OF OUR QUERIES STAY CONSTANT? IF 
YOU ALREADY KNOW A LITTLE BIT ABOUT 
AZURE COSMOS DB, YOU PROBABLY HAVE 
SOME IDEAS AS TO THE ANSWER FOR 
THIS QUESTION. IF YOU DON'T, THAT'S 
TOTALLY FINE. WE'RE GOING TO QUICKLY 
INTRODUCE THESE CONCEPTS RIGHT NOW. 
THE SHORT ANSWER TO THIS QUESTION 
IS A GOOD PARTITIONING STRATEGY 
WILL ENSURE THAT PERFORMANCE FOR 
FUNCTION. SO IF I COME BACK TO MY 
BROWSER, I CAN SEE HERE THAT I HAVE 
AN AZURE FUNCTION THAT'S ALREADY 
RUNNING. I WROTE THIS AZURE FUNCTION 
IN VISUAL STUDIO. HERE IT IS. THIS 
IS THE LOGIC HERE. BASICALLY, I 
KIND OF SHOWED YOU BEFORE IN THE 
BEGINNING OF THE SESSION HOW WE 
WROTE A VERY SIMPLE AZURE FUNCTION 
WITH SIMPLE BUSINESS LOGIC. THAT 
ONE JUST DISPLAYED THE IDEA OF DOCUMENTS. 
THIS FUNCTION ALSO DISPLAYS SOME 
-- HAS SOME SIMPLE BUSINESS LOGIC. 
HOWEVER, IN THIS CASE, IT'S SAVING 
YOU ALMOST 50, 000 RUs. ESSENTIALLY, 
WHAT WE'RE DOING IS THIS WILL BE 
TRIGGERED ANY TIME WE DO A DOCUMENT 
INSERT OR UPDATE THROUGH THE COLLECTION, 
AND WHAT WE'LL DO IS LOOP THROUGH 
ALL THE DOCUMENTS THAT ARE CHANGED 
AND JUST ADD THOSE TO THE USER NAME 
COLLECTION. THIS IS VERY SIMPLE 
LOGIC. IT'S FOUR LINES OF CODE TO 
IMPLEMENT, AND IT COULD POTENTIALLY 
MAKE YOUR APP A LOT MORE PERFORMANT 
AND SAVE YOU A TON OF MONEY AS WELL. 
I'LL KIND OF QUICKLY SHOW HOW THAT 
TO STAY UP TO SPEED AND TEST FOR 
BREAKING CHANGES. SO THIS IS THE 
TESTING THAT WE BUILT BASED ON OUR 
STARTERS. SO AND THIS IS KIND OF 
-- SO -- I HAVE TO FIND MY MOUSE 
AGAIN AND SHOW THIS. ALL RIGHT. 
JSS. OKAY. SO WE USED CYPRESS, WHICH 
IS AN ACTUAL OPEN SOURCE FRAMEWORK 
THAT Y'ALL CAN USE. AND SO CYPRESS 
-- WHAT DO WE DO? SINCE THE STYLE 
GUIDES HAVE PAID ALL OF THE FUNCTIONALITY 
THAT IS EXPECTED TO WORK IN JSS, 
SO WITH THE CYPRESS WE SPIN UP THE 
SAMPLE APPS AND WE GO OVER THE COMPONENTS 
TO RELABEL THEM, RETRAIN AND GET 
TO RELABEL THEM, RETRAIN AND GET 
THE CYCLE HAPPENING. TO SUMMARIZE 
THE CYCLE HAPPENING. TO SUMMARIZE 
THIS BUILD, ANEWSMENTS, IN QnAMaker, 
THIS BUILD, ANEWSMENTS, IN QnAMaker, 
MULTI TURN CONVERSATION THAT ENABLES 
MULTI TURN CONVERSATION THAT ENABLES 
TO YOU CREATE FROM KNOWLEDGE. AND 
TO YOU CREATE FROM KNOWLEDGE. AND 
INFORMATION THAT IS PRESENT OUT 
INFORMATION THAT IS PRESENT OUT 
THERE. A LOT OF MULTI TURN EXPERIENCE 
THERE. A LOT OF MULTI TURN EXPERIENCE 
AND ACTIVE LEARNING SUBJECTION TO 
AND ACTIVE LEARNING SUBJECTION TO 
IMPROVE THE KNOWLEDGE BASE. THE 
IMPROVE THE KNOWLEDGE BASE. THE 
EXTRACTIONS THAT HELP YOU PROCESS 
EXTRACTIONS THAT HELP YOU PROCESS 
THE UTTERANCE, AND INSIGHTS THAT 
THE UTTERANCE, AND INSIGHTS THAT 
HELP YOU THROUGH THE ANALYTICS DASHBOARD, 
HELP YOU THROUGH THE ANALYTICS DASHBOARD, 
BETTER UNDERSTAND HOW TO ADVANCE 
BETTER UNDERSTAND HOW TO ADVANCE 
IT. WITHIN THE BOT FRAME WORK, WHERE 
IT. WITHIN THE BOT FRAME WORK, WHERE 
CONVERSATION EXISTS. THE TOOL THAT 
CONVERSATION EXISTS. THE TOOL THAT 
BINDS EVERYTHING TOGETHER, INCLUDING 
BINDS EVERYTHING TOGETHER, INCLUDING 
THE ADAPTIVE DIE LOGS, THE LANGUAGE 
THE ADAPTIVE DIE LOGS, THE LANGUAGE 
GENERATION, THE DEMONSTRATION THAT 
GENERATION, THE DEMONSTRATION THAT 
WE WENT THROUGH EARLIER, SORT OF 
WE WENT THROUGH EARLIER, SORT OF 
USE IT TO CREATE THIS INTERACTIVE 
USE IT TO CREATE THIS INTERACTIVE 
YOUR MOST FREQUENTLY EXECUTED QUERIES 
REMAIN CONSTANT REGARDLESS OF HOW 
LARGE DATA SIZE GROWS. THE IDEA 
HERE IS THAT EACH QUERY, FOR YOUR 
TOP QUERIES WILL CONSUME THE SAME 
NUMBER OF RUs AND TAKE THE SAME 
AMOUNT OF TIME, REGARDLESS OF WHETHER 
YOU'RE STORING 10 TERABYTES OF DATA 
OR STORING 1 PETABYTE OF DATA. IT'S 
GOOD TO HAVE A PARTITIONING STRATEGY. 
I'LL TALK ABOUT THAT FIRST, AND 
THEN I'LL TALK ABOUT THIS USE CASE 
SPECIFICALLY. AGAIN, I MENTIONED 
THIS EARLIER, AND EVERYBODY PROBABLY 
KNOWS THIS ALREADY, BUT AZURE COSMOS 
DB MEASURES BASICALLY REQUESTS WITH 
REQUEST UNITS, SO REQUEST UNITS 
ARE THE METRIC FOR THROUGHPUT. WE 
CAN DEFINE OUR SYSTEM, IN THIS CASE, 
AS MORE PERFORMANT. IF WE NEED TO 
CONSUME FEWER REQUEST UNITS FOR 
OUR MOST COMMON OPERATIONS. IN THIS 
CASE, REQUEST UNITS IS AN ABSTRACTION 
FOR DIFFERENT COMPUTING RESOURCES, 
AND WE WANT TO MAKE SURE THAT OUR 
SYSTEM CONSUMES AS FEW REQUEST UNITS 
WOULD WORK JUST TO PROVE TO YOU 
HOW EASY IT IS. THE IDEA IS WE WOULD 
COME TO OUR EMAIL COLLECTION IF, 
LET'S SAY, LUCAS WERE TO PAY OFF 
HIS BALANCE, SO THE BALANCE WOULD 
GO FROM 5, 000 TO 0. WE'LL UPDATE 
THAT THERE, AND WE'LL COPY AND PASTE 
LUCAS' USER NAME. WE'LL COME TO 
THIS USER NAME CONTAINER AND RUN 
A QUERY. THIS CHANGE IS SEAMLESSLY 
REPLICATED TO A CONTAINER AS WELL, 
AND IN THIS CASE, THE BALANCE IS 
ZERO DOLLARS AS WELL. IT'S VERY 
EASY TO IMPLEMENT. YOU HAVE A LOT 
OF CONTROL OVER MONITORING THIS, 
WHICH I WON'T GET INTO IN THIS SESSION, 
THAT WE EXPECT TO BE ON PAGES TO 
BE THERE AND WORKING. SO IT'S SMOKE 
TESTING FOR ALL OF THE FEATURES. 
BUT IT HITS ALL OF THE SAMPLE APPS 
SO IT'S SMOKE TESTING FOR ALL OF 
THE FEATURES IN EVERY FRAMEWORK. 
NOW, AT FIRST, EVERY TIME THAT WE 
WERE WRITING A FEATURE, WE WERE 
RUNNING THIS MANUALLY ON, YOU KNOW, 
ON THE DIFFERENT FRAME WORKS, BUT 
ALSO YOU HAVE TO TEST THE FRAMEWORK 
IN DISCONNECTED MODE AND CONNECTED 
MODE AND YOU KNOW, IT'S -- IT ENDED 
UP BEING THIS BIG MATRIX OF THINGS 
THAT WE HAD TO TEST. SO WHAT WE 
DID IS WE ENDED UP WRITING WHAT 
WE CALL SMOKY, WHICH IS JUST A SET 
OF CUSTOM POWERSHELL SCRIPTS THAT 
HAS AUTOMATED SMOKE TESTING. SO 
IT TESTS THE WHOLE JSS INFRASTRUCTURE, 
AND THIS CAN BE CALLED WHEN A POLL 
EXPERIENCE. TYPE YOUR OWN DEM PLATS. 
EXPERIENCE. TYPE YOUR OWN DEM PLATS. 
YOU ALSO USE ADAPTIVE CARDS TO CREATE 
YOU ALSO USE ADAPTIVE CARDS TO CREATE 
A MORE ENGAGING CONVERSATION WITH 
A MORE ENGAGING CONVERSATION WITH 
YOUR USERS. THERE'S THE NEW SKILLS 
YOUR USERS. THERE'S THE NEW SKILLS 
PRESENTED IN PRETHROUGH, WE ARE 
PRESENTED IN PRETHROUGH, WE ARE 
ADVANCING THEM, BETTER INTEGRATION 
ADVANCING THEM, BETTER INTEGRATION 
WITH SPEECH AND CUSTOM WAKE WORDS 
WITH SPEECH AND CUSTOM WAKE WORDS 
THAT YOU SEE IN THE CAR, I THINK, 
THAT YOU SEE IN THE CAR, I THINK, 
MOST OF YOU SAW THE DEMO AND THE 
MOST OF YOU SAW THE DEMO AND THE 
INTEGRATION WITH SPEECH AND HEY 
INTEGRATION WITH SPEECH AND HEY 
JOE, THE BMW, GETS UP AND RUNNING. 
JOE, THE BMW, GETS UP AND RUNNING. 
THESE ARE THE COOL NEW STUFF IN 
THESE ARE THE COOL NEW STUFF IN 
THE BOT FRAME WORK SDK, DOWNLOAD 
THE BOT FRAME WORK SDK, DOWNLOAD 
THE MOST RECENT BOT FRAME WORK AND 
THE MOST RECENT BOT FRAME WORK AND 
THE EMULATOR THAT HELPS YOU INTERACT 
THE EMULATOR THAT HELPS YOU INTERACT 
WITH YOUR CONVERSATION PRIOR TO 
WITH YOUR CONVERSATION PRIOR TO 
DEPLOYING IT. THERE IS A COUPLE 
DEPLOYING IT. THERE IS A COUPLE 
OF THINGS HAPPENING AROUND CONVERSATION 
OF THINGS HAPPENING AROUND CONVERSATION 
AS I STARTED OFF, EVERYTHING AND 
AS I STARTED OFF, EVERYTHING AND 
SORT OF WE'VE BEEN MENTIONING, EVERY 
SORT OF WE'VE BEEN MENTIONING, EVERY 
KEYNOTE, EVERY SESSION HAS SUCHED 
KEYNOTE, EVERY SESSION HAS SUCHED 
AS POSSIBLE. WE CAN DO THIS WITH 
A GOOD PARTITIONING STRATEGY. THE 
IDEA IS WITH PARTITIONING, AS DATA 
SIZE GROWS, WE DISTRIBUTE OUR DATA 
ACROSS MULTIPLE, SMALL MACHINES 
THAT ESSENTIALLY WORK IN A TEAM. 
WITH PARTITIONING, EACH MACHINE 
IS RESPONSIBLE FOR ONLY SERVING 
A SUBSET OF THE DATA. SO THE IDEA 
IS, IF EACH MACHINE ONLY SERVES 
A SUBSET OF THE DATA AND OUR QUERY 
FILTERS ON, LET'S SAY, A CERTAIN 
FIELD, IS IT POSSIBLE WE COULD ROUTE 
IT TO ONLY THE RELEVANT PARTITIONS? 
SO IF WE FILTER ON OUR PARTITION 
KEY, CAN WE MAKE SURE THAT THAT 
QUERY ONLY NEEDS TO CHECK A CERTAIN 
AMOUNT OF DATA REGARDLESS OF HOW 
BIG OUR TOTAL DATA SET GROWS? IN 
COSMOS DB, ESSENTIALLY WHAT WE DO 
IS STORE YOUR DIFFERENT PARTITION 
KEYS ON DIFFERENT PHYSICAL PARTITIONS. 
AS A DEVELOPER, YOU SPECIFY A PARTITION 
BUT THERE'S TONS OF DOCS IF YOU 
WOULD LIKE TO LEARN MORE. WE SOLVED 
A VERY COMPLEX BUSINESS PROBLEM 
WITH FOUR LINES OF CODE. COOL. SO 
THANK YOU FOR JOINING ME TODAY. 
JUST TO KIND OF RECAP, WE LEARNED 
ABOUT AZURE FUNCTIONS AND KIND OF 
LEVEL SET THERE. WE TALKED ABOUT 
THE CHANGE FEED, AND THEN WE DOVE 
VERY DEEPLY INTO COMMON USE CASES 
FOR USING THE CHANGE FEED IN AZURE 
FUNCTIONS. I KNOW HAPPY HOUR IS 
RIGHT AFTER THIS, AND I DON'T WANT 
TO COMPETE WITH THAT BECAUSE I KNOW 
I WILL LOSE. I'M GOING TO STAY UP 
HERE AND TAKE QUESTIONS. PLEASE 
COME UP AND ASK THEM. I'M HAPPY 
TO ANSWER AND GO DEEPER INTO ANY 
OF THESE USE CASES. I'LL ALSO BE 
AT THE COSMOS DB BOOTH TONIGHT AS 
WELL AS AFTER AROUND 3:30 TUESDAY 
AND WEDNESDAY. THESE ARE THE UPCOMING 
COSMOS DB SESSIONS. IF YOU LIKE 
THE DATA MODELING TOPIC THAT I TALKED 
ABOUT IN THE LAST EXAMPLE, I STRONGLY 
RECOMMEND THAT THIRD SESSION DOWN 
ON THE LIST . IF YOU WANT TO LEARN 
MORE ABOUT COSMOS DB GLOBAL DISTRIBUTION, 
I RECOMMEND THE SECOND SESSION ON 
REQUEST IS MERGED, AND SO THIS MADE 
LIFE REALLY EASY FOR US. SO IF I 
ON THIS, NIECE ARE SOME OF THE ONES 
ON THIS, NIECE ARE SOME OF THE ONES 
THAT WE HIGHLIGHTED. THERE IS 2:00 
THAT WE HIGHLIGHTED. THERE IS 2:00 
TOMORROW ABOUT SPEECH, LEARN THE 
TOMORROW ABOUT SPEECH, LEARN THE 
ADVANCEMENTS, WHICH ENABLES THINGS 
ADVANCEMENTS, WHICH ENABLES THINGS 
LIKE THE VIRTUAL ASSISTANT FOR LA 
LIKE THE VIRTUAL ASSISTANT FOR LA 
LIGA TO BE HAPPENING. THERE IS THE 
LIGA TO BE HAPPENING. THERE IS THE 
VIRTUAL ASSISTANT AND HOW TO COMPOSE 
VIRTUAL ASSISTANT AND HOW TO COMPOSE 
THAT SORT OF WITH MULTIPLE DEVICES, 
THAT SORT OF WITH MULTIPLE DEVICES, 
WITH VOICE AT 5:00. AND SORT OF 
WITH VOICE AT 5:00. AND SORT OF 
WITH THE BOT FRAME WORK. THERE'S 
WITH THE BOT FRAME WORK. THERE'S 
THE BMW CAR IN THE EXHIBIT, HOP 
THE BMW CAR IN THE EXHIBIT, HOP 
ON IT, AND TRY IT, SEE HOW IT WORKS. 
ON IT, AND TRY IT, SEE HOW IT WORKS. 
AND THERE IS A DEMONSTRATION ABOUT 
AND THERE IS A DEMONSTRATION ABOUT 
KEY FOR EACH COSMOS CONTAINER. IN 
THIS CASE, LET'S SAY WE'RE SPECIFYING 
USER NAME AS OUR PARTITION KEY. 
WE HAVE DIFFERENT USER NAMES, TIM 
17, ROHAN 75, MARK 72. WE HAVE DIFFERENT 
USER NAMES, AND EACH ONE IS GUARANTEED 
TO BE STORED TOGETHER, AND THEY'RE 
GUARANTEED TO BE STORED TOGETHER 
ON EACH PHYSICAL PARTITION. SO THE 
IDEA HERE IS, IF WE NEEDED TO QUERY 
BASED ON USER NAME AND WE WANTED 
TO DO A QUERY BASED ON WHERE WE 
FILTER USER NAME WHERE TIM IS EQUAL 
THE LIST. IF YOU WANT TO LEARN MORE 
ABOUT THE SPARK API, THE LAST SESSION 
ON THE LIST IS AWESOME. I STRONGLY 
RECOMMEND THESE SESSIONS. THEY'RE 
GOING TO BE GREAT AS WELL. IN ADDITION, 
HERE'S -- [APPLAUSE] THANK YOU. 
THANKS AGAIN. HERE'S ANOTHER SERVERLESS 
SESSION IF YOU LIKE THAT TOPIC. 
ALL OF THIS WILL BE POSTED ON GITHUB. 
