Luo Chen has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2658

Change subject: [ASTERIXDB-2392][COMP] Skip type checking in index comparators
......................................................................

[ASTERIXDB-2392][COMP] Skip type checking in index comparators

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Use special binary comparators for LSM index keys which skip type
checking to improve comparasion (especially priority queue merge) performance.

Change-Id: I31f03295b4ed55b1f108b7e29f0e5ef700371089
---
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/BTreeResourceFactoryProvider.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
3 files changed, 11 insertions(+), 12 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/58/2658/1

diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/BTreeResourceFactoryProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/BTreeResourceFactoryProvider.java
index 301aafb..d9b53b2 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/BTreeResourceFactoryProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/BTreeResourceFactoryProvider.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.indexing.FilesIndexDescription;
 import org.apache.asterix.external.indexing.IndexingConstants;
+import org.apache.asterix.formats.nontagged.BinaryComparatorFactoryProvider;
 import org.apache.asterix.metadata.api.IResourceFactoryProvider;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.Index;
@@ -36,7 +37,6 @@
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
-import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.algebricks.data.ITypeTraitProvider;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ITypeTraits;
@@ -149,8 +149,6 @@
         }
         int numPrimaryKeys = dataset.getPrimaryKeys().size();
         int numSecondaryKeys = index.getKeyFieldNames().size();
-        IBinaryComparatorFactoryProvider cmpFactoryProvider =
-                
metadataProvider.getStorageComponentProvider().getComparatorFactoryProvider();
         IBinaryComparatorFactory[] secondaryCmpFactories =
                 new IBinaryComparatorFactory[numSecondaryKeys + 
numPrimaryKeys];
         for (int i = 0; i < numSecondaryKeys; i++) {
@@ -164,7 +162,8 @@
             Pair<IAType, Boolean> keyTypePair = 
Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(i),
                     index.getKeyFieldNames().get(i), sourceType);
             IAType keyType = keyTypePair.first;
-            secondaryCmpFactories[i] = 
cmpFactoryProvider.getBinaryComparatorFactory(keyType, true);
+            secondaryCmpFactories[i] =
+                    
BinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(keyType.getTypeTag(),
 true);
         }
         // Add serializers and comparators for primary index fields.
         for (int i = 0; i < numPrimaryKeys; i++) {
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
index 2975972..9113136 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
@@ -45,6 +45,7 @@
 import org.apache.asterix.common.utils.StoragePathUtil;
 import org.apache.asterix.external.feed.management.FeedConnectionId;
 import org.apache.asterix.external.indexing.IndexingConstants;
+import org.apache.asterix.formats.nontagged.BinaryComparatorFactoryProvider;
 import org.apache.asterix.formats.nontagged.BinaryHashFunctionFactoryProvider;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.formats.nontagged.TypeTraitProvider;
@@ -88,7 +89,6 @@
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
-import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.algebricks.data.ISerializerDeserializerProvider;
 import org.apache.hyracks.algebricks.data.ITypeTraitProvider;
 import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
@@ -777,8 +777,6 @@
      */
     public IBinaryComparatorFactory[] 
getPrimaryComparatorFactories(MetadataProvider metadataProvider,
             ARecordType recordType, ARecordType metaType) throws 
AlgebricksException {
-        IStorageComponentProvider storageComponentProvider = 
metadataProvider.getStorageComponentProvider();
-        IBinaryComparatorFactoryProvider cmpFactoryProvider = 
storageComponentProvider.getComparatorFactoryProvider();
         List<List<String>> partitioningKeys = getPrimaryKeys();
         int numPrimaryKeys = partitioningKeys.size();
         IBinaryComparatorFactory[] cmpFactories = new 
IBinaryComparatorFactory[numPrimaryKeys];
@@ -790,7 +788,10 @@
             IAType keyType =
                     (indicators == null || indicators.get(i) == 0) ? 
recordType.getSubFieldType(partitioningKeys.get(i))
                             : 
metaType.getSubFieldType(partitioningKeys.get(i));
-            cmpFactories[i] = 
cmpFactoryProvider.getBinaryComparatorFactory(keyType, true);
+            // since primary keys all have fixed types
+            // we can use a more efficient comparator without checking type 
tags
+            cmpFactories[i] =
+                    
BinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(keyType.getTypeTag(),
 true);
         }
         return cmpFactories;
     }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
index 08f8b7d..0155176 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/RTreeResourceFactoryProvider.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.indexing.IndexingConstants;
+import org.apache.asterix.formats.nontagged.BinaryComparatorFactoryProvider;
 import org.apache.asterix.metadata.api.IResourceFactoryProvider;
 import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.metadata.entities.Dataset;
@@ -40,7 +41,6 @@
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
-import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.algebricks.data.ITypeTraitProvider;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ILinearizeComparatorFactory;
@@ -223,8 +223,6 @@
 
     private static IBinaryComparatorFactory[] getCmpFactories(MetadataProvider 
metadataProvider, Index index,
             ARecordType recordType, ARecordType metaType) throws 
AlgebricksException {
-        IBinaryComparatorFactoryProvider cmpFactoryProvider =
-                
metadataProvider.getStorageComponentProvider().getComparatorFactoryProvider();
         List<List<String>> secondaryKeyFields = index.getKeyFieldNames();
         int numSecondaryKeys = secondaryKeyFields.size();
         if (numSecondaryKeys != 1) {
@@ -250,7 +248,8 @@
         IBinaryComparatorFactory[] secondaryComparatorFactories =
                 new IBinaryComparatorFactory[numNestedSecondaryKeyFields];
         for (int i = 0; i < numNestedSecondaryKeyFields; i++) {
-            secondaryComparatorFactories[i] = 
cmpFactoryProvider.getBinaryComparatorFactory(nestedKeyType, true);
+            secondaryComparatorFactories[i] = 
BinaryComparatorFactoryProvider.INSTANCE
+                    .getBinaryComparatorFactory(nestedKeyType.getTypeTag(), 
true);
         }
         return secondaryComparatorFactories;
     }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2658
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I31f03295b4ed55b1f108b7e29f0e5ef700371089
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Luo Chen <[email protected]>

Reply via email to