ORC-574: Use const references for string statistics.
A large portion of cpu in write scenarios is being used in std::string
alloc/delete due to the getMaximum/Minimum returning std:string
copies. Changing the getMaximum/getMinimum methods to return const
vals will prevent these alloc/copy/deletes from occurring.
This results in about a 30% cpu boost to write.
Fixes #574
Signed-off-by: Owen O'Malley <omalley@apache.org>
diff --git a/c++/include/orc/Statistics.hh b/c++/include/orc/Statistics.hh
index 654956d..1d4b0b6 100644
--- a/c++/include/orc/Statistics.hh
+++ b/c++/include/orc/Statistics.hh
@@ -282,13 +282,13 @@
* Get the minimum value for the column.
* @return minimum value
*/
- virtual std::string getMinimum() const = 0;
+ virtual const std::string & getMinimum() const = 0;
/**
* Get the maximum value for the column.
* @return maximum value
*/
- virtual std::string getMaximum() const = 0;
+ virtual const std::string & getMaximum() const = 0;
/**
* Get the total length of all values.
diff --git a/c++/src/Statistics.hh b/c++/src/Statistics.hh
index 0daddfe..633450f 100644
--- a/c++/src/Statistics.hh
+++ b/c++/src/Statistics.hh
@@ -94,7 +94,7 @@
// GET / SET _maximum
bool hasMaximum() const { return _hasMaximum; }
- T getMaximum() const { return _maximum; }
+ const T & getMaximum() const { return _maximum; }
void setHasMaximum(bool hasMax) { _hasMaximum = hasMax; }
@@ -105,7 +105,7 @@
void setHasMinimum(bool hasMin) { _hasMinimum = hasMin; }
- T getMinimum() const { return _minimum; }
+ const T & getMinimum() const { return _minimum; }
void setMinimum(T min) { _minimum = min; }
@@ -1077,7 +1077,7 @@
_stats.setHasNull(hasNull);
}
- std::string getMinimum() const override {
+ const std::string & getMinimum() const override {
if(hasMinimum()){
return _stats.getMinimum();
}else{
@@ -1085,7 +1085,7 @@
}
}
- std::string getMaximum() const override {
+ const std::string & getMaximum() const override {
if(hasMaximum()){
return _stats.getMaximum();
}else{