[
https://issues.apache.org/jira/browse/HBASE-9245?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13762140#comment-13762140
]
Jonathan Hsieh commented on HBASE-9245:
---------------------------------------
Here's motivation for 0.96 vs 0.98:
1) There would be perf degradation due to api shimming at multiple locations
that actually affects the common case (see HBASE-9359, and some of the
grossness in the filter api shim).
2) There are many other apis that have been removed already, that break
exiting apps so it seemed better to get them all at this time instead of
guaranteeing that it will happen again.
3) I believe the changes are fairly minimal (a type change) and efforts are
being made to minimize the impact after this type change is being done.
4) Not doing it now blocks a whole class of optimizations from coming in as
minor feature additions until we have another chance to break the api.
Here's motivation for the overall removal of KV from the client/common api:
In 0.94, KV is a concrete implementation that is present on the serverside and
the client side. The internal structure and layout is exposed such that all kvs
are locked into being a single contiguous array/base pointer (for the entire
KV) with offsets and lengths into this base pointer for each of the major
fields (row, fam, qual, value, ts). This means each kv has a fully copy of all
these fields.
In 0.96 we've introduced encodings that break the single base pointer
assumption. The Cell interface exposes what is essentially multiple base
pointers (one for row, fam, qual, val, just returning long for ts). This will
allow us to use more efficient encodings that can allow us to share
rows/fams/quals from multiple KV's with the a single array.
Currently in 0.96 there are two implementations of Cell -- KeyValue (a cell
backed by a flat contiguous array), and PrefexTreeCell (a cell backed that uses
multiple base pointers to share prefixes). Currently the PrefixTreeCell is
only on the RS side (actually only at the store file I believe) and we have to
do a bunch of interpreting on the RS side to convert to KV's, and then ship to
clients.
By changing the client/common API to only use the Cell interface, we decouple
the interface from the implementation. This opens opportunities for push KV
encodings up from the HFile level into the scanners, and the flexiblity to send
encoded kvs to the client.
It is important to do the client api first since these will be the longest
living, and other changes from here on will be likely be internal to RS's or
only additions to the rpc protocol which should not break compatibility as
future 0.96 api+wire compatible hbases come around.
> Remove dead or deprecated code from hbase 0.96
> ----------------------------------------------
>
> Key: HBASE-9245
> URL: https://issues.apache.org/jira/browse/HBASE-9245
> Project: HBase
> Issue Type: Bug
> Reporter: Jonathan Hsieh
>
> This is an umbrella issue that will cover the removal or refactoring of
> dangling dead code and cruft. Some can make it into 0.96, some may have to
> wait for an 0.98. The "great culling" of code will be grouped patches that
> are logically related.
--
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