[prev in list] [next in list] [prev in thread] [next in thread]
List: rhq-devel
Subject: Re: Optimization of descendent resource queries
From: Jay Shaughnessy <jshaughn () redhat ! com>
Date: 2014-02-25 3:19:43
Message-ID: 530C0BCF.6000005 () redhat ! com
[Download RAW message or body]
Looks like I have the stuff working. I need to do a little more testing
and should commit to master tomorrow. Thanks!
On 2/24/2014 9:14 AM, Jay Shaughnessy wrote:
>
> Good stuff, I am also doing this, I spent some time on Friday and have
> the first query working (QUERY_FIND_DESCENDANTS). I like the simpler
> Oracle syntax, although it's nice that you also found that Oracle
> supports almost a common syntax. The Postgres query I came up with
> is similar to yours. Here are the two I'm using currently.
>
> public static final String QUERY_NATIVE_FIND_DESCENDANTS_ORACLE =
> "" //
> + " SELECT r.id " //
> + " FROM rhq_resource r " //
> + " START WITH r.id = ? " //
> + " CONNECT BY PRIOR r.id = r.parent_resource_id ";
>
> public static final String QUERY_NATIVE_FIND_DESCENDANTS_POSTGRES
> = "" //
> + " WITH RECURSIVE childResource AS " //
> + " ( " //
> + " SELECT id FROM rhq_resource WHERE id = ? " //
> non-recursive term
> + " UNION ALL " //
> + " SELECT r.id " // recursive term
> + " FROM rhq_resource AS r " //
> + " JOIN childResource AS cr " //
> + " ON (r.parent_resource_id = cr.id) " //
> + " ) " //
> + " SELECT id " //
> + " FROM childResource ";
>
> If you post the patch I'll combine what we have...
>
> Jay
>
>
> On 2/21/2014 4:53 PM, Elias Ross wrote:
>> On Fri, Feb 21, 2014 at 12:09 PM, Jay Shaughnessy
>> <jshaughn@redhat.com> wrote:
>>> I'm going to look into making these changes...
>> I updated the bug, but I already finished my changes, tested on Oracle
>> (more than 10x speed improvement), and I have a patch to give, it just
>> needs to be approved by Apple.
>>
>> Spoiler:
>>
>> Not to give too much away, but I actually figured out how to do this
>> on both systems and have the query almost the same.
>>
>> For Oracle:
>> + + "WITH children(resource_id) AS (" // note no RECURSIVE
>> keyword
>> + + "SELECT id FROM rhq_resource WHERE parent_resource_id =
>> :resourceId "
>> + + "UNION ALL "
>> + + "SELECT r.id FROM children c, rhq_resource r WHERE
>> r.parent_resource_id = c.resource_id) "
>> + + "SELECT resource_id FROM children"
>>
>> For PostGres:
>> + + "WITH RECURSIVE children(resource_id) AS ("
>> + + "SELECT id FROM rhq_resource WHERE parent_resource_id =
>> :resourceId "
>> + + "UNION ALL "
>> + + "SELECT r.id FROM children c, rhq_resource r WHERE
>> r.parent_resource_id = c.resource_id) "
>> + + "SELECT resource_id FROM children"
>>
>> The one unfixed query I'm missing is for matching resource name and
>> type, used when an alert is triggered, causing an operation to fire.
>> You can add additional columns (like name and type) for these queries,
>> but they aren't used in all contexts. I suppose ideally you would just
>> query the entire resource itself, but then each native query has to
>> include every single column name for rhq_resource, which I wasn't
>> interested in doing.
>> _______________________________________________
>> rhq-devel mailing list
>> rhq-devel@lists.fedorahosted.org
>> https://lists.fedorahosted.org/mailman/listinfo/rhq-devel
>
> _______________________________________________
> rhq-devel mailing list
> rhq-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/rhq-devel
_______________________________________________
rhq-devel mailing list
rhq-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/rhq-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic