[netcdf-java] Persisting a NetcdfDatasetCache
Nick Bower
nick.bower at metoceanengineers.com
Wed Feb 20 17:36:32 MST 2008
John Caron wrote:
> Hi Jon and Nick:
>
> Ive been considering whether an object cache like ehcache would be the way to go, but havent had
> time to investigate.
>
> 1. Since NetcdfFileCache/NetcdfDatasetCache encapsolates an open file handle, I need to control the
> number of such handles. Ive assumed that i want to avoid the overhead of opening and closing files,
> but havent actually timed this (BAD programmer!).
>
> 2. The first few versions of netcdf java were serializable, but ive stopped supporting that for
> various reasons (eg Bloch "Effective Java" item 54). Could be revisted, but serialization is a pain.
>
> "Do not implement Serializable lightly, since it restricts future flexibility, and publicly exposes
> class implementation details which are usually private. As well, implementing Serializable correctly
> is not trivial."
>
> "Serialization demands not only backward compatibility, but forward compatibility. You might have
> people running slightly older versions of software needing to read the newer versions, and vice
> versa. Serialization incompatibilities are even more serious than API incompatibilities: we are
> talking about customers not being able to read data that they innocently stored away with a previous
> version of your software!"
>
Random thoughts -
I think those comments above are wise in urging caution for people
expecting to use serialization 1) long-term persistence with something
like built-in ObjectOutputStream, 2) serialization for any form of
exchange between software components.
But regarding the concerns with migration issues, we're not talking
about long-term persistence here or data exchange (eg messaging) - more
a very short-term store that is highly disposable and likely to be
discarded and rebuilt upon any migration. And my understanding is that,
given the need to read/write netcdf files across a variety of platforms,
the point is that the format does not change within a version - v3 is v3
as specified (I'm guessing).
Perhaps the IOSPs provide some method for serialziation already? It
doesn't have to be just using EHCache/ObjectOutputStream directly on
NetcdfDataset of course. You could be caching a more abstract notion of
a netcdf file that lazy instantiates and re-opens file handle as
needed. May require some refactoring though as having NetcdfDataset
directly extend NetcdfFile could be an issue.
Sorry I can't be of more help. To be honest I don't have a great
understanding of the code internals.
More information about the netcdf-java
mailing list