That's what I did and works fine !

On Mon, Feb 14, 2011 at 2:10 AM, Something Something <
mailinglist...@gmail.com> wrote:

> Hello,
>
> Can you please tell me if this is the proper way of designing a table
> that's
> got an auto increment key?  If there's a better way please let me know that
> as well.
>
> After reading the mail archives, I learned that the best way is to use the
> 'incrementColumnValue' method of HTable.
>
> So hypothetically speaking let's say I have to create a "User -> Orders"
> relationship.  Every time user creates an order we will assign a system
> generated (auto increment) id as primary key for the order.
>
> I am thinking I could do this:
>
> 1)  Create a table of Ids for various objects such as "Order".  It will
> have
> just a single row with key "1" and column families for various objects.
>  When it's time to add a new order for a user I can do something like this:
>
> HTable tableIds = new HTable("IDs");
> Get get = new Get(Bytes.toBytes("1"));
> Result result = tableIds.get(get);
> long newOrderId = tableIds.incrementColumnValue(result.getRow(), "orders",
> "orderId", 1);
>
> // In future I could use the same table for other objects as follows
> // long newInvoiceId = tableIds.incrementColumnValue(result.getRow(),
> "invoices", "invoiceId", 1);
>
> 2)  Once the newOrderId is retrieved I can add the info about order to
> UserOrder table with a key of format:  userId + "*" + newOrderId.  The
> "info" family of this table will have columns such as "orderAmount" ,
> "orderDate" etc.
>
>
> As per the documentation, the 'incrementColumnValue' is done in exclusive
> and serial fashion for each row with a rowlock.  In other words, even in
> multi-threading environment we are guaranteed to get a unique key per
> thread, correct?
>
> Is this a correct/good design for a table that needs auto increment key?
>  Please let me know.  Thanks.
>



-- 
Thanks & Best regards
jiajun

Reply via email to