Another question...

Does OrientDB provide any garuntees with respect to order of fields when
a record is retrieved?  i.e. if I save a new record and retrieve should
I expect fields to be in the original order?  I suspect the answer is no
based on what I see in ODocument.

On 08/04/14 10:11, Luca Garulli wrote:
> Hi Steve,
> Sorry for the delay on this answer.
>
> I'm really really impressed by your whole job, regarding the analysis,
> code and documentation!
>
> I think all the OrientDB users will thank you for this contribution,
> even if we're just at the beginning :-)
>
> I like very much the idea about Class versioning to avoid massive
> update of database like RDBMSs do. 
>
> I try to answer to your open questions and at the end my thoughts.
>
>
>     *Things to Deal With*
>     *...*
>
>     *OType.ANY*
>
>     No binary serializer currently exists that can handle OType.ANY. 
>     I need to find out if there is existing code to determine type
>     from untyped input.  I assume there must be because there is an
>     ODocument.field(fieldName, value) method.
>
>
> Don't worry about ANY, but rather we need to support CUSTOM with a
> custom implementation of serialization, or just any object that
> implements Serializable and Externalizable.
>  
>
>     *Persisting additional class metadata*
>
>     There is a fundamental mismatch between the way that OrientDB
>     persists classes and this scheme.  Namely that each OClassVersion
>     (the current equivalent of OClassImpl) is a member of an
>     OClassSet.  Each OClassSet shares a table of nameId -> name
>     mappings between all of it's child OClassVersions.  The logical
>     way to persist this would be:
>
>     OClassSet {
>         int classId;
>         Map<Integer, String> nameIdMap;
>         List<OClassVersion> versions;
>     }
>
>
> What's the content of nameIdMap? What nameId stands for?
>  
>
>     Piggybacking OClassSet on top of OClassImpl doesn't seem the right
>     way to do this.
>
>     Additionally there will need to be persisted a database global map
>     of classId -> OClassSet.
>
>     I'm open to suggestions as to how to achieve this.  These special
>     documents probably cannot be persisted themselves in the binary
>     format (without some ugly hacking) as the OBinarySerializer is
>     dependent on looking up the OClassSet and nameIds.
>
>
> We've a Schema that can manage this. Schema record is marshalled like
> others, so we can add what we want.
>  
>
>
>     *Removing bytes after deserialization*
>
>     Lazy serialization/deserialization is quite feasible by overriding
>     the various ODocument.field() methods.  i.e. when we read a record
>     we only parse the header (in fact only need to parse the first
>     section of the header initially).  Then if a field is requested
>     that hasn't been retrieved yet we scan the header entry and
>     deserialize.  The question is then raised, under what
>     circumstances is it too expensive to hold on to the backing byte
>     array rather than just deserializing the remaining fields and
>     releasing it.  It would be useful if there was some mechanism to
>     determine if the record is part of a large query.  Or if the
>     OBinDocument itself provides a method to initiate this so that
>     OrientDB can manage it at a lower level.
>
>
> I'd like to explore the road to completely avoid to use the
> Map<String,Object> of ODocument's _fieldValues. In facts, with an
> efficient marshallin/unmarshalling we could do it at the fly.
>
> PROS:
> - Less RAM used and less objects in Garbage Collector (have you ever
> seen tons of Map.Entry?)
> - Less copies of buffers: the byte[] could be the same read from the
> OStorage layer
> - No need of Level2 cache anymore: DiskCache keeps pages, so storing
> the unmarshalled Document has no more sense
>
> CONS:
> - Slower access to the fields multiple times, but in this case
> developers could call field() once and store the content in a local
> variable
>
> WDYT?
>
> We could also use a hybrid approach or different implementation of
> ODocument to let the developer to decide what to use.
>  
>
>     *Current Code Cleanup*
>
>     *Bring back OBinHeaderEntry*
>
>     OBinProperty (extends OProperty) and OBinHeaderEntry both
>     implement IBinHeaderEntry.
>
>     OBinHeaderEntry was merged into OBinProperty in an effort to
>     simplify.  For an OBinRecordHeader we clone the schema declared
>     OBinProperties from the schema then add additional OBinProperties
>     for any other fields that exist (which is ugly because the
>     properties are never added to the schema).  OBinHeaderEntry is
>     both lighter weight, easier to object pool and makes a clear
>     distinction between mutable and immutable.
>
>
> Cool.
>  
>
>
>     *Tighten up the API*
>
>     Nothing public unless it needs to be exposed.
>
>
> Agreed.
>
> *Poor documentation*
>
> you're right, we've some port totally undocumented. The respective
> authors of the code classes/snippets will spend some hours all the
> weeks to improve them.
>
> *Partial serialization*
>
> I'd like also to explore the partial serialization case.
>
> I mean the case when a user executes a query, browse the result set,
> change a document field and send it back to the database to be saved.
>
> Now we keep tracks of changes in the ODocument (used also by indexes
> to maintain aligned), so we could marshall and overwrite only the
> changed field in byte[].
>
> This feature must go together with abandon usage of Map to store field
> values but use only the byte[].
>
> Lvc@
> -- 
>
> ---
> You received this message because you are subscribed to the Google
> Groups "OrientDB" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to