Many people have brought up the point to me that commercial MMORPGs like WoW and Everquest use databases and ask why it wouldn't work for UO.
A couple things come to mind. First, the hardware used is incredible compared to 99% of RunUO servers. For databases (any type) to be functional, the server must have multiple processors with multiple cores each and a shitton of memory. Then dedicate a processor to a subshard of the gameserver, and another processor with a separate hard drive and ram set (blade servers can do this), to do database work.
In addition, using blade servers with custom operating systems and cluster software (which was introduced with .NET Framework 4.0... so they say), allows each subshard of the game server to simultaneously back up objects to a local backup server (on the same rack). The local backup server is highly redundant, and then shares universal information with the main account servers.
Keep in mind that for all of this to be necessary (and practical), a server would need THOUSANDS (2500 for WoW) of players online at a time ALL the time. Also WoW doesn't have world saves, because there are no player owned objects (like houses or boats or other clutter on the ground) that are left in the world when the person logs out. When you log out, your character is PULLED from the world COMPLETELY. Its taken out of memory and saved back into the database using a queue system. This is the reason why it takes time to mail objects from one player to another within WoW.
None of this is necessary for Ultima Online, and the portability that WoW uses cannot be replicated because there are objects such as houses, boats, guildstones, etc.
Also I would propose that a database is not necessary to make world saves faster. Someone could code a system that does incremental backups, where everything that is flagged for change is recorded to a new file, and every 24 hours, a complete backup is done (merge all incremental using a separate core, so you don't freeze the world). This would reduce the worldsave by the number of changed objects, and provide a way to go through changes as needed, without the overhead of a database. I have done testing with a setup like this using a 1GB worldfile, and it reduced the save time from 25 seconds (3.0ghz quad core extreme using .NET Framework 4.0) to about 4 seconds. Of course the delay is based on activity, the more active the shard, the longer the delay will be.
EDIT: I forgot to mention that there were other changes which led to the drastic decrease in world save time. Serializing accounts in binary instead of XML, not serializing default names for mobiles, not serializing hp, stam, or mana for mobs, not serializing spawners (they are serialized separately to keep the shard portable), not serializing static items (these are also serialized separately for portability), and not serializing inactive spawned mobiles or spawned items (everything is dynamically respawned as needed when the shard boots up). In addition, none of my dynamic systems (active but unused champion spawns, duel pits, or tournaments) serialize. If the shard loads up during one of these events, everything is automatically reset.