HackerTrans
TopNewTrendsCommentsPastAskShowJobs

lichtenberger

1,804 karmajoined 8 năm trước
https://github.com/sirixdb/sirix

I'm working on an evolutionary, accumulate-only database system called SirixDB written in Java (and a module in Kotlin) in my spare time and in my day to day job I'm also working as a software engineer (embedded; besides I'm dancing a lot -- swing dances, mainly Lindy Hop and travel to festivals in Europe often times in my holidays) :-)

Furthermore, I'm working on Brackit (http://brackit.io), a query engine for JSON and XML using a JSONiq like query language. It can be used as ad-hoc in-memory query processor as the query processor of a data store. We envision, that it encapsulates common proven optimizations whereas the individual data stores can add further stages to rewrite the queries for index matching and physical optimizations.

SirixDB (https://sirix.io or https://github.com/sirixdb/sirix) is all about efficient versioning of your data. That is on the one hand it reduces the storage cost of storing a new revision during each transaction-commit while balancing read- and write-performance through a novel sliding snapshot algorithm and dynamic page compression. On the other hand Sirix supports easy query capabilities for instance to open a specific revision by a timestamp or several revisions by a given timespan, to navigate to future or past versions of nodes in the tree-structure and so on. It basically never overwrites data and is heavily inspired by ZFS and Git and borrows some ideas and puts these to test on the sub-file level.

In stark contrast to other approaches SirixDB combines copy-on-write semantics with node-level versioning and does not require a write-ahead-log for consistency.

It all started around 2006 as a university / Ph.D. project of Marc Kramis and I worked on the project since 2007 and already did my Bachelor's Thesis, Master's Thesis as well as several HiWi-Jobs on topics regarding the project and I'm still more eager than ever to put forth the idea of a versioned, analytics plattform to perform analytical tasks based on current as well as the history of the data.

e-mail address: [email protected]

Submissions

Show HN: SirixDB – a bitemporal JSON database system with sub-page versioning

github.com
1 points·by lichtenberger·9 giờ trước·0 comments

First Valhalla related stuff will land in Java 28

mail.openjdk.org
5 points·by lichtenberger·tháng trước·1 comments

Valhalla when? "Now"? Java 27 or 28?

github.com
3 points·by lichtenberger·2 tháng trước·0 comments

LeanStore: In-Memory Data Management Beyond Main Memory (Viktor Leis) [video]

youtube.com
2 points·by lichtenberger·6 tháng trước·0 comments

Ask HN: Where is software engineering moving towards in the next years?

2 points·by lichtenberger·6 tháng trước·3 comments

Data Oriented Programming, Beyond Records

mail.openjdk.org
2 points·by lichtenberger·6 tháng trước·0 comments

The Static Dynamic JVM – A Many Layered Dive [video]

youtube.com
1 points·by lichtenberger·6 tháng trước·0 comments

After the Big Tech Layoffs

youtube.com
3 points·by lichtenberger·7 tháng trước·0 comments

(Generational) Shenandoah GC (Low Latency) Support in GraalVM Native Images

github.com
1 points·by lichtenberger·7 tháng trước·0 comments

Implementation Rust: One Billion Rows Challenge

youtube.com
2 points·by lichtenberger·8 tháng trước·0 comments

Beyond the Vector API – A Quest for a Lower Level API [JVMLS]

inside.java
1 points·by lichtenberger·8 tháng trước·0 comments

Try the New Valhalla EA Build

inside.java
3 points·by lichtenberger·8 tháng trước·0 comments

Try Out JEP 401 Value Classes and Objects

inside.java
2 points·by lichtenberger·9 tháng trước·0 comments

Try Out JEP 401 Value Classes and Objects

inside.java
3 points·by lichtenberger·9 tháng trước·0 comments

All New Java Language Features Since Java 21

inside.java
76 points·by lichtenberger·10 tháng trước·125 comments

Ask HN: Which resources do you regularly use to keep yourself updated?

1 points·by lichtenberger·11 tháng trước·3 comments

Valhalla Nullness Emotion [video]

youtube.com
1 points·by lichtenberger·11 tháng trước·0 comments

How ZGC allocates memory for the Java heap

joelsiks.com
86 points·by lichtenberger·năm ngoái·18 comments

Refining Var-Handles in Valhalla

cr.openjdk.org
2 points·by lichtenberger·năm ngoái·0 comments

Generational Shenandoah GC in JDK 24

bugs.openjdk.org
2 points·by lichtenberger·2 năm trước·0 comments

comments

lichtenberger
·9 giờ trước·discuss
[dead]
lichtenberger
·năm ngoái·discuss
I'm working on a side-project in my spare time since the end of 2012 (before at the university) with some gaps, which is an append-only DBS with time travel capabilities using a custom storage engine based on COW tries and a (still I think) novel page versioning strategy called Sliding Snapshot. Recently I began work on pooling pages for reuse and a custom allocator for variable page sizes. Before, I had created new instances whenever a page was read from disk instead of reusing instances, so the allocation rate was really high for parallel transactions.

https://sirix.io | https://github.com/sirixdb/sirix | http://brackit.io
lichtenberger
·2 năm trước·discuss
Yes, in the Valhalla builds of course :-) That said I hope we'll see the value classes at least in Java 25.
lichtenberger
·2 năm trước·discuss
Seems, that we already have value classes in the EA builds :-)
lichtenberger
·2 năm trước·discuss
I once implemented the backend of a calendar and resource control for a low code platform.

