[
https://issues.apache.org/jira/browse/HBASE-1249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12703513#action_12703513
]
Erik Holstad commented on HBASE-1249:
-------------------------------------
+ Do you mean TimeRange, or are you really talking about TimeStamp?
+ Versions are handled differently depending on what kind of query is is, but
basically there is a separate list that keeps track of how many versions that
have been fetched that lines up with the list of KeyValue fetched.
+ The Family object is not needed but it makes a nice abstraction from the
array of arrays, and for the case of using the family for e get, you don't need
to store the family name more than once, which is not the case with the old
way. I nice thing with having a family object is also that you don't need to
look at the objects themselves to figure out what family it is, since it is
stored separately.
+ The GetXServer is a GetX that has be deserialized on the server, but also
includes the compareTo(KeyValue) method and some other get specific methods
that belong on the server side. Yes the compareTo(KeyValue) method in the
GetXServer class checks everything from row/column to ttl, TimeRange, Filter
and versions, everything is handled in this method. The reason that there are
to different return code for next storefile and Done is to be able to early
out, so that you don't have to go to the next storfile, but you are right, it
should probably be called something else than compareTo since it doesn't have
the expected return codes.
+So in the GetXServer class you have like 6 different list, you have gets,
newGets, deletes, newDeletes, versions and newVersions, all of these are not
used for all types of gets but basically how it works it that you create the
newList in the current storefile and after every store file you merge the 2
lists into one and they are but into the non new lists.
+All the compare code that I'm using is currently in the GetXServer class, the
only external compare that I'm currently using it Bytes.compare(). The reason
that I've done it this way is because I don't want to recalculate the offsets
and lengths when doing different compares. I don't have a deleteSet just a list
of KeyValues that are deletes. The basic layout that we can't escape is that we
have 3 lists, one with the KeyValues in the current memcache/storefile, data,
one with things that we are looking for, gets and one with the deletes. So
instead of having sets or sortedmaps where these are stores we just have 3
sorted lists. So for every data, we look in the get list to see if that entry
can be found and iterate down the get list until we find that entry or
something that is bigger. In the case of a hit in the get list we do the same
thing in the delete list. This means that if the lists are k, l, m long worst
case lookup are k+l+m.
+ I haven't done anything with filters yet, I just have a part in the
compareTo(KeyValue) where the filter check should sit.
> Rearchitecting of server, client, API, key format, etc for 0.20
> ---------------------------------------------------------------
>
> Key: HBASE-1249
> URL: https://issues.apache.org/jira/browse/HBASE-1249
> Project: Hadoop HBase
> Issue Type: Improvement
> Reporter: Jonathan Gray
> Priority: Blocker
> Fix For: 0.20.0
>
> Attachments: HBASE-1249-Example-v1.pdf, HBASE-1249-Example-v2.pdf,
> HBASE-1249-GetQuery-v1.pdf, HBASE-1249-GetQuery-v2.pdf,
> HBASE-1249-GetQuery-v3.pdf, HBASE-1249-GetQuery-v4.pdf,
> HBASE-1249-StoreFile-v1.pdf, HBASE-1249-StoreFile-v4.pdf
>
>
> To discuss all the new and potential issues coming out of the change in key
> format (HBASE-1234): zero-copy reads, client binary protocol, update of API
> (HBASE-880), server optimizations, etc...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.