Nino wrote:
>> Is it quicker to constantly query the database for information, or to
>> query the database once, store the information into an array, and that
[quoted text clipped - 3 lines]
>> I am using MySQL and JSP. Don't know what other information might be
>> pertinent as I really don't know how to test this...
> It is much faster to cache in memory.
>
> The problems are:
> * data size - do you have enough memory to use for this purpose
> * getting the cached data invalidated if the data is changed in
> the database
JSP means Web app which means plan for concurrent access.
Tradeoffs are complicated. You can cluster/farm app servers more easily than
data stores, but data stores can be scaled pretty high and have awesome
built-in caches. One way may be somewhat slower for a given user but allow
better interleaving of concurrent users, so overall throughput improves.
Caching things in application memory may speed up a user but limit the number
of concurrent requests that fit.
Naive expectations of performance often collapse in the face of massive
concurrent access.
Optimizations can occur both horizontally, e.g., throwing more servers at the
web layer, or vertically, e.g., the proposed memory caching scheme or using a
faster JDBC driver, or follow some other pattern, e.g., throwing edge caches
into the mix.
Andre's answer also hints at the difficulties of information latency and
synchronization. How "soon" "after" a transaction should a user see the
result? (In physics, relativity shows that frames of reference in relative
motion can view events as simultaneous or not if the time interval is less
than the "speed of light" latency in any frame of reference. Something similar
pertains to information simultaneity, information latency and cognitive
information processing. Consider Java's "happens-before" thread synchrony as
an example.)
It remains a dark art.
- Lew
Lew - 04 Feb 2007 00:33 GMT
> Andre's answer
Sorry (abashed toe-scuffing) I mean Arne's answer.
- Lew
Nino - 05 Feb 2007 21:28 GMT
Thank you Arne, Zheng and Lew... I guess there really isn't just one
"right" way to do this. I guess I'll just have to figure out where it
makes sense to cache the information and where to just pull it from
the database. A lot of the data I need to access is pretty static, so
data changing in the database shouldn't be too much of a concern...
However, data size might be an issue... How can I tell how much memory
is taken up when I store the data from a database into a session
array? At what point will it be "too much"?
Nino
Arne Vajhøj - 09 Feb 2007 02:56 GMT
> However, data size might be an issue... How can I tell how much memory
> is taken up when I store the data from a database into a session
> array? At what point will it be "too much"?
Just look at how much space the true data will use. There will
be some overhead, but for something as non-exact at this I think
you can ignore it.
Arne