hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jim Kellerman (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HBASE-880) Improve the current client API by creating new container classes
Date Mon, 29 Sep 2008 19:02:44 GMT

    [ https://issues.apache.org/jira/browse/HBASE-880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12635492#action_12635492
] 

Jim Kellerman commented on HBASE-880:
-------------------------------------

Overall, I think the patch is moving in the right direction, but I think that the current
patch is not much less complicated than the current implementation. I would change it as follows:

RowOperation becomes a concrete class
- remove the timestamp as timestamps are associated with columns and not rows (for getRow
and deleteAll see below)
- change the constuctor so it takes a row lock and not a timestamp
- add new member that is List<ColumnOperation> (see below).

Add a new base class for columns:

{code}
public class ColumnOperation implements Writable, Comparable<ColumnOperation> {
  // An empty column family means all columns in row.
  protected byte[] columnFamily = HConstants.EMPTY_BYTE_ARRAY;

  // An empty member means all members in the column.
  protected byte[] familyMember = HConstants.EMPTY_BYTE_ARRAY;

  protected long timestamp = HConstants.LATEST_TIMESTAMP;
  protected int numVersions = 1;

  public ColumnOperation(){}                    // for serialization
  protected ColumnOperation(byte[] family, byte[] member, long timestamp, int numVersions)
{
    ...
  }
  ...
}
{code}

The class above can be used to replace get and getRow.
get(RowOperation) assumes that the List<ColumnOperation> is a list of ColumnOperation.

Deprecate both BatchOperation and BatchUpdate.

Add a new class that replaces BatchOperation:

{code}
public class ColumnMutation extends ColumnOperation {
  // An empty value means delete the specified column.
  protected byte[] value = HConstants.EMPTY_BYTE_ARRAY;

  public ColumnMutation() {}                    // for serialization

  // For updates (put)
  public ColumnMutation(byte[] family, byte[] member, byte[] value, long timestamp) {
    ...
  }

  // For deletes
  public ColumnMutation(byte[] family, byte[] member, long timestamp) {
    ...
  }
}
{code}

HTable.commit is used for both updates and deletes. It assumes that the List<ColumnOperation>
is a list of ColumnMutation.

deleteAll becomes a commit of a RowOperation with one or more ColumnMutations:
- A single ColumnMutation with empty value, empty family, member, and default timestamp deletes
all values for that row. With a timestamp, all the entries in the row that correspond to timestamp.
- A single ColumnMutation with empty value, non-empty family corresponds to deleteFamily (with
or without timestamp as above)
- A single ColumnMutation with empty value, non-empty family and non-empty member corresponds
to current batchUpdate delete behavior
- Multiple ColumnMutations with empty value can delete multiple families or multiple members.

Thus commit replaces current commit, deleteAll and deleteFamily.



> Improve the current client API by creating new container classes
> ----------------------------------------------------------------
>
>                 Key: HBASE-880
>                 URL: https://issues.apache.org/jira/browse/HBASE-880
>             Project: Hadoop HBase
>          Issue Type: Improvement
>          Components: client
>            Reporter: Jean-Daniel Cryans
>            Assignee: Jean-Daniel Cryans
>             Fix For: 0.19.0
>
>         Attachments: hbase-880-v1.patch, hbase-880-v2.patch
>
>
> The current API does not scale very well. For each new feature, we have to add many methods
to take care of all the overloads. Also, the need to batch row operations (gets, inserts,
deletes) implies that we have to manage some "entities" like we are able to do with BatchUpdate
but not with the other operations. The RowLock should be an attribute of such an entity.
> The scope of this jira is only to replace current API with another feature-compatible
one, other methods will be added in other issues.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message