diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e7d8cb..24a5666 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ project(InvoDB) set(CMAKE_CXX_STANDARD 14) + include_directories(.) include_directories(./invodb) diff --git a/invodb/btree/btree_node.cpp b/invodb/btree/btree_node.cpp index f90790e..f73cb59 100644 --- a/invodb/btree/btree_node.cpp +++ b/invodb/btree/btree_node.cpp @@ -11,6 +11,9 @@ NodeUUID *NodeUUID::getNode(const int &address) { delete map[address]; map[address] = new NodeUUID(address); } +// if(map.count(address) == 0) { +// map[address] = new NodeUUID(address); +// } return map[address]; } diff --git a/invodb/btree/btree_node.h b/invodb/btree/btree_node.h index d060a1b..534b375 100644 --- a/invodb/btree/btree_node.h +++ b/invodb/btree/btree_node.h @@ -29,7 +29,7 @@ public: void clear(); void save(); //static const int m = 27; - static const int m = 3; + static const int m = 27; static const int maxCount = m - 1; static const int minLeafCount = m / 2; static const int minLinkCount = (m - 1) / 2; diff --git a/invodb/btree/btree_uuid.cpp b/invodb/btree/btree_uuid.cpp index a1df79c..255ffa9 100644 --- a/invodb/btree/btree_uuid.cpp +++ b/invodb/btree/btree_uuid.cpp @@ -243,7 +243,7 @@ void BTreeUUID::remove(const std::string &uuid) { } void BTreeUUID::removeEntry(int curAddr, const std::string& uuid, const int& pointer) { - printf("---removeEntry: %d %s %d\n", curAddr, uuid.c_str(), pointer); + //printf("---removeEntry: %d %s %d\n", curAddr, uuid.c_str(), pointer); NodeUUID* cur = NodeUUID::getNode(curAddr); int pos = cur->findPos(uuid); @@ -270,7 +270,7 @@ void BTreeUUID::removeEntry(int curAddr, const std::string& uuid, const int& poi if(cur->enough() || cur->address == root) return; - printf("em %d %d\n", cur->address, cur->size); + //printf("em %d %d\n", cur->address, cur->size); if(canCoalesce(cur->address, cur->left)) { @@ -297,7 +297,7 @@ bool BTreeUUID::canCoalesce(int curAddr, int sibAddr) { void BTreeUUID::coalesce(int curAddr, int sibAddr) { - printf("coalesce %d and %d\n", curAddr, sibAddr); + //printf("coalesce %d and %d\n", curAddr, sibAddr); NodeUUID* cur = NodeUUID::getNode(curAddr); NodeUUID* sib = NodeUUID::getNode(sibAddr); @@ -364,7 +364,7 @@ bool BTreeUUID::canRedistribute(int curAddr, int sibAddr) { void BTreeUUID::redistribute(int curAddr, int sibAddr) { - printf("redistribute %d from %d\n", curAddr, sibAddr); + //printf("redistribute %d from %d\n", curAddr, sibAddr); NodeUUID* cur = NodeUUID::getNode(curAddr); NodeUUID* sib = NodeUUID::getNode(sibAddr); diff --git a/invodb/file/page_manager.h b/invodb/file/page_manager.h index c90576f..859a3b1 100644 --- a/invodb/file/page_manager.h +++ b/invodb/file/page_manager.h @@ -7,6 +7,7 @@ #include #include +#include #include "storage_page.h" @@ -22,6 +23,7 @@ public: int allocate(); void free(const int &index); private: + std::map map; std::fstream stream; // 私有化实现单例 PageManager() {} diff --git a/invodb/file/storage_page.cpp b/invodb/file/storage_page.cpp index 784dd2b..9dc3913 100644 --- a/invodb/file/storage_page.cpp +++ b/invodb/file/storage_page.cpp @@ -57,3 +57,7 @@ int StoragePage::getAddress() { return address; } +StoragePage::StoragePage() { + +} + diff --git a/invodb/file/storage_page.h b/invodb/file/storage_page.h index 90b902a..23a678f 100644 --- a/invodb/file/storage_page.h +++ b/invodb/file/storage_page.h @@ -13,6 +13,7 @@ class PageManager; class StoragePage { public: + StoragePage(); void print(); int next(); void setNext(const int& nextPage); diff --git a/invodb/main.cpp b/invodb/main.cpp index c84521f..a03f179 100644 --- a/invodb/main.cpp +++ b/invodb/main.cpp @@ -11,7 +11,7 @@ void benchmark() { std::vector> v; - const int n = 1000000; + const int n = 100000; for(int i=0; iinsert(uuid, addr); } - for(int i=0; i<1000000; i++) { + for(int i=0; i<100000; i++) { std::swap(v[rand()%v.size()], v[rand()%v.size()]); } for(int i=0; ifind(v[0].first); - if(addr != v[0].second) { + int addr = btree->find(v[i].first); + if(addr != v[i].second) { printf("fuck\n"); exit(0); } } + + for(int i=0; iremove(v[i].first); + } else { + int addr = btree->find(v[i].first); + if(addr != v[i].second) { + printf("fuck\n"); + exit(0); + } + } + } } int main() { diff --git a/invodb/models/collection.cpp b/invodb/models/collection.cpp index 7aa8a7d..f79274a 100644 --- a/invodb/models/collection.cpp +++ b/invodb/models/collection.cpp @@ -70,8 +70,6 @@ Collection& Collection::createCollection(const std::string &name) { page.print(); page.save(); - - Collection *col = new Collection(name, collectionPage); map.insert(make_pair(name, col));