Integer compression: FastPFor in C#, results
After this saga, I wanted to close the series with some numbers about the impact of this algorithm.If you’ll recall, I started this whole series discussing variable-sized integers. I was using this...
View ArticleGenerating sequential numbers in a distributed manner
On its face, we have a simple requirement:Generate sequential numbersEnsure that there can be no gapsDo that in a distributed mannerGenerating the next number in the sequence is literally as simple as...
View ArticleProduction postmortem: ENOMEM when trying to free memory
We got a support call from a client, in the early hours of the morning, they were getting out of memory errors from their database and were understandably perturb by that. They are running on a cloud...
View ArticleProduction postmortem: The dog ate my request
A customer called us, quite upset, because their RavenDB cluster was failing every few minutes. That was weird, because they were running on our cloud offering, so we had full access to the metrics,...
View ArticleQCon San Francisco Workshop: Building a database from the ground up
I’m going to QCon San Francisco and will be teaching a full day workshop where we’ll start from a C compiler and an empty file and end up with a functional storage engine, indexing and more.Included...
View ArticleUnhandled Exception Episode 55: RavenDB and Database Internals - with Oren Eini
You can listen to me talk with Dan in the Unhandled Exception podcast, where we dug deep into the internals of database engines.As usual, I would love your feedback.
View ArticleNot all O(1) operations are considered equal
At some point in any performance optimization sprint, you are going to run into a super annoying problem: The dictionary.The reasoning is quite simple. One of the most powerful optimization techniques...
View ArticleOptimizing a three-way merge
Deep inside of the Corax indexing engine inside of RavenDB there is the notion of a posting list. A posting list is just an ordered set of entry ids that contains a particular term. During the indexing...
View ArticleRavenDB Backups are now Faster & Smaller
With the release of RavenDB 6.0, we are now starting to focus on smaller features. The first one out of the gate, part of RavenDB 6.0.1 release, is actually a set of enhancements around making backups...
View ArticleLearning over the holidays: Yet Another Bug Tracker sample app
If you are reading this blog, I assume that you are a like-minded person. My idea of relaxation is to sit and write code. Hopefully on something that I’m not familiar with. I have many such blog post...
View ArticleRavenDB HTTP Compression: Bandwidth & Time reductions
I recently talked about how RavenDB is now using ZStd as the default compression algorithm for backups. That led to a reduction both in the amount of storage we are consuming for backups and a...
View ArticleRavenDB, Raspberry Pi & Hugin Appliance: oh my!
RavenDB can run on the Raspberry Pi, it is actually an important use case for us when our users are deploying RavenDB as part of Internet of Things systems. We wanted to showcase RavenDB’s performance...
View ArticleRecording: Technology & Friends - Oren Eini on the Corax Search Engine
When Oren Eini originally developed RavenDB, he used the Lucene library to implement indexing. Eventually, his team encountered limitations with this strategy, so they created the Corax search engine,...
View ArticleRavenDB and Two Factor Authentication
RavenDB is typically accessed directly by your application, using an X509 certificate for authentication. The same applies when you are connecting to RavenDB as a user. Many organizations require that...
View ArticleRavenDB’s storage engine: Voron–unlocking the secret
A couple of months ago I had the joy of giving an internal lecture to our developer group about Voron, RavenDB’s dedicated storage engine. In the lecture, I’m going over the design and implementation...
View ArticleVacations, leaky abstractions, and modeling concerns, oh my!
Our task today is to request (and obtain approval for) a vacation. But before we can make that request, we need to handle the challenge of building the vacation requesting system. Along the way, I...
View ArticleCorax Query Plan visualization
Corax is the new indexing and querying engine in RavenDB, which recently came out with RavenDB 6.0. Our focus when building Corax was on one thing, performance. I did a full talk explaining how it...
View ArticleReading unfamiliar codebases quickly: LMDB
Reading code is a Skill (with a capital letter, yes) that is really important for developers. You cannot be a good developer without it.Today I want to talk about one aspect of this. The ability to go...
View ArticleIndexing only recent data - adventures with large datasets & archiving
We recently got a support request from a user in which they had the following issue:We have an index that is using way too much disk space. We don’t need to search the entire dataset, just the most...
View ArticleCaching documents in RavenDB: The good, the bad and the ugly
RavenDB has a hidden feature, enabled by default and not something that you usually need to be aware of. It has built-in support for caching. Consider the following code:async...
View Article