summaryrefslogtreecommitdiff
path: root/readme.md
blob: 31e0edf903e24460c2909b12a7544481cb7c3693 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. Have [stack](http://haskellstack.org/) installed
2. Optional: have [nix](https://nixos.org/nix/) installed. If you *don't* use nix, delete line 3 of `main.hs`.
3. Run `./main.hs` and the server will startup

To bootstrap the db, do `curl -XPOST "localhost:3000/bootstrap"`.

This takes a while; on my machine it averages 181 records per second. It's IO
bound, and in an un-optimized program GHC on Linux uses a single, blocking IO
manager thread (on Windows it's non-blocking, [apparently][1]). This can be
improved with the [Control.Concurrent][1] module, it which case we could launch
as many IO threads as we want, and do probably 10k records per second. There's
definitely an optimal amount of threads here, we'd have to test to find that.

*However*, you can watch it bootstrap. In a separate terminal, do `curl
"localhost:3000/count"` to see it updating. New POSTs will also work and update
the database, even while it is bootstrapping, which is kinda cool.

Try this in bash:

    while sleep 1; do curl -s "localhost:3000/count" | jq '.count'; done


[1]: https://www.stackage.org/haddock/lts-10.3/base-4.10.1.0/Control-Concurrent.html#g:10