This commit is contained in:
EntireTwix 2021-07-15 20:18:38 -07:00
parent efca0b8034
commit dc399184cf

View file

@ -5,9 +5,9 @@
<!-- memory vs database --> <!-- memory vs database -->
<!-- and while changes arent made on the basis of speed alone it does seem to fit the problem better as we only need to save every `n` minutes/on close. --> <!-- and while changes arent made on the basis of speed alone it does seem to fit the problem better as we only need to save every `n` minutes/on close. -->
<!-- phmap vs std hash map --> <!-- phmap vs std hash map -->
### STD vs phmap #### STD vs phmap
this parallel hashmap implementation is the basis of CCash, its where all the user data is stored, compared to the STD's `std::unordered_map<T>` its much faster, this, multi threading support, and more can be found in the [writeup](https://greg7mdp.github.io/parallel-hashmap/). this parallel hashmap implementation is the basis of CCash, its where all the user data is stored, compared to the STD's `std::unordered_map<T>` its much faster, this, multi threading support, and more can be found in the [writeup](https://greg7mdp.github.io/parallel-hashmap/).
### Scalability #### Scalability
below is `GetBal()` being called where `x` axis grows with # of users reaching 10 million users, `y` axis is time in ns. The name given is random between 0 and max users at that time as to provide more accurate results. below is `GetBal()` being called where `x` axis grows with # of users reaching 10 million users, `y` axis is time in ns. The name given is random between 0 and max users at that time as to provide more accurate results.
![image](GetBal().png) ![image](GetBal().png)
as the graph demonstrates, regardless of size `GetBal()` remains consistent at ~39ns on my 3700x single threaded. as the graph demonstrates, regardless of size `GetBal()` remains consistent at ~39ns on my 3700x single threaded.
@ -20,11 +20,11 @@ simdjson was the fastest JSON parsing I could find, its used for request parsing
## [Drogon webframework](https://github.com/an-tao/drogon) ## [Drogon webframework](https://github.com/an-tao/drogon)
at the time of making this doc Drogon is the 3rd fastest web framework as per [this](https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=composite) sites metric of measuring web frameworks, it also has multi threading support. at the time of making this doc Drogon is the 3rd fastest web framework as per [this](https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=composite) sites metric of measuring web frameworks, it also has multi threading support.
## Sparse saving ## Sparse saving
### Saving on close #### Saving on close
when the program is interupted with CONTROL + C it will save before closing the webserver, **it will not however save during a crash**. when the program is interupted with CONTROL + C it will save before closing the webserver, **it will not however save during a crash**.
### Auto Saving #### Auto Saving
every `n` minutes, a configurable amount at launch, CCash will save. every `n` minutes, a configurable amount at launch, CCash will save.
### Changes #### Changes
for the above two cases, it will only save to disk if changes have been made since last save. for the above two cases, it will only save to disk if changes have been made since last save.
## Multi-threading support ## Multi-threading support
considering phmap and drogon both massively benefit from being multi-threaded it seemed obvious that the entire program should be, this is enabled by default and manually settable at `MULTI_THREADED`. Below are some graphs visualizing the gain of doing so: considering phmap and drogon both massively benefit from being multi-threaded it seemed obvious that the entire program should be, this is enabled by default and manually settable at `MULTI_THREADED`. Below are some graphs visualizing the gain of doing so: