ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Raymond Wilson <raymond_wil...@trimble.com>
Subject RE: Accessing array elements within items cached in Ignite without deserialising the entire item
Date Thu, 03 Aug 2017 02:28:29 GMT
Hi Pavel,



Thanks for putting it on the plan.



I’ve been reading through the ‘how to contribute’ documentation to see
what’s required and have pulled a static download of the Git repository to
start looking at the code. I’ll see… J



Thanks,

Raymond.



*From:* Pavel Tupitsyn [mailto:ptupitsyn@apache.org]
*Sent:* Wednesday, August 2, 2017 9:08 PM
*To:* user@ignite.apache.org
*Subject:* Re: Accessing array elements within items cached in Ignite
without deserialising the entire item



Actually, you are right, we can add this easily, because internal API
allows random stream access.

I've filed a ticket: https://issues.apache.org/jira/browse/IGNITE-5904



Thank you for a good suggestion!

And, by the way, everyone is welcome to contribute, this ticket can be a
perfect start!



Pavel



On Wed, Aug 2, 2017 at 12:46 AM, Raymond Wilson <raymond_wilson@trimble.com>
wrote:

Hi Pavel,



Thanks for the clarifications. I certainly appreciate that cross platform
protocols constrain what can be done…



Thanks for pointing out IBinaryRawReader.



Regarding random access into arrays, is this something that is on the books
for a future version?

Thanks,

Raymond.



*From:* Pavel Tupitsyn [mailto:ptupitsyn@apache.org]
*Sent:* Tuesday, August 1, 2017 11:31 PM
*To:* user@ignite.apache.org
*Subject:* Re: Accessing array elements within items cached in Ignite
without deserialising the entire item



Hi Raymond,



First of all, BinaryObject is a cross-platform concept, it exists in C#,
C++, Java.

>From C# point of view there are some inconsistencies (like nullable Guid,
or non-generic collections),

but these things are dictated by the existing protocol, so we can't change
them.

In most cases you can just use WriteObject<>/ReadObject<> methods to avoid
these inconsistencies.



1. You can implement array pooling yourself using IBinaryRawReader methods.

   For example, byte array is written like rawWriter.WriteByte(arr.Length);
for (...) rawWriter.WriteByte(arr[i]);

   I think an extension method would be easy to write.



2. See above, use WriteObject<>/ReadObject<> to avoid dealing with nullables



3. Random array access is not possible with current API.



Thanks,

Pavel



On Tue, Aug 1, 2017 at 2:46 AM, Raymond Wilson <raymond_wilson@trimble.com>
wrote:

Hi,



I’ve been looking at IBinarizable and IBinarySerializer with regards to
controlling object serialization (using the Ignite.Net client).



A couple of questions:



1.       Some of the APIs in IBinarizable allow for a factory methods to
control construction of collection and dictionary elements, but not for
array elements (which could allow for performance optimization through
array pooling).

2.       GUID and DateTime elements are nullable (and there is no
non-nullable variant for these types). Apart from being inconsistent with
all the other types supported in the API, nullability in .Net carries a
performance penalty. Curious as to why these types are defined like this?

3.       I see it is possible to read arrays of elements. But I see no way
to read a particular element within an array without deserialising the
entire array. Is it possible to do something like  byte ReadByte(string
fieldname, uint index); ?



Thanks,

Raymond.

Mime
View raw message