Ultima Online and the History of ShardingMon, Apr 21, 2014 in Programming Databases
Have you heard of sharding a database? Of course you have. Do you know where the term comes from? Someone asked me this at a cocktail party recently. I gave it my best shot.
“The earliest I remember was Google engineers using it to describe the architecture of some things,” I said. “That would have been about 2006.”
“Nope. Much earlier than that,” said my new friend.
I pondered. “Well, I guess there was the famous LiveJournal architecture article about MySQL. That was, I dunno, 2003?”
The person then told me the following history. I can neither confirm nor deny it; what do you know about it?
Years ago there was a game called Ultima Online. It….
I broke in. “Hey! In 1995 my brother and I were staff members at a Boy Scout Camp, and one of the other staff members had a game called Ultima Underworld on his PC. It was addictive. Any relationship?”
“Yes, it was a predecessor to Ultima Online.”
“Oh,” I said. “Well, that’s basically the last game I’ve ever played. But please go on.”
Ultima Online was early in the Internet age – late nineties, I think. They knew they were going to have a lot more traffic than they could handle with one server, no matter how big it was. The only solution that presented itself was to run lots of small instances of the game. But that would impact the game play itself. What to do?
The answer was to work it into the storyline of the game itself. The world in the game was said to have been broken into shards. Not the database – the world itself. That was part and parcel of the game. Some gemstone had been broken into shards and reality was broken along with it.
True? False? It’s easy to verify that the storyline is true, but is this how we ended up with “sharding” in the database world, especially in MySQL?
Note: I’m paraphrasing the conversation from the cocktail party. My memory isn’t that good.
I'm Baron Schwartz, the founder and CEO of VividCortex. I am the author of High Performance MySQL and many open-source tools for performance analysis, monitoring, and system administration. I contribute to various database communities such as Oracle, PostgreSQL, Redis and MongoDB.