summaryrefslogtreecommitdiff
path: root/port
diff options
context:
space:
mode:
authorgabor@google.com <gabor@google.com@62dab493-f737-651d-591e-8d6aee1b9529>2011-06-22 02:36:45 +0000
committergabor@google.com <gabor@google.com@62dab493-f737-651d-591e-8d6aee1b9529>2011-06-22 02:36:45 +0000
commitccf0fcd5c2946f9228068d657a56d91af9671575 (patch)
tree876b8a3e734972320aced5f0b33bf8bc34c5f101 /port
parent80e5b0d944b7651046f8b0e795065eca02a01e59 (diff)
downloadleveldb-ccf0fcd5c2946f9228068d657a56d91af9671575.tar.gz
A number of smaller fixes and performance improvements:
- Implemented Get() directly instead of building on top of a full merging iterator stack. This speeds up the "readrandom" benchmark by up to 15-30%. - Fixed an opensource compilation problem. Added --db=<name> flag to control where the database is placed. - Automatically compact a file when we have done enough overlapping seeks to that file. - Fixed a performance bug where we would read from at least one file in a level even if none of the files overlapped the key being read. - Makefile fix for Mac OSX installations that have XCode 4 without XCode 3. - Unified the two occurrences of binary search in a file-list into one routine. - Found and fixed a bug where we would unnecessarily search the last file when looking for a key larger than all data in the level. - A fix to avoid the need for trivial move compactions and therefore gets rid of two out of five syncs in "fillseq". - Removed the MANIFEST file write when switching to a new memtable/log-file for a 10-20% improvement on fill speed on ext4. - Adding a SNAPPY setting in the Makefile for folks who have Snappy installed. Snappy compresses values and speeds up writes. git-svn-id: https://leveldb.googlecode.com/svn/trunk@32 62dab493-f737-651d-591e-8d6aee1b9529
Diffstat (limited to 'port')
-rw-r--r--port/port_posix.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/port/port_posix.h b/port/port_posix.h
index c158db1..d0b0615 100644
--- a/port/port_posix.h
+++ b/port/port_posix.h
@@ -9,6 +9,9 @@
#include <endian.h>
#include <pthread.h>
+#ifdef SNAPPY
+#include <snappy.h>
+#endif
#include <stdint.h>
#include <string>
#include <cstdatomic>
@@ -72,15 +75,30 @@ class AtomicPointer {
}
};
-// TODO(gabor): Implement actual compress
inline bool Snappy_Compress(const char* input, size_t input_length,
std::string* output) {
+#ifdef SNAPPY
+ output->resize(snappy::MaxCompressedLength(input_length));
+ size_t outlen;
+ snappy::RawCompress(input, input_length, &(*output)[0], &outlen);
+ output->resize(outlen);
+ return true;
+#endif
+
return false;
}
-// TODO(gabor): Implement actual uncompress
inline bool Snappy_Uncompress(const char* input_data, size_t input_length,
std::string* output) {
+#ifdef SNAPPY
+ size_t ulength;
+ if (!snappy::GetUncompressedLength(input_data, ulength, &ulength)) {
+ return false;
+ }
+ output->resize(ulength);
+ return snappy::RawUncompress(input_data, input_length, &(*output)[0]);
+#endif
+
return false;
}