Re: [MongoMK] flag document with children

2013-10-25 Thread Chetan Mehrotra
I have implemented the above logic as part of OAK-1117 [1]. With this
in place number of call made to Mongo on restarts of Adobe CQ goes
down from 42000 to 25000 significantly reducing the startup time when
Mongo is remote!!

regards
Chetan
[1] https://issues.apache.org/jira/browse/OAK-1117
Chetan Mehrotra


On Thu, Oct 24, 2013 at 3:23 PM, Chetan Mehrotra
chetan.mehro...@gmail.com wrote:
 I am trying to prototype an approach. Would come up with a patch for
 this soon. So far I was going with the reverse approach whereby when I
 fetch a node I retrieve some extra child rows [1] in same call to
 determine if it has any children.

 But given that number of read would far exceed number of writes it
 would be better to perform extra update call. I would try to come up
 with a patch for this

 regards
 Chetan
 [1] by adding an or clause to fetch node with id say ^2:/foo/.* to
 fetch child node for a parent with id 1:/foo.
 Chetan Mehrotra


 On Thu, Oct 24, 2013 at 3:08 PM, Thomas Mueller muel...@adobe.com wrote:
 Hi,

 Yes, you are right. It should be relatively easy to implement (low risk).

 Regards,
 Thomas


 On 10/24/13 10:12 AM, Marcel Reutegger mreut...@adobe.com wrote:

 The disadvantage is, when a node is added, either:

 - then the parent needs to be checked whether is already has this flag
set
 (if it is in the cache), or

I'd say a parent node is likely in the cache because oak will read it
first before
it is able to add a child.

 - the parent needs to be updated to set the flag

that's correct. though you only have to do it when it isn't set already.
and
the check should be cheap in most cases, because the node is in the cache.

regards
 marcel




Re: [MongoMK] flag document with children

2013-10-24 Thread Thomas Mueller
Hi,

That sounds good to me.

The disadvantage is, when a node is added, either:

- then the parent needs to be checked whether is already has this flag set
(if it is in the cache), or
- the parent needs to be updated to set the flag

I wouldn't worry too much about resetting the flag, except when deleting
the node with the flag itself.

Regards,
Thomas



On 10/24/13 9:35 AM, Marcel Reutegger mreut...@adobe.com wrote:

Hi,

yesterday Chetan, Thomas and I discussed an access pattern Chetan
saw with the MongoMK. Installing a vlt package shows many reads on
MongoDB for children of nodes that do not have child nodes. these
nodes are the leafs of the tree. due to the current content model,
the MongoMK does not know if a node has children, by just looking
at the NodeDocument for that node. we then quickly discussed that
we could mark the leaf nodes once we discover that it is a leaf.

I was thinking about this a bit more and came to the conclusion that
it is probably better to mark the nodes with children, instead of the
leaf nodes. there are a number of advantages:

- it works better with concurrent writes. once set, it usually does not
change back unless the MongoMK GC actually removes a document
in MongoDB.
- less storage overhead. there are usually fewer parents than leaf nodes.
- it does not have to be 100% accurate. false positives are OK (document
says it has children, but then returns none).

WDYT?

Regards
 Marcel



RE: [MongoMK] flag document with children

2013-10-24 Thread Marcel Reutegger
 The disadvantage is, when a node is added, either:
 
 - then the parent needs to be checked whether is already has this flag set
 (if it is in the cache), or

I'd say a parent node is likely in the cache because oak will read it first 
before
it is able to add a child.

 - the parent needs to be updated to set the flag

that's correct. though you only have to do it when it isn't set already. and
the check should be cheap in most cases, because the node is in the cache.

regards
 marcel



Re: [MongoMK] flag document with children

2013-10-24 Thread Thomas Mueller
Hi,

Yes, you are right. It should be relatively easy to implement (low risk).

Regards,
Thomas


On 10/24/13 10:12 AM, Marcel Reutegger mreut...@adobe.com wrote:

 The disadvantage is, when a node is added, either:
 
 - then the parent needs to be checked whether is already has this flag
set
 (if it is in the cache), or

I'd say a parent node is likely in the cache because oak will read it
first before
it is able to add a child.

 - the parent needs to be updated to set the flag

that's correct. though you only have to do it when it isn't set already.
and
the check should be cheap in most cases, because the node is in the cache.

regards
 marcel




Re: [MongoMK] flag document with children

2013-10-24 Thread Chetan Mehrotra
I am trying to prototype an approach. Would come up with a patch for
this soon. So far I was going with the reverse approach whereby when I
fetch a node I retrieve some extra child rows [1] in same call to
determine if it has any children.

But given that number of read would far exceed number of writes it
would be better to perform extra update call. I would try to come up
with a patch for this

regards
Chetan
[1] by adding an or clause to fetch node with id say ^2:/foo/.* to
fetch child node for a parent with id 1:/foo.
Chetan Mehrotra


On Thu, Oct 24, 2013 at 3:08 PM, Thomas Mueller muel...@adobe.com wrote:
 Hi,

 Yes, you are right. It should be relatively easy to implement (low risk).

 Regards,
 Thomas


 On 10/24/13 10:12 AM, Marcel Reutegger mreut...@adobe.com wrote:

 The disadvantage is, when a node is added, either:

 - then the parent needs to be checked whether is already has this flag
set
 (if it is in the cache), or

I'd say a parent node is likely in the cache because oak will read it
first before
it is able to add a child.

 - the parent needs to be updated to set the flag

that's correct. though you only have to do it when it isn't set already.
and
the check should be cheap in most cases, because the node is in the cache.

regards
 marcel