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