mirror of
https://github.com/google/leveldb.git
synced 2024-12-28 04:00:09 +08:00
ccf0fcd5c2
- 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
108 lines
2.9 KiB
C++
108 lines
2.9 KiB
C++
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
|
|
#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
|
|
#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
|
|
|
|
#include <set>
|
|
#include <utility>
|
|
#include <vector>
|
|
#include "db/dbformat.h"
|
|
|
|
namespace leveldb {
|
|
|
|
class VersionSet;
|
|
|
|
struct FileMetaData {
|
|
int refs;
|
|
int allowed_seeks; // Seeks allowed until compaction
|
|
uint64_t number;
|
|
uint64_t file_size; // File size in bytes
|
|
InternalKey smallest; // Smallest internal key served by table
|
|
InternalKey largest; // Largest internal key served by table
|
|
|
|
FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) { }
|
|
};
|
|
|
|
class VersionEdit {
|
|
public:
|
|
VersionEdit() { Clear(); }
|
|
~VersionEdit() { }
|
|
|
|
void Clear();
|
|
|
|
void SetComparatorName(const Slice& name) {
|
|
has_comparator_ = true;
|
|
comparator_ = name.ToString();
|
|
}
|
|
void SetLogNumber(uint64_t num) {
|
|
has_log_number_ = true;
|
|
log_number_ = num;
|
|
}
|
|
void SetPrevLogNumber(uint64_t num) {
|
|
has_prev_log_number_ = true;
|
|
prev_log_number_ = num;
|
|
}
|
|
void SetNextFile(uint64_t num) {
|
|
has_next_file_number_ = true;
|
|
next_file_number_ = num;
|
|
}
|
|
void SetLastSequence(SequenceNumber seq) {
|
|
has_last_sequence_ = true;
|
|
last_sequence_ = seq;
|
|
}
|
|
void SetCompactPointer(int level, const InternalKey& key) {
|
|
compact_pointers_.push_back(std::make_pair(level, key));
|
|
}
|
|
|
|
// Add the specified file at the specified number.
|
|
// REQUIRES: This version has not been saved (see VersionSet::SaveTo)
|
|
// REQUIRES: "smallest" and "largest" are smallest and largest keys in file
|
|
void AddFile(int level, uint64_t file,
|
|
uint64_t file_size,
|
|
const InternalKey& smallest,
|
|
const InternalKey& largest) {
|
|
FileMetaData f;
|
|
f.number = file;
|
|
f.file_size = file_size;
|
|
f.smallest = smallest;
|
|
f.largest = largest;
|
|
new_files_.push_back(std::make_pair(level, f));
|
|
}
|
|
|
|
// Delete the specified "file" from the specified "level".
|
|
void DeleteFile(int level, uint64_t file) {
|
|
deleted_files_.insert(std::make_pair(level, file));
|
|
}
|
|
|
|
void EncodeTo(std::string* dst) const;
|
|
Status DecodeFrom(const Slice& src);
|
|
|
|
std::string DebugString() const;
|
|
|
|
private:
|
|
friend class VersionSet;
|
|
|
|
typedef std::set< std::pair<int, uint64_t> > DeletedFileSet;
|
|
|
|
std::string comparator_;
|
|
uint64_t log_number_;
|
|
uint64_t prev_log_number_;
|
|
uint64_t next_file_number_;
|
|
SequenceNumber last_sequence_;
|
|
bool has_comparator_;
|
|
bool has_log_number_;
|
|
bool has_prev_log_number_;
|
|
bool has_next_file_number_;
|
|
bool has_last_sequence_;
|
|
|
|
std::vector< std::pair<int, InternalKey> > compact_pointers_;
|
|
DeletedFileSet deleted_files_;
|
|
std::vector< std::pair<int, FileMetaData> > new_files_;
|
|
};
|
|
|
|
}
|
|
|
|
#endif // STORAGE_LEVELDB_DB_VERSION_EDIT_H_
|