Show HN: A Database Written in C (github.com)
The storage engine is called TidesDB.
TidesDB is written entirely in C. It's designed as a fast, transactional key-value storage engine built on a log-structured merge-tree (LSM-tree) architecture.
My journey with TidesDB began nearly 2 years ago whilst I was experimenting with various data structures and databases in Go. When I encountered the log-structured merge tree concept, I was initially overwhelmed by its complexity after reviewing other implementations.
However, after studying the original paper, I realized I could potentially simplify the design by focusing on just a 2-level approach(memory level and a disk level). This was challenging at first, and I scrapped many ideas along the way, but over time I discovered how powerful this design could potentially be.
The beauty of this design/architecture is its extensibility. Since the disk level contains many SSTables (Sorted String Tables), we can efficiently pair and merge them in various ways - whether in parallel for speed or incrementally to minimize resource impact.
What began as a challenging learning process has I believed evolved into a unique engine design and library.
You can check out TidesDB code here: https://github.com/tidesdb/tidesdb
Website here (Architecture-design, documentation and more): https://tidesdb.com
There are a variety of FFI libraries in the works for C++, GO, Python, Lua and more!
Currently TidesDB is nearing its first major release, we are still in beta development.
I'd love to get your thoughts, questions and all :)
24 comments
[ 3.4 ms ] story [ 60.3 ms ] thread"DB projects being implemented in C is nothing new, e.g., PostgreSQL is also dritten C."
I get it may seem like something not new but it's a challenge which I thought would bring more attention to the post itself.
I appreciate your comment.
The system currently sorts comparing raw byte values directly. So if I'm understanding correctly, no it doesn't handle unicode sorting. If key's were stored as strings and compared that way, yes. :)
There are examples with integration tests currently.
The website explains some tadbits regarding concurrency quite well.
I'd need to better understand what you mean.
I do agree, much to prove still.
If you want feel free to join the Discord and we can talk in real-time. Could be a diverse and interesting conversation.
I've thought about this more than I'd like to admit. I'd need to review if it's possible to refactor a bit to work with C99+. I don't believe there would be many changes but it's been awhile writing the entire code base as it is.
Because TidesDB is in BETA v0.8.0 currently we can definitely do this. I'm curious do you use CMake? I will create an issue.
https://github.com/tidesdb/tidesdb/issues/356
Concerning cmake: I only use it if unavoidable; instead I implemented my own build system (https://github.com/rochus-keller/busy/) some years ago which I now use for most of my personal projects.
You are quite the master I'm very similar to you in that I gotta get my hands on everything haha.
I tagged yeah on the issue. I will after work have a look at the changes required to make backwards compatible. If not much, why not. I'll weigh the possible negatives if any.