-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExternalSortTest.cpp
More file actions
93 lines (79 loc) · 3.1 KB
/
ExternalSortTest.cpp
File metadata and controls
93 lines (79 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "HeaderFiles/ExternalSort.h"
#include <cstdlib>
#include <chrono>
#include <iostream>
#include <ctime>
#include <fstream>
uint32_t headerOffset = PAGE_SIZE;
row_t numRows = 10000000;
/// ===> BENCHMARK RESULTS
/// ===============================================
/// Async I/0 || Sync I/0
/// ===============================================
/// Run #1 9.404 || 10.093
/// Run #2 8.673 || 8.913
/// Run #3 8.712 || 9.082
/// ===============================================
void generateDummyData(){
char databaseFile[] = "Mydatabase/table.bin";
int databaseFD = open(databaseFile, O_WRONLY | O_CREAT, S_IRWXU);
std::ofstream generatedFile("generated.txt");
lseek(databaseFD, headerOffset, SEEK_SET);
char c = 'A';
char buffer[PAGE_SIZE] = {0};
int offset = 0;
int rowSize = sizeof(int) + sizeof(int) + sizeof(char) + sizeof(pkey_t);
srand(time(0));
int numRowsPerPage = PAGE_SIZE / rowSize;
int numFullPages = numRows/ numRowsPerPage;
int rowsOnLastPage = numRows - numFullPages * numRowsPerPage;
for(int pageNo = 0; pageNo < numFullPages; ++pageNo){
for(int i = 0; i < numRowsPerPage; ++i){
int x = rand();
int y = rand();
memcpy(buffer + offset, &x, sizeof(int));
offset += sizeof(int);
memcpy(buffer + offset, &y, sizeof(int));
offset += sizeof(int);
memcpy(buffer + offset, &c, sizeof(char));
offset += sizeof(char);
memcpy(buffer + offset, &i, sizeof(pkey_t));
offset += sizeof(pkey_t);
generatedFile << y << "\n";
}
write(databaseFD, buffer, PAGE_SIZE);
memset(buffer, 0, sizeof(buffer));
offset = 0;
}
for(int i = 0; i < rowsOnLastPage; ++i){
int x = rand();
int y = rand();
memcpy(buffer + offset, &x, sizeof(int));
offset += sizeof(int);
memcpy(buffer + offset, &y, sizeof(int));
offset += sizeof(int);
memcpy(buffer + offset, &c, sizeof(char));
offset += sizeof(char);
memcpy(buffer + offset, &i, sizeof(pkey_t));
offset += sizeof(pkey_t);
generatedFile << y << "\n";
}
write(databaseFD, buffer, PAGE_SIZE);
close(databaseFD);
generatedFile.close();
}
int main(){
std::string finalName = "extSortTemp/finalOutput.bin";
int keySize = sizeof(int32_t);
int rowOffset = sizeof(int32_t) + sizeof(int32_t) + sizeof(char) + sizeof(pkey_t);
int columnOffset = sizeof(int32_t);
// generateDummyData();
int rowStack[] = {0};
auto t1 = std::chrono::high_resolution_clock::now();
ExternalSort<int> sorter("Mydatabase", "table.bin", finalName, numRows, rowStack);
sorter.sort(rowOffset, columnOffset, keySize, headerOffset);
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "Time for Sorting: " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()/1000.0 << std::endl;
// convertToText<int>(finalName, "final.txt", keySize, numRows);
return 0;
}