A Bunch Of New Stuff and Updates

It’s actually been a while since the last update — so I decided to make a summary of the recent stuff I’ve been working on (relatively few free weekends in the past 2 months given all the events I’ve been working at and the data stuff I had to prepare for the Supermajor production, so slow progress sorry!).

Skill Builds

You can now find aggregate stats on skill builds for a hero (over any level range you care about).

You can also click on the relevant ‘Times Occurred’ cell to find the specific matches that build was chosen, and the full build in those games.

Building Deaths

This lets you explore the various timings associated with killing structures: towers, barracks and shrines. Loads of filters to fiddle with!

Notice that not every building destroyed is last-hit by a hero, sometimes your creeps do the dirty work!
Ever wanted to see the fastest tier 1 middle taken by a Broodmother?

LAN Data

One of the most important things that we’ve not yet got quite right yet on the new datdota is a filter for LAN data. This isn’t something that’s possible to extract from replays — so it’s mostly a manual process.

Thanks to the great effort of various contributors (I’ll thank them all by name in the release post), we’re 60% of the way through the process of collecting this data. If you’d like to help out, check out #crowdsource on the datdota discord. When this is done there’ll be a roll-out to all relevant pages.

Performance Upgrades

I’ve done a bunch of SQL optimizations and done a load of tuning. A few more indexes, some queries totally rewritten and all-in-all our 98th percentile wall time went down from 100ms to 30ms. There’s not much more left to tune (no single query type uses more than 9% of runtime in any day — and that’s the biggest Frame query). I also rewrote part of the queuing logic to be a bit less aggressive but still remain super fast in finding and parsing games.

API Upgrades

I think pretty much every significant page except Frames has been migrated to the new API system. If you missed the post describing it, it’s here. If there’s a page you’d like migrated poke me — odds are I’ve just not migrated it because I don’t think anyone really cares for programmatic access to it.

CSS Improvements

Thanks to davidfischer, a bunch of the CSS on all the pages has been improved and works a bit nicer on mobile. Although mobile has been treated as a 2nd class citizen — it’s just mostly my frontend coding is so awful.

What’s Next

  • A server migration: some time over the next 4–6 weeks we’ll be moving servers. We need more storage (we have ~4TB now, and that’s without all the S1 replays), and it’ll be nicer to spin the DB off onto it’s own physical box (and run it off off SSDs). There shouldn’t be any significant downtime barring when the DNS flips over (for a few minutes) — thumbs crossed.
  • After doing some fine-tuning on the Laning Data and another review, I’m happy if it rolls out as an additional filter to the relevant pages.
  • Talent data. A bunch of backed stuff has to be done to automate stuff that’s required for this and that’s done. Now it just needs a frontend!
  • A few more win-expectancy tables are coming in (Nahaz will be happy)
  • [Breaking change] Within the next week, the behaviour of the Radiant / Dire selector is going to change (this is only a warning about that upcoming change). Previously it was “which faction wins the match”, but it’ll soon change to “which faction are you referring to”. So, if you’re looking at Player Performances and have only Radiant selected, it’ll be showing you player performances when that player is on the Radiant side. Some types of queries relied on the older style, but I’ve since migrated them.