Your SlideShare is downloading. ×
0
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Real time ecommerce analytics with MongoDB at Gilt Groupe (Michael Bryzek & Michael Nutt)

12,276

Published on

Published in: Technology
0 Comments
43 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
12,276
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
252
Comments
0
Likes
43
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Real Time Ecommerce Analytics at Gilt Groupe<br />Michael Bryzek, CTO & Founder<br />Michael Nutt, Senior Engineer<br />Mongo SF - April 30, 2010<br />We’re hiring: michael@gilt.com<br />www.gilt.com/invite/michael<br />
  • 2. What is Gilt Groupe?<br />The world’s best brands at up to 70% off<br />Sales start every day at noon<br />Simple, luxurious online experience<br />Relentless focus on the customer<br />. . . <br />A fast growing young company<br />
  • 3.
  • 4. What does noon look like in Tech?<br />
  • 5. What does noon look like?<br />
  • 6. MongoDB at Gilt Groupe<br />Real time analytics is a sweet spot for MongoDB<br />Two production examples we’ll share today at Gilt Groupe:<br />Selecting product to sell based on real time data<br />Hummingbird: Real time visualization of site traffic<br />
  • 7. Using MongoDB for Real Time Analytics<br />Goal: Improve conversion of our gifts section (www.gilt.com/gifts) by ensuring good products are being promoted at the right time<br />Challenge: High traffic makes it hard to collect and analyze data in a scalable and fast way<br />Approach:<br />Capture data in real time in MongoDB<br />Analyze w/ Map Reduce<br />Update txn systems<br />Repeat<br />
  • 8. Step 1: Data Capture<br /><ul><li>Java server speaks JSON/HTTP, writes to MongoDB
  • 9. Each page view receive a list of every item on the page and its position via AJAX
  • 10. Purchase data sent by background job post purchase</li></li></ul><li>Step 1: Data Capture<br />Storing Data in Java<br />_db = new Mongo().getDB("gifts");<br />_listing_visits = _db.getCollection("listing_visits");<br />--------------------------------------------------<br />BasicDBObject record = new BasicDBObject();<br />record.put("gift_product_look_guid", de.giftProductLookGuid);<br />record.put("product_look_guid", de.productLookGuid);<br />record.put("sale_id", info.saleId);<br />record.put("user_guid", info.userGuid);<br />record.put("subsite_id", info.subsiteId);<br />record.put("created_at", info.createdAt);<br />record.put("position", position);<br />_listing_visits.save(record);<br />
  • 11. Step 2: Map<br />Calculate a score for each item based on page views, conversion, inventory, and merchandising input<br />m = function(){<br /> [snip]<br /> if ( hourly.visits > 0 && this.quantity_sold > 0 ) {<br /> var rate = this.quantity_sold / hourly.visits;<br /> points = parseInt(100*rate);<br /> v += points;<br /> explanation += "Conversion rate of " + points + "% ”;<br /> } else if ( hourly.visits == null || hourly.visits == 0 ) {<br /> v += 500;<br /> explanation += "Product has never been seen (500 points). ";<br /> }<br /> [snip]<br /> emit( { gift_product_look_guid : this._id }, <br /> { score : v,<br /> explanation : explanation}});<br />}<br />
  • 12. Step 2: Reduce<br />Reduce is a passthrough<br />r = function( pid , values ){<br /> return values[0];<br />}<br />Map Reduce run every 15 minutes via CRON – results stored in a collection named “scores”<br />res = db.gift_product_looks.mapReduce( m , r , { out : "scores" } );<br />
  • 13. Step 3: Update Transactional Systems<br /><ul><li>Mongo + server run on ec2
  • 14. Send “scores” collection back to our primary data center, storing latest scores in our primary relational database
  • 15. Gift items are always sorted by score – transactional system only needed an “order by score desc” clause</li></li></ul><li>Questions before we move on to Hummingbird?<br />
  • 16. Tracking Pixels<br />/tracking.gif?events=&prop1=women&server=www.gilt.com&products=&pageName=sales%3A+women&channel=sale&prop4=sale+category+page&u=http%3A%2F%2Fwww.gilt.com%2Fsale%2Fwomen&guid=418237ca-2bc6-932e-84c2-d4f02d9fd5bf&gen=f&uid=25423567&cb=443460396<br />
  • 17. Omniture<br />GILT<br />Data<br />Warehouse<br />Users<br />
  • 18. Omniture<br />24 hours<br />later...<br />GILT<br />Data<br />Warehouse<br />Users<br />
  • 19. Node.js<br />Asynchronous, evented web framework<br />http://nodejs.org<br />
  • 20. var mongo = require(’lib/mongodb’);<br />var db = new mongo.Db('hummingbird', new mongo.Server('localhost', 27017, {}), {});<br />db.createCollection('visits', function(err, collection) {<br /> db.collection('visits', function(err, collection) {<br /> collection.insert(env);<br /> });<br />});<br />
  • 21. DEMO<br />

×