hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Hsieh <...@cloudera.com>
Subject Re: Why only check1-and-putMany and check1-and-deleteMany?
Date Thu, 29 Nov 2012 20:32:58 GMT
The piece that I'm assuming from my previous comment is that the checks and
mutations are *all on the same row* and that all this happens *atomically*.
 This is in line with Mike Spreitzer's earlier post.

I'm hacking on something that needs to check two conditions and if
successful does some deletes and puts.

Jon.

On Thu, Nov 29, 2012 at 11:59 AM, Mike Spreitzer <mspreitz@us.ibm.com>wrote:

> I would not suggest that a single composite operation should be able to
> access multiple rows.  What I expect would be easy is an arbitrary set of
> accesses to one row.
>
> The use case is optimistic concurrency control.  In scenarios where
> conflicts are rare, you can get reasonably efficient serializable
> transactions (where one transaction can do arbitrary pointwise accesses to
> a single row) by using a general test-and-set operation.  There is some
> non-trivial stuff the client has to do, but a general single-row
> test-and-set is the only missing piece of HTable functionality.
>
> Mike
>
>
>
> From:   Michel Segel <michael_segel@hotmail.com>
> To:     "user@hbase.apache.org" <user@hbase.apache.org>
> Cc:     "user@hbase.apache.org" <user@hbase.apache.org>
> Date:   11/29/2012 02:46 PM
> Subject:        Re: Why only check1-and-putMany and check1-and-deleteMany?
>
>
>
> Silly question...
> Why?
>
> I mean while it is technically feasible to do, can you come up with a use
> case and then show how it is better than the alternatives?
>
>
>
> Sent from a remote device. Please excuse any typos...
>
> Mike Segel
>
> On Nov 29, 2012, at 12:44 PM, Jonathan Hsieh <jon@cloudera.com> wrote:
>
> > Actually, I think we'd want to have repeated Conditions in to have
> multiple
> > check predicates, and would want to add repeated Conditions to multi
> > requests.
> >
> > This would let us have arbitrary number of checks and arbitrary number
> of
> > puts and deletes from an API point of view.
> >
> > Jon.
> >
> > On Mon, Nov 19, 2012 at 10:55 AM, Ted Yu <yuzhihong@gmail.com> wrote:
> >
> >> Looking at hbase-server/src/main/protobuf/Client.proto in trunk, I
> tried
> >> the following formation to see if we can pass more than one qualifier:
> >>
> >> Index: hbase-server/src/main/protobuf/Client.proto
> >> ===================================================================
> >> --- hbase-server/src/main/protobuf/Client.proto    (revision 1411337)
> >> +++ hbase-server/src/main/protobuf/Client.proto    (working copy)
> >> @@ -97,7 +97,7 @@
> >> message Condition {
> >>   required bytes row = 1;
> >>   required bytes family = 2;
> >> -  required bytes qualifier = 3;
> >> +  repeated bytes qualifier = 3;
> >>   required CompareType compareType = 4;
> >>   required Comparator comparator = 5;
> >> }
> >>
> >> protoc is able to compile the above code.
> >> This means we can potentially compare more than one qualifier in the
> check
> >> step.
> >>
> >> More discussion is needed to figure out the proper API which would be a
> >> superset of what we have today:
> >>  public boolean checkAndPut(final byte [] row,
> >>      final byte [] family, final byte [] qualifier, final byte []
> value,
> >>      final Put put)
> >>
> >> Cheers
> >>
> >> On Sat, Nov 17, 2012 at 10:28 PM, Mike Spreitzer <mspreitz@us.ibm.com
> >>> wrote:
> >>
> >>> I am not looking at the trunk.  I am just a user looking at the
> interface
> >>> documented on the web site and wondering why the atomic composite
> >>> functionality is so limited.  It is not hard to imagine an expanded
> >>> interface that allows checking an arbitrary set of columns and, if
> each
> >>> has a value specified for it, doing an arbitrary set of Mutations.
> >>>
> >>> Thanks,
> >>> Mike
> >>>
> >>>
> >>>
> >>> From:   Ted Yu <yuzhihong@gmail.com>
> >>> To:     user@hbase.apache.org
> >>> Date:   11/17/2012 11:44 PM
> >>> Subject:        Re: Why only check1-and-putMany and
> >> check1-and-deleteMany?
> >>>
> >>>
> >>>
> >>> Are you looking at trunk code ?
> >>>
> >>> In trunk, take a look at HRegion.checkAndMutate() where you can
> specify
> >>> ByteArrayComparable which does the comparison (matching).
> >>> There is still the limit of single value:
> >>>        } else if (result.size() == 1 && !valueIsNull) {
> >>>          KeyValue kv = result.get(0);
> >>>
> >>> For the moment, only Put and Delete are supported:
> >>>
> >>>    if (!isPut && !(w instanceof Delete))
> >>>      throw new DoNotRetryIOException("Action must be Put or Delete");
> >>> If you have suggestion on how the check part can be more general,
> please
> >>> comment.
> >>>
> >>> Thanks
> >>>
> >>> On Sat, Nov 17, 2012 at 7:30 PM, Mike Spreitzer <mspreitz@us.ibm.com>
> >>> wrote:
> >>>
> >>>> If I understand correctly, an HTable has two composite atomic
> >>> operations,
> >>>> checkAndPut and checkAndDelete.  The check part checks just a single
> >>>> column's value.  Why not allow checking more than one column?
> >>>>
> >>>> Why no checkAndAppend?
> >>>>
> >>>> The checkAndPut operation can put to multiple columns, right?  And
> the
> >>>> checkAndDelete operation can delete multiple columns, right?  Why not
> >>> let
> >>>> them be mixed?  Why not checkAndMutate?
> >>>>
> >>>> Thanks!
> >>>> Mike
> >
> >
> >
> > --
> > // Jonathan Hsieh (shay)
> > // Software Engineer, Cloudera
> > // jon@cloudera.com
>
>
>


-- 
// Jonathan Hsieh (shay)
// Software Engineer, Cloudera
// jon@cloudera.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message