This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.nosql.couchbase-resourceprovider-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-nosql-couchbase-resourceprovider.git
commit 7d143cb78f8468507a680e4ce5ca8c247735e3a7 Author: Stefan Seifert <[email protected]> AuthorDate: Thu Sep 17 06:00:21 2015 +0000 SLING-4381/SLING-5024 for query efficiency on listChildren store parentPath as separate attribute git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/nosql/couchbase-resourceprovider@1703494 13f79535-47bb-0310-9956-ffa450edef68 --- .../impl/CouchbaseNoSqlAdapter.java | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java b/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java index 5a699a9..d7730e9 100644 --- a/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java +++ b/src/main/java/org/apache/sling/nosql/couchbase/resourceprovider/impl/CouchbaseNoSqlAdapter.java @@ -19,11 +19,14 @@ package org.apache.sling.nosql.couchbase.resourceprovider.impl; import static com.couchbase.client.java.query.Select.select; +import static com.couchbase.client.java.query.dsl.Expression.s; +import static com.couchbase.client.java.query.dsl.Expression.x; import java.util.Iterator; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; +import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.nosql.couchbase.client.CouchbaseClient; import org.apache.sling.nosql.couchbase.client.CouchbaseKey; import org.apache.sling.nosql.generic.adapter.AbstractNoSqlAdapter; @@ -34,6 +37,7 @@ import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; import com.couchbase.client.java.error.DocumentAlreadyExistsException; +import com.couchbase.client.java.query.Index; import com.couchbase.client.java.query.N1qlParams; import com.couchbase.client.java.query.N1qlQuery; import com.couchbase.client.java.query.N1qlQueryResult; @@ -45,15 +49,9 @@ import com.couchbase.client.java.query.consistency.ScanConsistency; */ public final class CouchbaseNoSqlAdapter extends AbstractNoSqlAdapter { - /** - * Property holding path - */ - public static final String PN_PATH = "path"; - - /** - * Property holding properties data - */ - public static final String PN_DATA = "data"; + private static final String PN_PATH = "path"; + private static final String PN_PARENT_PATH = "parentPath"; + private static final String PN_DATA = "data"; private final CouchbaseClient couchbaseClient; private final String cacheKeyPrefix; @@ -64,9 +62,9 @@ public final class CouchbaseNoSqlAdapter extends AbstractNoSqlAdapter { this.couchbaseClient = couchbaseClient; this.cacheKeyPrefix = cacheKeyPrefix; - // make sure primary index is present - ignore error if it is already present - Bucket bucket = couchbaseClient.getBucket(); - bucket.query(N1qlQuery.simple("CREATE PRIMARY INDEX ON " + couchbaseClient.getBucketName())); + // make sure primary index and index on parentPath is present - ignore error if it is already present + Index.createPrimaryIndex().on(couchbaseClient.getBucketName()); + Index.createIndex(PN_PARENT_PATH).on(couchbaseClient.getBucketName(), x(PN_PARENT_PATH)); } @Override @@ -97,10 +95,9 @@ public final class CouchbaseNoSqlAdapter extends AbstractNoSqlAdapter { public Iterator<NoSqlData> getChildren(String parentPath) { Bucket bucket = couchbaseClient.getBucket(); // fetch all direct children of this path - Pattern directChildren = Pattern.compile("^" + StringUtils.removeEnd(parentPath, "/") + "/[^/]+$"); N1qlQuery query = N1qlQuery.simple(select("*") .from(couchbaseClient.getBucketName()) - .where("REGEXP_LIKE(`" + PN_PATH + "`, '" + directChildren.pattern() + "')"), + .where(x(PN_PARENT_PATH).eq(s(parentPath))), N1QL_PARAMS); N1qlQueryResult queryResult = bucket.query(query); handleQueryError(queryResult); @@ -136,6 +133,12 @@ public final class CouchbaseNoSqlAdapter extends AbstractNoSqlAdapter { envelope.put(PN_PATH, data.getPath()); envelope.put(PN_DATA, JsonObject.from(data.getProperties(MultiValueMode.LISTS))); + // for list-children query efficiency store parent path as well + String parentPath = ResourceUtil.getParent(data.getPath()); + if (parentPath != null) { + envelope.put(PN_PARENT_PATH, parentPath); + } + JsonDocument doc = JsonDocument.create(cacheKey, envelope); try { bucket.insert(doc); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
