URL shortener, pastebin & file-sharing service, written from the ground up in C. https://r8r.be
 
 
 
 
 
Go to file
Jef Roosens 881f2defbe
ci/woodpecker/push/docker Pipeline was successful Details
chore(lsm): some refactoring
2023-11-16 21:52:20 +01:00
.woodpecker chore(ci): once again remove deploy hook 2023-11-16 11:30:56 +01:00
bench
include chore: integrate cppcheck into workflow 2023-11-14 10:49:12 +01:00
landerctl feat(landerctl): show progress bar for file uploads 2023-11-16 12:46:52 +01:00
lsm chore(lsm): some refactoring 2023-11-16 21:52:20 +01:00
src fix(http_loop): correctly parse content-type 2023-11-14 21:46:52 +01:00
test
thirdparty
trie
.dockerignore chore(lander): fix Docker build 2023-11-14 15:34:07 +01:00
.editorconfig
.gitignore
ARCHITECTURE.md
CHANGELOG.md feat(landerctl): support all entry types 2023-11-16 11:30:02 +01:00
Dockerfile chore(lander): fix Docker build 2023-11-14 15:34:07 +01:00
Makefile chore(lander): fix Docker build 2023-11-14 15:34:07 +01:00
README.md
config.mk feat(landerctl): properly find config file 2023-11-16 12:21:13 +01:00
docker-compose.yml

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.