summaryrefslogtreecommitdiffstats
path: root/benchmarks/cedar_trie.cpp
diff options
context:
space:
mode:
authorDouglas B. Rumbaugh <dbr4@psu.edu>2024-05-14 16:31:05 -0400
committerGitHub <noreply@github.com>2024-05-14 16:31:05 -0400
commit47916da2ba5ed5bee2dda3cbcc58d39e1e931bfc (patch)
treeee5613ce182b2c9caa228d3abeb65dc27fef2db3 /benchmarks/cedar_trie.cpp
parent4a834497d5f82c817d634925250158d85ca825c2 (diff)
parent8643fe194dec05b4e3f3ea31e162ac0b2b00e162 (diff)
downloaddynamic-extension-47916da2ba5ed5bee2dda3cbcc58d39e1e931bfc.tar.gz
Merge pull request #4 from dbrumbaugh/master
Updates for VLDB revision
Diffstat (limited to 'benchmarks/cedar_trie.cpp')
-rw-r--r--benchmarks/cedar_trie.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/benchmarks/cedar_trie.cpp b/benchmarks/cedar_trie.cpp
new file mode 100644
index 0000000..7499ce7
--- /dev/null
+++ b/benchmarks/cedar_trie.cpp
@@ -0,0 +1,97 @@
+/*
+ *
+ */
+
+#define ENABLE_TIMER
+
+#include <fstream>
+#include <sstream>
+#include <vector>
+
+#include "cedar.h"
+
+#include "psu-util/timer.h"
+#include "psu-util/progress.h"
+
+std::vector<std::string> strings;
+
+typedef cedar::da<int> Trie;
+
+void insert_thread(int64_t start, int64_t end, Trie * trie) {
+ for (uint64_t i=start; i<end; i++) {
+ auto res = trie->update(strings[i].c_str(), strings[i].size(), i+1);
+ }
+}
+
+void read_data(std::string fname, size_t n=10000000) {
+ strings.reserve(n);
+
+ std::fstream file;
+ file.open(fname, std::ios::in);
+
+ size_t i=0;
+ std::string line;
+ while (i < n && std::getline(file, line, '\n')) {
+ strings.emplace_back(line);
+ i++;
+ psudb::progress_update((double) i / (double) n, "Reading file:");
+ }
+}
+
+void usage(char *name) {
+ fprintf(stderr, "Usage:\n%s datafile record_count\n", name);
+}
+
+int main(int argc, char **argv) {
+
+ if (argc < 3) {
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ std::string fname = std::string(argv[1]);
+ size_t n = atol(argv[2]);
+
+ read_data(fname, n);
+
+ if (strings.size() == 0) {
+ fprintf(stderr, "[E]: No string data read from file. Aborting execution.\n");
+ } else {
+ fprintf(stderr, "Finished reading from file.\n");
+ }
+
+ auto trie = new Trie();
+
+ TIMER_INIT();
+ TIMER_START();
+ insert_thread(0, strings.size(), trie);
+ TIMER_STOP();
+
+ auto total_time = TIMER_RESULT();
+
+ size_t m = 100;
+ TIMER_START();
+ for (size_t i=0; i<m; i++) {
+ size_t j = rand() % strings.size();
+
+ auto res = trie->exactMatchSearch<int>(strings[j].c_str());
+ //assert(*(res)+1 == j);
+ }
+ TIMER_STOP();
+
+ auto query_time = TIMER_RESULT();
+
+
+ double i_tput = (double) n / (double) total_time * 1e9;
+ size_t q_lat = query_time / m;
+
+ fprintf(stdout, "%ld\t\t%lf\t%ld\n", trie->size(),
+ i_tput, q_lat);
+
+ fprintf(stdout, "%ld\n", trie->total_size());
+
+ delete trie;
+
+ fflush(stderr);
+}
+