Greetings Rumblers!
I'm Andy Lim, Lead Engineer on server features for Warcraft Arclight Rumble. The server team is responsible for all the things you'd expect from a server team, including networking, cloud computing, and storage, but we also build game features such as campaign progression and quests. I'd like to peel back the blue curtain and share a bit more about how we store experience and then use it to calculate levels for each Mini.
Warning! Technical details ahead; it could get a little heavy, but stick with us.
Let’s kick things off by getting to know a bit about our storage solution we use to keep track of the frequent changes to our player data for a lot of concurrent users—Cassandra. Cassandra is an open-source, popular, highly scalable, distributed database and gives us the right balance of data consistency and availability. For the data itself, Cassandra deals well with wide data sets without forcing a hard schema. We have built tooling that enables engineers to define our database tables and the table schema as each feature needs it, giving us some flexibility for structure and organization as desired. We can easily write and validate our schema and queries.
Cassandra is well known to be very fast at writing data but slow at reading it. Updating in place data is often a read-and-then-write operation, so that would be slow also. To get around that, we designed our player data to be stored as a ledger. In a ledger, you write each line as a change, and when you read it, you read all the entries and then do some calculations on it.
A concrete example for Arclight is the experience ledger for each Mini. After each mission, a row will be added to the ledger for a single Mini, indicating the amount of experience
Read more on news.blizzard.com