Databasing
A few years back, Craig wrote a great piece called Fast Software, the Best Software:
Speed in software is probably the most valuable, least valued asset. To me, speedy software is the difference between an application smoothly integrating into your life, and one called upon with great reluctance.
Nelson Elhage said much the same thing in his reflections on software performance:
I���ve really come to appreciate that performance isn���t just some property of a tool independent from its functionality or its feature set. Performance ��� in particular, being notably fast ��� is a feature in and of its own right, which fundamentally alters how a tool is used and perceived.
Or, as Robin put it:
I don���t think a website can be good until it���s fast.
Those sentiments underpin The Session. Speed is as much a priority as usability, accessibility, privacy, and security.
I���m fortunate in that the site doesn���t have an underlying business model at odds with these priorities. I���m under no pressure to add third-party code that would track users and slow down the website.
When it comes to making fast websites, most of the obstacles are put in place by front-end development, mostly JavaScript. I���ve been pretty ruthless in my pursuit of speed on The Session, removing as much JavaScript as possible. On the bigger pages, the bottleneck now is DOM size rather than parsing and excuting JavaScript. As bottlenecks go, it���s not the worst.
But even with all my core web vitals looking good, I still have an issue that can���t be solved with front-end optimisations. Time to first byte (or TTFB if you���d rather use an initialism that takes just as long to say as the words it���s replacing).
When it comes to reducing the time to first byte, there are plenty of factors that are out of my control. But in the case of The Session, something I do have control over is the server set-up, specifically the database.
Now I could probably solve a lot of my speed issues by throwing money at the problem. If I got a bigger better server with more RAM and CPUs, I���m pretty sure it would improve the time to first byte. But my wallet wouldn���t thank me.
(It���s still worth acknowledging that this is a perfectly valid approach when it comes to back-end optimisation that isn���t available on the front end; you can���t buy all your users new devices.)
So I���ve been spending some time really getting to grips with the MySQL database that underpins The Session. It was already normalised and indexed to the hilt. But perhaps there were server settings that could be tweaked.
This is where I have to give a shout-out to Releem, a service that is exactly what I needed. It monitors your database and then over time suggests configuration tweaks, explaining each one along the way. It���s a seriously good service that feels as empowering as it is useful.
I wish I could afford to use Releem on an ongoing basis, but luckily there���s a free trial period that I could avail of.
Thanks to Releem, I was also able to see which specific queries were taking the longest. There was one in particular that had always bothered me���
If you���re a member of The Session, then you can see any activity related to something you submitted in the past. Say, for example, that you added a tune or an event to the site a while back. If someone else comments on that, or bookmarks it, then that shows up in your ���notifications��� feed.
That���s all well and good but under the hood it was relying on a fairly convuluted database query to a very large table (a table that���s effectively a log of all user actions). I tried all sorts of query optimisations but there always seemed to be some combination of circumstances where the request would take ages.
For a while I even removed the notifications functionality from the site, hoping it wouldn���t be missed. But a couple of people wrote to ask where it had gone so I figured I ought to reinstate it.
After exhausting all the technical improvements, I took a step back and thought about the purpose of this particular feature. That���s when I realised that I had been thinking about the database query too literally.
The results are ordered in reverse chronological order, which makes sense. They���re also chunked into groups of ten, which also makes sense. But I had allowed for the possibility that you could navigate through your notifications back to the very start of your time on the site.
But that���s not really how we think of notifications in other settings. What would happen if I were to limit your notifications only to activity in, say, the last month?
Boom! Instant performance improvement by orders of magnitude.
I guess there���s a lesson there about switching off the over-analytical side of my brain and focusing on actual user needs.
Anyway, thanks to the time I���ve spent honing the database settings and optimising the longest queries, I���ve reduced the latency by quite a bit. I���m hoping that will result in an improvement to the time to first byte.
Time���and monitoring tools���will tell.
Jeremy Keith's Blog
- Jeremy Keith's profile
- 55 followers
