[ https://issues.apache.org/jira/browse/HBASE-3851?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Karthick Sankarachary updated HBASE-3851: ----------------------------------------- Attachment: HBASE-3851.patch > 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 > Labels: HBase, Mapping, Object > Fix For: 0.92.0 > > Attachments: HBASE-3851.patch > > > 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