Sounds like a good idea to me.  I can't think of any downsides other
than that it will be harder to read the data structure when debugging.

On Fri, Oct 25, 2013 at 9:13 AM, Andrus Adamchik <and...@objectstyle.org> wrote:
> Been thinking about it for a long time. Now finally had a quiet vacation 
> moment to put my thoughts in an email.. This is about CayenneDataObject 
> structure (or rather an alternative to it). Each CDO is really a wrapper 
> around a HashMap. A HashMap gives flexibility to store anything we want, but 
> it is also a heavy and thread-unsafe structure. One of the reasons we 
> designed ivar-based PersistentObject for ROP was to avoid sending serialized 
> HashMaps across the wire. However ivar-based design has its own shortcomings 
> in an ORM. E.g. you can't store faults in ivars of a fixed type. Also keeping 
> the entire object state in one data structure that is not a DO itself will 
> allow to implement some other improvements I am considering (this is a topic 
> of another discussion - I am thinking of atomically swapping object state to 
> improve DataContext select concurrency)
>
> So I am thinking of creating an entirely new DataObject superclass based on 
> fixed-size array with properties accessed by numeric index. The idea is 
> similar to java.util.EnumMap: A set of persistent properties for each entity 
> is known and fixed. Sorting properties alphabetically gives us an index of 
> each value in the object values array. This index can be stored in property 
> descriptors, and used in generated object code. Array-based DataObject will 
> have the following properties/advantages:
>
> * It is internally consistent without any synchronization, i.e. unlike 
> HashMap it won't fall apart when modified by multiple threads.
> * It is compact. Unlike HashMap there's no Entry<K,V> objects, and no 
> multi-bucket strcuture. As a result each DataObject will take less memory, 
> and produce smaller serialized footprint.
> * User-facing getters and setters will work faster - array element access by 
> index vs. a HashMap get.
> * Don't see any reason why we can't use it on the ROP client, so we may 
> achieve our long-term goal of unifying client and server stacks.
> * Object state can be cloned in a consistent manner and can be swapped 
> atomically - something that may be important for the future context 
> concurrency work.
>
> Comments are welcome.
>
> Andrus

Reply via email to