Jef Roosens b5fc3a3612 | ||
---|---|---|
.woodpecker | ||
bench | ||
include | ||
lsm | ||
src | ||
test | ||
thirdparty | ||
trie | ||
.dockerignore | ||
.editorconfig | ||
.gitignore | ||
ARCHITECTURE.md | ||
CHANGELOG.md | ||
Dockerfile | ||
Makefile | ||
README.md | ||
config.mk | ||
docker-compose.yml | ||
landerctl |
README.md
Lander
The idea
A URL shortener has always been on my list of things I'd like to write myself. It's simple, yet useful.
for our Algorithms & Datastructures 3 class, we had to implement three different tries (Patricia trie, ternary trie, and a custom one). Considering these are efficient string-based search trees, this gave me the idea to use it as the backend for a URL shortener!
This implementation currently uses a ternary trie as its search tree. The persistence model is very simple; I simply append a line to a text file every time a URL is added, and add the lines of this file to the trie on startup. The trie is stored completely im memory, and no I/O operations are required when requesting a redirect. This makes the server very fast.
The name
I gave up giving my projects original names a long time ago, so now I just use the names of my friends ;p
Benchmarking
I benchmark this tool using the wrk2
utility. I've provided two Lua scripts to aid with this. To bench publishing
redirects, use the following:
wrk2 -s bench/post.lua -t 10 -R 10k -d30s -c32 http://localhost:18080
And to bench GET requests:
wrk2 -s bench/get.lua -t 10 -R 25k -d30s -c32 http://localhost:18080
Of course you're free to change the parameters, but the provided Lua files generate URLs that can be used in the benchmark.