ZK is designed to be highly performant. Probably you can test after finalizing your client side algo.
Also, you can try multi API to group operations and send as a single request to the server. It helps to reduce client to server interactions. Like, op.delete(/writer/my_current1); ops.add(op); op.create(/writer/my_current2); ops.add(op); zk.multi(ops); AFAIK there is no discussions related to renaming znode. Regards, Rakesh On Tue, Jun 17, 2014 at 2:10 PM, Mudit Verma <[email protected]> wrote: > Thanks Rakesh. I will have to something like that, but I am quite > concerned about the performance issues. > > BTW, are you aware if this renaming functionality is planned for future > releases? > > Thanks > Mudit > > On 16 Jun 2014, at 04:30 pm, Rakesh R <[email protected]> wrote: > > > Hey Mudit, > > > > Renaming is not possible. > > > > Secondly, do you mean all these entries are at same level, under > /map_current znode? > > I'd prefer multiple levels instead of having too many direct children of > a single znode. ZOOKEEPER-1162 is one such example case study of too many > children. > > > > /map_current/entry1 > > /map_current/entry2 > > ... > > /map_current/entryn > > > > > > I think, JZ is suggesting the following way: > > > > Step1) Get all the children of /map_current // first, get all the > children(number of op depends on the levels) > > > > Step2) Prepare list of transactions and submit to the server //second > op > > - create /map_frozen/entry1....create /map_frozen/entryn. Ops > should be ordered like, create parent to child. > > - delete /map_current/entry1...delete /map_current/entryn. Delete > in reverse way from child to parent. > > > > Multi send these ops as a single request, but if we have millions of ops > in a single req it can make the request too heavy. I haven't tested though. > > > > > ---------------------------------------------------------------------------------------------------------------------------------------------------- > > > > I'm thinking an alternate approach to avoid the bulk delete and > creation. Does this work for you? > > > > /writer/my_current1 -> Clients will always look here and get the > 'current writer' node. Now he can create entries as follows. > > > > /my_current1/my_entry1..../my_current1/my_entryn > > > > Now I wanted to frozen /my_current1. Just delete my_current1 from > /writer/my_current1 and create new writer znode /writer/my_current2. > > Now clients will see /writer/my_current2 and write entries to this. > > > > > > Regards, > > Rakesh > > > > -----Original Message----- > > From: Mudit Verma [mailto:[email protected]] > > Sent: 16 June 2014 19:40 > > To: Jordan Zimmerman > > Cc: Camille Fournier; [email protected] > > Subject: Re: renaming a znode > > > > I just realised that we can not even delete a parent node, if it has > children. :( > > > > > > On 16 Jun 2014, at 03:43 pm, Mudit Verma <[email protected]> > wrote: > > > >> problem is, it is going to be a very very costly operation (using multi > transactions). A map may contain millions of entries. I first need to get > the data of all these entries, delete them and create them again under > different parent name. > >> > >> If we have a rename option, all I need to do is just rename the parent > znode. > >> > >> Thanks > >> Mudit > >> On 16 Jun 2014, at 03:42 pm, Jordan Zimmerman < > [email protected]> wrote: > >> > >>> Yeah > >>> > >>> > >>> From: Camille Fournier [email protected] > >>> Reply: [email protected] [email protected] > >>> Date: June 16, 2014 at 8:42:19 AM > >>> To: [email protected] [email protected] > >>> Cc: Mudit Verma [email protected] > >>> Subject: Re: renaming a znode > >>> > >>>> Just to clarify you mean the multi API? > >>>> C > >>>> On Jun 16, 2014 9:40 AM, "Jordan Zimmerman" > >>>> <[email protected]> > >>>> wrote: > >>>> > >>>>> You could use the transaction api to create a new node and delete > >>>>> the old node. > >>>>> > >>>>> -JZ > >>>>> > >>>>> > >>>>> From: Mudit Verma [email protected] > >>>>> Reply: [email protected] [email protected] > >>>>> Date: June 16, 2014 at 8:38:11 AM > >>>>> To: [email protected] [email protected] > >>>>> Subject: renaming a znode > >>>>> > >>>>> Hello People, > >>>>> > >>>>> Sorry for asking many questions these days. :) > >>>>> > >>>>> I am wondering if it is possible to rename a znode? I am building > >>>>> a distributed map on top of zookeeper for special needs. From time > >>>>> to time, I need to freeze the map without restricting write access > to the map. > >>>>> > >>>>> I plan to do it by maintaining two maps: > >>>>> > >>>>> map_current > >>>>> map_frozen > >>>>> > >>>>> all the map entries are maintained as separate children znodes > >>>>> where key is the name of the child node and value is the value > >>>>> stored on the child node .. > >>>>> for example /map_current/entry1(kv) > >>>>> /map_current/entry2(kv) > >>>>> > >>>>> > >>>>> Now at some point of time, I need to iterate the map while still > >>>>> allowing write access by other clients. While I iterate, I don't > >>>>> want other clients to see these entries. Once I process map_frozen > >>>>> entries I will delete them (I don't need them anymore) by just > deleting the parent node. > >>>>> > >>>>> I plan to rename existing map from map_current to map_frozen and > >>>>> create new map as map_current with empty data for further writes. > >>>>> Other clients will continue to write new entries in map_current .. > so on so forth .. > >>>>> > >>>>> Any suggestions on how can I do it efficiently. > >>>>> > >>>>> Thanks > >>>>> Mudit > >> > > > >
