Yes, we use MySQL

Actually several major MMOs do.

"But MySQL…" is light weight and efficient. Our game code actually includes a wrapper that transparently lets us switch between MySQL, PostgreSQL and Oracle. And our usage patterns lend themselves very well to MySQL — its mostly just a way to externalize data from within the game. It's only used as a back end.

And like any application, we generally avoid direct database accesses when possible – we don't save every change as it occurs, we use a lot of batching techniques. We also avoid direct database transactions where possible: we used to rely on a practice that has become fairly common amongst MMOs, a "proxy" – our own application that speaks to the game in game protocols that it converts into SQL statements – things like saving all the changes to spawn lists don't generate more than 8 queries a second.

The other technique being the use of worker threads that handle aggregated SQL queries maildropping the results to the neccessary callbacks.

There's also a little more magic behind it than that but I'll save that for the con :)

S! to the kgwikings :)

Expect chicanery!

I was looking at the source for 'strlcpy()', and knowing how cunning those *BSD guys can be, I saw this:

/* Copy as many bytes as will fit */        

if (n != 0 && --n != 0) {      
  do {      
     if ((*d++ = *s++) == 0)      
   } while (--n != 0) ;

Ok, I thought, what wizardry is this? What does the compiler do with that???