[
https://issues.apache.org/jira/browse/AVRO-1282?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13642616#comment-13642616
]
Scott Carey commented on AVRO-1282:
-----------------------------------
Re: using schema or class as the key:
This still will not work. You can have a few scenarios cause big trouble, the
most likely one where two schemas map to the same class:
{code}
class Foo {
boolean b;
long l;
}
{code}
There are several valid schemas for reading this via reflection, for example:
{code}
{"type":"record", "name":"Foo", "fields": [
{"name":"b", "type":"boolean"},
{"name":"l", "type":"long"}
]}
{"type":"record", "name":"Foo", "fields": [
{"name":"l", "type":"long"},
{"name":"b", "type":"boolean"}
]}
{"type":"record", "name":"Foo", "fields": [
{"name":"l", "type":"long"}
]}
{code}
If the schema resolution is set up so that the in memory schema matches the in
memory class, then there is no issue, but if it differs in any way we'll be
reading the wrong data from the wrong offset if we go by index instead of name
-- or writing to the wrong place.
Additionally, Schemas as a key in a map tend to be a little slow. Feel free to
try out different approaches.
> Make use of the sun.misc.Unsafe class during serialization if a JDK supports
> it
> -------------------------------------------------------------------------------
>
> Key: AVRO-1282
> URL: https://issues.apache.org/jira/browse/AVRO-1282
> Project: Avro
> Issue Type: Improvement
> Components: java
> Affects Versions: 1.7.4
> Reporter: Leo Romanoff
> Priority: Minor
> Attachments: AVRO-1282-s1.patch, AVRO-1282-s2.patch,
> avro-1282-v1.patch, avro-1282-v2.patch, avro-1282-v3.patch,
> avro-1282-v4.patch, avro-1282-v5.patch, avro-1282-v6.patch,
> avro-1282-v7.patch, avro-1282-v8.patch, TestUnsafeUtil.java
>
>
> Unsafe can be used to significantly speed up serialization process, if a JDK
> implementation supports java.misc.Unsafe properly. Most JDKs running on PCs
> support it. Some platforms like Android lack a proper support for Unsafe yet.
> There are two possibilities to use Unsafe for serialization:
> 1) Very quick access to the fields of objects. It is way faster than with the
> reflection-based approach using Field.get/set
> 2) Input and Output streams can be using Unsafe to perform very quick
> input/output.
>
> 3) More over, Unsafe makes it possible to serialize to/deserialize from
> off-heap memory directly and very quickly, without any intermediate buffers
> allocated on heap. There is virtually no overhead compared to the usual byte
> arrays.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira