March 1998
- Describe Concept Stephen Zepp
- Describe Concept Jon A. Lambert
- Describe Concept J C Lawrence
- Describe Concept Jon A. Lambert
- Describe Concept J C Lawrence
- Describe Concept Vadim Tkachenko
- Tutorial: Let's build a Compiler! - Part XI: Lexical Scan Revisited Jon A. Lambert
- Tutorial: Let's build a Compiler! - Part XII: Miscellany Jon A. Lambert
- Tutorial: Let's build a Compiler! - Part XIII: Procedures Jon A. Lambert
- Tutorial: Let's build a Compiler! Chris Gray
- VEIL Network Protocol Brandon Gillespie
- Tutorial: Let's build a Compiler! - Part XIV: Types Jon A. Lambert
- Tutorial: Let's build a Compiler! - Part XV: Back to the Future Jon A. Lambert
- Tutorial: Let's build a Compiler! - Part XVI: Unit Construction Jon A. Lambert
- For Ling's FAQ Koster, Raph
- MUD Ratings jlsysinc.ix.netcom.com@ix.netcom.com
- Random Generation Tools Ling
- ANNOUNCE: DB Robin Carey
- THE DARKWHOLE TESTS J C Lawrence
- Magic as Metaphor J C Lawrence
- Magic as Metaphor J C Lawrence
- Magic as Metaphor Jon A. Lambert
- Magic as Metaphor J C Lawrence
- CT - A Hypothetical Session (mid 1995) J C Lawrence
- 2Cyberconf: An article J C Lawrence
- (long) AnarchyMOO Primary Log J C Lawrence
- (short) AnarchyMOO parting salute J C Lawrence
- AnarchyMOO purpose J C Lawrence
- (fwd) CODE RELEASE: [client] Spod! (Java mud client) J C Lawrence
- (fwd) CODE RELEASE: [client]: lyntin (hacker's client) 1.1b Released J C Lawrence
- DarkWhole Test #1 J C Lawrence
- DarkWhole Test #2 J C Lawrence
- DarkWhole test #3 J C Lawrence
- DarkWhole test #4 J C Lawrence
- DarkWhole test #5 J C Lawrence
- DarkWhole test Identity Crisis J C Lawrence
- The Craft of Adventure J C Lawrence
- What in THE Hell was that? Stephen Zepp
- What in THE Hell was that? Ben Greear
- What in THE Hell was that? J C Lawrence
- What in THE Hell was that? Jon A. Lambert
- (fwd) Varying Time Commitment Levels: what's an admin to do? J C Lawrence
- Hello, and a brief intro cimri
- Hello, and a brief intro Ben Greear
- (no title) Time limits? s001gmu@nova.wright.edu
- (no title) Time limits? Justin McKinnerney
- (no title) Time limits? J C Lawrence
- Speaking of Avatars Jon A. Lambert
- Speaking of Avatars Jon A. Lambert
- Speaking of Avatars J C Lawrence
- Speaking of Avatars Jon A. Lambert
- Re: Vadim Tkachenko
- META: Broken mail headers coder@ibm.net
- META: Broken mail headers Alex Oren
- META: Broken mail headers J C Lawrence
- META: Broken mail headers Alex Oren
- META: Broken mail headers J C Lawrence
- META: Broken mail headers Chris Gray
- META: Broken mail headers J C Lawrence
- META: Broken mail headers Caliban Tiresias Darklock
- META: Broken mail headers Chris Gray
- Turn-based MU*'s Sauron
- Balancing Addicts -> soft vs. hard enforcement cimri
- Balancing Addicts -> soft vs. hard enforcement Justin McKinnerney
- Balancing Addicts -> soft vs. hard enforcement J C Lawrence
- Balancing Addicts -> soft vs. hard enforcement Jon A. Lambert
- Balancing Addicts -> soft vs. hard enforcement Ling
- Balancing Addicts -> soft vs. hard enforcement Jon A. Lambert
- Balancing Addicts -> soft vs. hard enforcement Matt Chatterley
- Balancing Addicts -> soft vs. hard enforcement J C Lawrence
- Balancing Addicts -> soft vs. hard enforcement Jon A. Lambert
- Balancing Addicts -> soft vs. hard enforcement Matt Chatterley
- Balancing Addicts -> soft vs. hard enforcement Adam Wiggins
- Balancing Addicts -> soft vs. hard enforcement Joel Dillon
- SfD: Clientside Caching Nathan F Yospe
SfD: Subject for Discussion. I decided to stir things up. It has been slow.
I'm going to start posting these every few weeks, or as the impulse strikes
me... just to get the juices pumping. Feel free to tear it to pieces.
Today's topic: Storage of data for a mud on a permanent or temporary basis.
For now, I will assume a system that only works with a custom client, where
'client' means either a remote pure client, or a 'smart' client, like those
employed (presumably) by UOL. (Is M59 a pure client? I'm pretty sure Pueblo
is.)
A little background:
Some months ago, I discovered that my prototype concept mud was far more
than my hardware could handle. It was built around three distinct processes
that I could easilly seperate: a detailed physical simulation, a parser for
input commands, and a dynamic text generator. Of the three, the first would
have to be handled by the server (or servers, as I have been designing with
distributed processing in mind), but the two user interface concerns were a
good candidate for a client. After a bit of consideration, I began thinking
out the client's design. At this point in time, I have completed a skeletal
server, and the most rudimentary server interface of a client. I won't have
much opportunity to complete the client in the near future, but I do intend
to finish it all eventually. I currently work on it for three hours a week.
There were several issues that I considered when deciding to create this
client. The first was portability. In the end, I decided to make the client
in two forms; the first a Java GUI application with optional native methods
for select platforms, the second a Java text application with output to the
main terminal, again with optional native methods, to be hosted by the user
on some unix account, here effectively giving them a way to play the mud as
if it were a regular telnet server, with a telnet client. It may be a hack,
but it has a few plusses. Much of the work is done by the player's machine,
be it their home PC or the machine they have an account on. The player also
supplies the memory space for the larger portion of their character and ego
preferences and memories. The second major issue was capability; I couldn't
do what I wanted to do without a client on current resources, and I wanted,
as a bonus, to be able to provide a GUI and background pictures for clients
not running as telnet. I did have one problem here, in running the same set
of preferences on multiple machines, for someone who uses several computers
each day. I will get into the possible solutions to that when I finish this
introduction. The third concern was flexibility, and I admit to having much
more difficulty on this issue than the others. This leads to another reason
to cache: downloadable updates to the client. The alternative was downloads
of the entire client every time I changed something. The fourth issue is an
enormous one, and I may have flubbed it: possibility. I may have gotten too
wide eyed on this one, but I'm going for it. Readers of rec.games.mud.admin
may recognize these criteria... I posted an extensive discussion on it, but
there were no replies. *sigh* I'll repost it here, maybe. We need matter to
get things going again. (If anyone else wants to start posting SfDs, please
do. I don't have any kind of trademark on the name, and random thoughts are
good fodder for productive discussion, especially with the brain-pool here.
Essentially, the question of client caching comes down to 1) What are we
going to cache, 2) How long are we going to cache it for, 3) where and how,
and 4) why do we need to cache it? This brings us to the technical portions
of this discourse, and I will now try to break my inane habit of right hand
justification. It's become an addiction, you see.
1) What are we going to cache?
There are several potential candidates for caching. Of course, there are
the obvious ones; graphics ought to be cached in memory, then on disk if
a disk is available (this is not possible with applets), sounds ought to at
the very least be cached on disk; anything else of similar size should, at
all costs, be kept as far from repeated downloading as possible. Text,
while less bandwidth intensive, might also be a candidate for caching. On
the other hand, anything cached is no longer subject to modification by the
server unless update flags exist. A client could potentially cache even the
behavior of objects, if said behavior was controlled by some non binary
algorithms; but in this case, there would have to be some sort of regular
conformation checking with the server. A good basis for the answer to the
above question, then, is, 'how much can we safely offload onto the client?'
The client can obviously be trusted to store anything that would be sent
once, as there is no longer any security concerns with that information. If
there is a concern about the player hacking the client to provide more than
the information a player ought to have, the data storable drops dramaticly.
However, some discretion in how the data is stored - non sequential storage
relative to physical location; storing text in a database with tokenized
references to word sequences, perhaps even a dictionary/thesaurus approach
with some form of abstracted linguistic association (guess what I've been
up to yet?)... or in the case of graphics, storage in a pallette based
table, which saves you in space, and results in a scrambling of data that
can't be easily sorted before the subjects of the graphics (assuming some
form of flate sprite graphics) or a similarly stored polygon library... the
only other option is to be extremely paranoid about what you allow a client
to see. Remember, a hacker can store anything you send; this is not an
issue of the client. If you don't want it stored, don't send it. Period. If
you want it stored, but not readable without great effort, my advise is to
send it in big chunks of database material and extract it by some method
that is integral to the client and well disguised, or, alternatively, under
the direction of the server.
This covers well the storage of things from the server, but there is
another potential here that I think is far more valuable: storage of those
things inherent to the client's "memory"... be it name recognition, scripts
and preferences, or a complete "personality" to be applied to text parsing
or generation, having this on the client's end opens up a whole new level
of potential. This is currently embodied by arcade fighting and racing
games. Have you ever seen one of these games get tougher and "smarter"?
To recap: We can cache three basic types of data; transient data from
the server, database contents from the server, and 'memory' data from the
player. Which ones we cache, and how much of each, depends on the specific
case in question.
2. How Long are we going to Cache it for?
We've got a chunk of data; we want to be able to reference it without
downloading it again; but we don't want to store it forever - unless we are
doing the database thing, in which case we may go so far as releasing most
of it on a CD and just storing updates (ref. UOL, M59?), or at the very
least, notifying clients that the database may reach a size as large as X,
where X is some number larger than what (you hope) is the maximum size in
the reasonably foreseeable future. I specify 1, 2, 4, 10, and 20 MB caches
at the moment; each has a slightly different characteristic; text only mode
may go as large as 15 MB, and the graphical backdrop mode also features a
50 MB cache option in spite of my relatively well compressed backdrops; it
should handle anything I ever produce, but I haven't figured out how I'm
going to ever make that mondo chunk available for download.)
So, we've got this data, we need to weed out the junk and keep the good
stuff; otherwise, how are we going to store it all? Well, first of all, can
we compress it at all? And what about duplicate information? Is there any?
OK, we've gotten rid of all the duplication, compressed... we still have
too much cached data. What now? Now, we decide what we make our criteria
for dumping stuff. Age? Infrequent use? No recent use? Size? This one goes
both ways; the stuff that saves you the most space costs the most to get
again. Generally, small infrequently (or unrecently) used stuff is the best
candidate. Small stuff adds up, and you have more time to get it back, if
you download as needed. Or rather, you require less time at the point where
the need occurs. On the other hand, if you can download stuff in the
background, the big stuff comes down faster, megabyte for megabyte. This is
generally associated with large scale storage models, however.
What if we've got stuff in memory cache, and want to clear that out? Is
it better to save it to disk than to redownload it? Obviously, over a modem
it would be, but sometimes it is faster on the client side to get it over a
T1 connection than to load it from disk. This is one of the points where I
tend to say, "Server first!". Even if a specific case happens to have the
bandwidth to grab stuff fast, and slow disk access, a few dozen of these
will kill the server. The server should always be primary concern, the user
should be asked to bear as much of the burden as possible.
3) Where and How?
This is not just a question of memory, disk, or register. This is also
one of access... if we are caching for the convenience of the client and
server on downloads, we want it right there, but say there is a memory of
some sort associated with the client. Does a player who uses many machines
have to carry their memories on a disk? Why not allow a player to set some
remote accessable point, in the manner of a remote .newsrc, that can be
pointed to by multiple machines, with a breakpoint on time, or a SCCSlike
diff function? This is a different sort of caching, with different motives
and methods, but it has some serious implications as well.
4) why do we need to cache it?
Always make the client do the lion's share of the work. Others may
disagree, but this philosophy has served me well... just think of it this
way: a hundred users, with a few of them using straining 286s and Mac IIs,
and a server (or distributed network of servers, but I'm figuring upward of
100 clients per server) pushing itself to handle the simulation end; VS a
much less capable server, and a bunch of dumb clients totally failing to
burn any of the users' processing capabilities. Now, I will admit that a
mud as we know it now barely taxes a modern Pentium X or PPC chip, but...
just think how much more that mud could do if the text parsing and so forth
were handled by the clients, leaving the server to do the simulation. This
is the real promise of clientside caching. My client even handles the line-
of-sight calculations, which may be a bad idea - how hard is that going to
be to hack, and how long until people release the first "around the corner"
cheat? - but saves yet another major calculation for me. I always hated to
do the ray tracing; spherical resolution collision detection is bad enough.
Generally, the reasons covered above... memory for the client, reduced
download time, and reduced work for the data server (I have a data and an
event server. This may well make up the core of a future TfD.), with some
additional emphasis on tricks like dynamic text generation, more flexible
namespace storage, and so forth, cover the majority of cases. I'm sure you
all have others. Let's here some feedback!
--
Nathan F. Yospe - Aimed High, Crashed Hard, In the Hanger, Back Flying Soon
Jr Software Engineer, Textron Systems Division (On loan to Rocketdyne Tech)
(Temporarily on Hold) Student, University of Hawaii at Manoa, Physics Dept.
yospe#hawaii.edu nyospe#premier.mhpcc.af.mil http://www2.hawaii.edu/~yospe/ - SfD: Clientside Caching Jon A. Lambert
- SfD: Clientside Caching Nathan F Yospe
- SfD: Clientside Caching Chris Gray
- SfD: Clientside Caching Jon A. Lambert
- (subject missing) J C Lawrence
- Balancing Addicts Ling
- Balancing Addicts Richard Woolcock
- Balancing Addicts Ling
- Balancing Addicts J C Lawrence
- Transport layer (UDP vs TCP) Ben Greear
- Transport layer (UDP vs TCP) Niklas Elmqvist
- Transport layer (UDP vs TCP) Jon Leonard
- Transport layer (UDP vs TCP) Ben Greear
- Transport layer (UDP vs TCP) Jon Leonard
- Transport layer (UDP vs TCP) Ben Greear
- Transport layer (UDP vs TCP) Chris Gray
- Transport layer (UDP vs TCP) Niklas Elmqvist
- Transport layer (UDP vs TCP) Jon A. Lambert
- Transport layer (UDP vs TCP) Ben Greear
- Time Limits? Jon A. Lambert
- META: topic and thread culling (was Balancing Addicts -> soft vs. hard enforcement ) J C Lawrence
- (subject missing) J C Lawrence
- XShipWars J C Lawrence
- (fwd) INFO: [client] Chaco looking for new parent for Pueblo J C Lawrence
- SIMULATING FUTURE HISTORIES: THE NAU SOLAR SYSTEM SIMULATION & MARS SETTLEMENT J C Lawrence
- (fwd) Functional Security J C Lawrence
- (fwd) Functional Security Ling
- (fwd) Functional Security Chris Gray
- (fwd) Functional Security Matt Chatterley
- (fwd) Functional Security Miroslav Silovic
- (fwd) Functional Security Felix A. Croes
- (fwd) Functional Security J C Lawrence
- SIMULATING FUTURE HISTORIES s001gmu@nova.wright.edu
- Character development [was ] Matt Chatterley
- Character development [was ] J C Lawrence
- Character development [was ] Matt Chatterley
- Character development [was ] Travis Casey
- Character development [was ] J C Lawrence
- Character development [was ] Travis S. Casey
- Character development [was ] Marian Griffith
- Character development [was ] Travis S. Casey
- Character development [was ] Vadim Tkachenko
- Character development [was ] Travis Casey
- Character development [was ] Vadim Tkachenko
- Character development [was ] Travis Casey
- Character development [was ] Vadim Tkachenko
- Character development [was ] Marian Griffith
- Character development [was ] Vadim Tkachenko
- Character development [was ] Marian Griffith
- Character development [was ] s001gmu@nova.wright.edu
- Character development [was ] Marian Griffith
- Character development [was ] J C Lawrence
- Character development [was ] Cimri
- Character development [was ] J C Lawrence
- Character development [was ] s001gmu@nova.wright.edu
- Character development [was ] Caliban Tiresias Darklock
- Character development [was ] Caliban Tiresias Darklock
- Character development [was ] Vadim Tkachenko
- Character development [was ] Ben Greear
- Character development [was ] Matt Chatterley
- Character development [was ] J C Lawrence
- Character development [was ] Matt Chatterley
- Character development [was ] Travis S. Casey
- Character development [was ] J C Lawrence
- Character development [was ] Koster, Raph
- Character development [was ] J C Lawrence
- Character development [was ] Koster, Raph
- Character development [was ] Alex Bertoglio
- Character development [was ] J C Lawrence
- Character development [was ] J C Lawrence
- Character development [was ] John Bertoglio
- 3D engines for MUDs Niklas Elmqvist
- 3D engines for MUDs Chris Gray
- 3D engines for MUDs J C Lawrence
- 3D engines for MUDs Niklas Elmqvist
- 3D engines for MUDs Chris Gray
- 3D engines for MUDs Ling
- 3D engines for MUDs Koster, Raph
- 3D engines for MUDs Mike Sellers
- 3D engines for MUDs Niklas Elmqvist
- 3D engines for MUDs Koster, Raph
- 3D engines for MUDs Ling
- 3D engines for MUDs s001gmu@nova.wright.edu
- Dynamic Loading of Modules Niklas Elmqvist
- Dynamic Loading of Modules Greg Munt
- Dynamic Loading of Modules J C Lawrence
- Parlez vous NPC? Matt Chatterley
- Parlez vous NPC? Vadim Tkachenko
- Parlez vous NPC? Matt Chatterley
- Parlez vous NPC? Chris Gray
- Parlez vous NPC? Matt Chatterley
- Parlez vous NPC? Nathan F Yospe
- Parlez vous NPC? Matt Chatterley
- Dynamic Loading of Modules Niklas Elmqvist
- Dynamic Loading of Modules Chris Gray
- Dynamic Loading of Modules Jon A. Lambert
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? Jon A. Lambert
- World Persistence, flat files v/s DB v/s ?? Greg Munt
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? s001gmu@nova.wright.edu
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? Ross Nicoll
- World Persistence, flat files v/s DB v/s ?? Ross Nicoll
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? s001gmu@nova.wright.edu
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Jon A. Lambert
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Jon A. Lambert
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Joel Dillon
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Matt Chatterley
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Adam Wiggins
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Orion Henry
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Nathan F Yospe
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Vadim Tkachenko
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Greg Munt
- World Persistence, flat files v/s DB v/s ?? Ben Greear
- World Persistence, flat files v/s DB v/s ?? Jon A. Lambert
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- World Persistence, flat files v/s DB v/s ?? Chris Gray
- World Persistence, flat files v/s DB v/s ?? J C Lawrence
- Jukebox Vadim Tkachenko
- Another recruit for the list? Joel Dillon
- OT: Martin Keegan J C Lawrence
- Old code Joel Dillon
- Old code Michael Hohensee
- UML/Commercial v Free Muds Greg Munt
- UML/Commercial v Free Muds Nathan F Yospe
- UML/Commercial v Free Muds Jon A. Lambert
- Heightfield Terrain Rendering Paper Niklas Elmqvist
- (subject missing) J C Lawrence
- (fwd) Roleplaying J C Lawrence
- (fwd) Roleplaying s001gmu@nova.wright.edu
- (fwd) Roleplaying Katrina McClelan
- (fwd) Roleplaying Ling
- (fwd) Roleplaying J C Lawrence
- (fwd) Roleplaying Travis Casey
- Predicting future motion intelligently J C Lawrence
- META: New Mail server and ISP J C Lawrence
- (rec.games.mud.admin) Roleplaying (fwd) Nathan F Yospe
- Persistant storage.... My current idea. Ben Greear
- Persistant storage.... My current idea. Jon A. Lambert
- Persistant storage.... My current idea. Ben Greear
- Persistant storage.... My current idea. J C Lawrence
- Persistant storage.... My current idea. Ben Greear
- Persistant storage.... My current idea. J C Lawrence
- Persistant storage.... My current idea. Ben Greear
- Persistant storage.... My current idea. Chris Gray
- Persistant storage.... My current idea. Ben Greear
- Persistant storage.... My current idea. J C Lawrence
- Persistant storage.... My current idea. Ben Greear
- UML & CORBA Greg Munt
- [MUD-Dev]: smoothing J C Lawrence
- [MUD-Dev]: smoothing J C Lawrence