The control is highly customizable, with a lot of views to chose from, daily, monthly, yearly... but also resource views (you can book resources with custom groupings, by plugin, by the resource-ID, whatever...), define "plugins" on the data sources, what's the from- and to- columns, the title column, what's the resource (may be from a foreign key / 1:1 relationship or 1:N if it's from a "child" data source or from the same data source/table).

Furthermore I've implemented different appointment series, to chose from (monthly, weekly (which weekdays), daily...), which column values should be copied. Also appointment conflicts (or only conflicts if they book the same resource). You could also configure buffers before and after appointments where no other appointment can be.

That was a lot of fun and also challenge sometimes regarding time zones and summer/winter time in Europe and so on :-)
lichtenberger
·2 năm trước·discuss
So, I think in my local bubble noone is for instance as excited about DB systems as I am, so in essence I thought I could even spend some money to get some expert opinions or rather insights I'm struggling with (currently for instance with bad throughput of my immutable OSS DBS). That said I think noone so far wanted money and some even offered help, but so far I think they didn't have time, thus didn't answer any "pings". So, as I can't spend too much time (and of course not too much money) either on profiling and debugging right now it's kind of a dilemma, as it would IMHO be very interesting to know what's slowing down N read-only trxs in my system :-) that said a couple of years ago I also asked about help with a frontend without much luck. I guess it has to have some value of course, so maybe at least spending some money (even if it's a non profit spare time project since 11 or even more years) should be OK :-)

Guess I just felt a bit frustrated...
lichtenberger
·2 năm trước·discuss
Throughput. The code can be "suspended" on a blocking call (I/O, where the platform thread usually is wasted, as the CPU has nothing to do during this time). So, the platform thread can do other work in the meantime.
lichtenberger
·2 năm trước·discuss
https://kotlinlang.org/docs/whatsnew20.html
lichtenberger
·2 năm trước·discuss
See also https://github.com/JetBrains/kotlin/releases
lichtenberger
·2 năm trước·discuss
We're using a similar trie structure as the main document (node) index in SirixDB[1]. Lately, I got some inspiration for different page-sizes based on the ART and HAMT basically for the rightmost inner pages (as the node-IDs are generated by a simple sequence generator and thus also all inner pages (we call them IndirectPage) except for the rightmost are fully occupied (the tree height is adapted dynamically depending on the size of the stored data. Currently, always 1024 references are stored to indirect child pages, but I'll experiment with smaller sized, as the inner nodes are simply copied for each new revision, whereas the leaf pages storing the actual data are versioned themselfes with a novel sliding snapshot algorithm.

You can simply compute from a unique nodeId each data is assigned (64bit) the page and reference to traverse on each level in the trie through some bit shifting.

[1] https://github.com/sirixdb/sirix
lichtenberger
·2 năm trước·discuss
The technique is also described in the awesome book "Crafting Interpreters" by Robert Nystrom.
lichtenberger
·2 năm trước·discuss
Super interesting read about COW, log-structures and a mix thereof (CObW -- copy on bounded writes).
lichtenberger
·3 năm trước·discuss
I think it depends, but I wonder if anything can be done about the problem with checked exceptions in lambdas / for instance the streams. I think the enhanced switch with handling failure is only part of the solution, but I'm also a proponent of having only unchecked exceptions.
lichtenberger
·3 năm trước·discuss
At least they are already discussing the next version.
lichtenberger
·3 năm trước·discuss
Oh, seems also because of random in-place writes of the B-tree.
lichtenberger
·3 năm trước·discuss
Because it has to copy and write entire pages instead of only force a flush of log records due to a WAL?
lichtenberger
·3 năm trước·discuss
What about storing the data and thus, the indexes in Kafka. Would it make sense? Let's say currently, I'm storing SirixDB resources in files. However, instead of offsets into a file the index pages could be stored in Kafka optionally (or Pulsar...). Is Kafka too slow for this or only for specific row-tuples? We could make a combined storage caching the pages locally or also storing in the file system and asynchronous storing in Kafk, S3 or whatever.
lichtenberger
·3 năm trước·discuss
Well, it may be a B-tree, or an LSM-tree, a trie or whatever index structure suits...

Also, of course you may have covering indexes.
lichtenberger
·3 năm trước·discuss
"Database Design and Implementation" by Edward Sciore is also a very great read with a lot of examples written in Java (actually a small DBS).

For actual research I'd recommend all stuff from Andy (Pavlo), Viktor Leis, Thorsten Grust, Thomas Neumann...
lichtenberger
·3 năm trước·discuss
It's fundamentally how SirixDB approaches this (basically also storing checksums) as also written in another reply :-)

Every commit directly syncs the binary data to the durable storage (currently a file) and incrementally adds data. Furthermore, it stores optionally the changes (type of change/ctx node/updatePosition... in JSON files). For instance, lately I've implemented a simple copy mechanism based on this. Copy a given revision and optionally apply all changes with intermediate commits to also copy the full history up to the most recent revision). However, the main idea is to use the change tracking also for diff visualizations... maybe even stream these via web sockets.

A production ready system BTW may be Datomic.

And it also reminds me of this paper: https://dl.acm.org/doi/abs/10.5555/3275366.3284969