This commit is contained in:
Chris Miles 2025-06-11 18:37:02 -05:00
parent b8e3901125
commit 1151d55541
2 changed files with 39 additions and 9 deletions

View File

@ -309,6 +309,9 @@ DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_,
return e;
}
}
// if we can cache its assumed we didn't load this into the cache so we should not return a miss
return DataBucketsRepository::NewEntity(); // Not found in cache
}
// Fetch the value from the database

View File

@ -195,6 +195,25 @@ void RunBenchmarkCycle(uint64_t target_rows)
std::cout << "✅ Completed " << Strings::Commify(OPERATIONS_PER_TEST) << " cached reads in "
<< read_cached_time.count() << " seconds. (DataBucket::GetData)\n";
// 🔍 **Measure Client-Scoped Cache Miss Performance (Skips DB via CanCache)**
auto read_client_cache_miss_start = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < OPERATIONS_PER_TEST; ++i) {
// generate key that doesn't exist
std::string key = "nonexistent_key_" + std::to_string(i);
DataBucketKey k{
.key = key,
.character_id = 999999999, // use scoped value
};
DataBucket::GetData(k);
}
auto read_client_cache_miss_end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> read_client_cache_miss_time = read_client_cache_miss_end - read_client_cache_miss_start;
std::cout << "✅ Completed " << Strings::Commify(OPERATIONS_PER_TEST)
<< " scoped cache-miss reads (no DB) in "
<< read_client_cache_miss_time.count() << " seconds. (Client Scoped, Cache Miss, No DB)\n";
// 🔍 **Measure Non-Cached Read Performance (Direct Query)**
auto read_uncached_start = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < OPERATIONS_PER_TEST; ++i) {
@ -262,16 +281,24 @@ void ZoneCLI::BenchmarkDatabuckets(int argc, char **argv, argh::parser &cmd, std
LogSys.SetDatabase(&database)->LoadLogDatabaseSettings();
}
auto start_time = std::chrono::high_resolution_clock::now();
LogSys.log_settings[Logs::MySQLQuery].log_to_console = 1;
std::vector<uint64_t> benchmark_sizes = {10000, 100000, 1000000};
// 🔍 **Measure Client-Scoped Cache Miss Performance (Skips DB via CanCache)**
auto read_client_cache_miss_start = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < 5000; ++i) {
// generate key that doesn't exist
std::string key = "nonexistent_key_" + std::to_string(i);
for (auto size: benchmark_sizes) {
RunBenchmarkCycle(size);
DataBucketKey k{
.key = key,
.character_id = 999999999, // use scoped value
};
DataBucket::GetData(k);
}
// 🚀 **Total Benchmark Time**
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> total_elapsed = end_time - start_time;
std::cout << "\n🚀 Total Benchmark Time: " << total_elapsed.count() << " seconds\n";
auto read_client_cache_miss_end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> read_client_cache_miss_time = read_client_cache_miss_end - read_client_cache_miss_start;
std::cout << "✅ Completed " << Strings::Commify(5000)
<< " scoped cache-miss reads (no DB) in "
<< read_client_cache_miss_time.count() << " seconds. (Client Scoped, Cache Miss, No DB)\n";
}