A Random-Access Column Object Model
-----------------------------------

                 Key: HBASE-3851
                 URL: https://issues.apache.org/jira/browse/HBASE-3851
             Project: HBase
          Issue Type: New Feature
          Components: client
    Affects Versions: 0.92.0
            Reporter: Karthick Sankarachary
            Assignee: Karthick Sankarachary
            Priority: Minor
             Fix For: 0.92.0


By design, a value in HBase is an opaque and atomic byte array. In theory, any 
arbitrary type can potentially be represented in terms of such unstructured yet 
indivisible units. However, as the complexity of the type increases, so does 
the need to access it in parts rather than in whole. That way, one can update 
parts of a value without reading the whole first. This calls for transparency 
in the type of data being accessed.

To that end, we introduce here a simple object model where each part maps to a 
{{HTable}} column and value thereof. Specifically, we define a {{ColumnObject}} 
interface that denotes an arbitrary type comprising properties, where each 
property is a {{<name, value>}} tuple of byte arrays. In essence, each property 
maps to a distinct HBase {{KeyValue}}. In particular, the property's name maps 
to a column, prefixed by the qualifier and the object's identifier (assumed to 
be unique within a column family), and the property's value maps to the 
{{KeyValue#getValue()}} of the corresponding column. Furthermore, the 
{{ColumnObject}} is marked as a {{RandomAccess}} type to underscore the fact 
that its properties can be accessed in and of themselves.

For starters, we provide three concrete objects - a {{ColumnMap}}, 
{{ColumnList}} and {{ColumnSet}} that implement the {{Map}}, {{List}} and 
{{Set}} interfaces respectively. The {{ColumnMap}} treats each {{Map.Entry}} as 
an object property, the {{ColumnList}} stores each element against its ordinal 
position, and the {{ColumnSet}} considers each element as the property name (as 
well as its value). For the sake of convenience, we also define extensions to 
the {{Get}}, {{Put}}, {{Delete}} and {{Result}} classes that are aware of and 
know how to deal with such {{ColumnObject}} types.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to