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]>