Share
Embed
Transcript
64 slides
-
Darrell Pra( 3 June 2014 BUILDING AN BUSINESS
INTELLIGENCE APPLICATION WITH EXTJS AND COUCHBASE WHERE ARE WE NOW -
Help our clients have the most complete understanding of
consumers worldwide -
tar y. NIELSEN ANSWERS ON DEMAND 6 Flexibility
• On-‐Demand, ad-‐hoc processing • Custom data definiVons Speed to Insights • Expedited reporVng • Roadmaps and guided analysis Integra5on • Internal and external data sources • Channel Consistency -
tar y. 8 OUR CLIENTS • Manufacturers -‐ Kra=, Procter
& Gamble, Hershey’s, Red Bull • Measure Product Success • Understand Consumer Behavior • Target new product opportuniVes • Product Pricing • Retailers -‐ Safeway, Tesco, Walmart • Understand consumer buying behavior • Store performance • Comparison to compeVtors • Product pricing -
tar y. 11 POINT OF SALE, PANEL AND LOYALTY •
Point of Sale • Weekly data daily • Disaggregated, anonymous • TB/week • Billions of records • Panel • Data from more than 250K households across 25 countries • Trip and Demographic data • Similar to Nielsen families from TV • Loyalty • Basket level loyalty card data from retailers • Daily data from thousands of stores -
XML and SQL are the way of the future.
-‐ Said no one ever -
tar y. 17 FEATURES • One applicaVon to interface n
warehouses • Advanced Business Intelligence • Infinite user capabiliVes • Reports render in less than 2 minutes • ApplicaVon load Vmes under 3 seconds -
tar y. 18 FEATURES • Full drag and drop of
reporVng objects • Objects know what they are and how to interact with others • “Where to Drop?” assistance • Full “undo” of acVons • LocalStorage in browser for cache backup • Responsive design for different client profiles -
tar y. APPLICATION VIEW 27 Report'Builder'UI <<ExtJS>> Progress'Queue' Manager Applica2on'Model
Report'Model Applica2on'Controller Naviga2on'Manager Model Layer Controller Layer View'(n) View Layer View'Controller De>.JS Data'Selec2on'Model -
tar y. DATA SIZE 28 • 5 large buckets, 10s
of smaller (might change this) • 4 -‐ 5 TB of data across both Couchbase and Elas5c per datacenter • 100s of thousands of user data records • Favorites, saved selec5ons, report specifica5ons • Millions of dimensional metadata items -
tar y. TECHNOLOGY STACK 29 • UI Built on Sencha
ExtJS 4.2 • Single page applicaVon • MVC framework • Middle Tier built on Spring MVC and Spring IOC • JSON REST endpoints through configuraVon • XML to JSON conversion with GSON where needed • Legacy SOA Tier in Tibco AMX 3.2 • Couchbase 2.5 -‐ Storage, Caching, and View based search (upgrading with our Summer release) • Elas5cSearch -‐ 0.9x for full text search • Hudson, Ar5factory, Gradle, Jasmine, JS Duck -
tar y. HARDWARE 30 • Couchbase Cluster • 8x
Dell R815, 132 GB RAM, 1.2TB PCIe SSD, 16 CPUs in 2 data centers • Web Cluster • 8x VMWare VM, 48 GB RAM, 4 Cores in 2 data centers • Tibco • 4x Dell R815, 132 GB RAM, NAS Storage, 16 CPUs in 2 data centers • Oracle RAC • 2 * 2 data centers • Composite Data Federa5on • 8x VMWare VM, 48 GB RAM, 4 cores in 2 data centers • IBM Pure Data (a.k.a. Netezza Twin Fins) • Many in 2 data centers -
tar y. TECHNOLOGY STACK 34 • Couchbase 2.5 •
Schema-‐less clustered JSON storage • Key/value cache based on memcached • Full text search integra5on with XDCR with Elas5c Search • JSON • Na5ve JSON encoding down the stack • No unnecessary transforma5ons • No tables • Incremental Map Reduce • Used for Analy5cs on our data • Creates views which are analogous to tables -
tar y. 55 { "locale": "en_US",
"requestInstance": { "categoryId": "NACNLSPI", "clientId": "9997", "coreData": { "friendlyUrl": "https://answers.nielsen.com/portal/site/answers/menuitem.b96e53097992bc115aac7970f75072a0/", "guid": "FFFB2C9F220141DD972F63C755197A42", "internalTitle": "QF01", "nativeName": "QF01", "runType": "HIDDEN", "title": "Nielsen Quick Facts" }, "dataSet": [ { "basePromptId": "Fact_QF", "hiddenPrompt": false, "logicalDimId": "FCT", "logicalId": "FCT", "maxSelections": 0, "minSelections": 1, "originalPromptId": "Fact_QF", "promptId": "Fact_QF", "promptLabel": "Facts", "promptName": "Facts", "selections": [ { "active": true, "id": "0", "items": [ { "addTotal": false, "appDesc": "Groups (Folders)", "baseUuid": "GRP|VIEW|Fact_QF|0", "children": [ { "addTotal": false, "appDesc": "Fact Groups", "baseUuid": "Groups|GROUP|Fact_QF|0", "children": [ { "addTotal": false, "appDesc": "Sales Volume", "baseUuid": "7836|GROUP_LEVEL|Fact_QF|0", "children": [ { "addTotal": false, "appDesc": "Dollars", "baseUuid": "7848|GROUP_LEVEL|Fact_QF|0", "children": [ { "addTotal": false, "appDesc": "$", "baseUuid": "7848|GROUP_LEVEL|Fact_QF|0|DOL", -
tar y. MAKE IT RESPONSIVE 57 • Asynchronous UI
• ProgressQueueManager class with Promises and Defered’s • Use Deo.js framework for IOC • Controllers extend base controllers • Incorporates access to PQM • Data fetches can be truly asynchronous • Repor5ng data gets BIG • Breaking up reports into objects • Asynchronously store chunked data into Couchbase • UI only request the chunk of data that is needed -
DARRELL PRATT ARCHITECT LEADER, GLOBAL BUY ! @darrellpra(
h(p://www.nielsen.com