On Fri, Jun 30, 2017 at 10:35 AM, Valentin Kulichenko < [email protected]> wrote:
> Vova, > > Generally this can be useful. If you have a read-only binary object with a > large blob as a field, you don't want to copy this array when reading it. > Instead, we can return a ByteBuffer or a stream wrapping the corresponding > portion. > > However, I currently don't see how this can be smoothly added to existing > API. Vlad, do you have any concrete proposal on how it should look like? > Huge +1 from me. We should not require a copy for read-only data. We should give users an ability to get the original byte stream, especially if it is immutable. > > -Val > > On Thu, Jun 29, 2017 at 2:11 PM, Vladimir Ozerov <[email protected]> > wrote: > > > Hi Vlad, > > > > I am not quite sure I understand the problem. Can you show how the API > you > > propose would look like? Remember that "field" method can return anything > > from primitive, String or byte array, to another BinaryObject. And > returned > > BinaryObject can have references outside of itself, so it cannot be > > serialized easily without full rebuild. . > > > > On Thu, Jun 29, 2017 at 10:16 AM, Vladislav Pyatkov < > [email protected] > > > > > wrote: > > > > > Val, > > > > > > I proposal, access as a stream to binary object, because we have > doubled > > > copy on touch a field (first at copy from cache and second - on > getting a > > > field). > > > > > > For the stream in/out to cache I will be used IGFS. > > > Main idea to avoid GC pressure when make a massive read from key-value > > > storage. > > > > > > On Wed, Jun 28, 2017 at 9:36 PM, Valentin Kulichenko < > > > [email protected]> wrote: > > > > > > > Vladislav, > > > > > > > > Are you suggesting to stream directly from cache. or from a binary > > object > > > > that is already copied from cache? > > > > > > > > -Val > > > > > > > > On Wed, Jun 28, 2017 at 2:52 AM, Vladislav Pyatkov < > > > [email protected]> > > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > Recently, from one of Ignite user, I listened interest idea. > > > > > What if I want to pass some date to java stream from cache. > > > > > > > > > > With binary I do it like this: > > > > > > > > > > BinaryObject get = (BinaryObject) cache.get(key); > > > > > byte[] dataFromCache = get.<byte[]>field("data"); > > > > > System.out.write(dataFromCache, 0, dataFromCache.length); > > > > > > > > > > But in this case we got garbage a lot, due to each time new bytes > > array > > > > is > > > > > creating. > > > > > > > > > > This will lead to many GC events in case we load a some of million > > > > entries. > > > > > Could we offer additional API for working with java stream: > > > > > > > > > > BinaryObject.writeBytesToBuf("data", ByteBuffer.allocate(1024)); > > > > > > > > > > or with buffer > > > > > > > > > > BinaryObject.writeBytesToBuf("data", new byte[1000], 100); > > > > > > > > > > I already created a Jira ticket. > > > > > https://issues.apache.org/jira/browse/IGNITE-5602 > > > > > > > > > > -- > > > > > Vladislav Pyatkov > > > > > Architect-Consultant "GridGain Rus" Llc. > > > > > +7 963 716 68 99 > > > > > > > > > > > > > > > > > > > > > -- > > > Vladislav Pyatkov > > > Architect-Consultant "GridGain Rus" Llc. > > > +7 963 716 68 99 > > > > > >
