That's what I did and works fine !
On Mon, Feb 14, 2011 at 2:10 AM, Something Something <
[email protected]> 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