So, just finally made time to port the last project out of my old Google code repo. So here are all the links for the new packages and repositories: BPlusTree (and supporting parts of Library) -> CSharpTest.Net.Collections Library\Commands -> CSharpTest.Net.Commands RpcLibrary -> CSharpTest.Net.RpcLibrary Library\Tools\* -> CSharpTest.Net.Tools The [...]


In my previous post “Why GUID primary keys are a database’s worst nightmare” I spoke about some of downsides to using GUID primary keys. In this post I’m going to focus more specifically on the .NET Framework’s implementation of System.Guid. I have a few complaints about this class, let’s cover them… 1. Guid.ToByteArray() This, IMHO, [...]


When you ask most people why using a GUID column for a primary key in a database might be slower than auto-incremented number the answer your likely to get is usually along these lines: “Guids are 16 bytes, and integers are only 4 bytes.” While this information is technically accurate, it is completely the wrong [...]


Continued from: BPlusTree 2.0 Changes Part 4 – Rewriting the Storage Format Getting Started To utilize the new file format in the BPlusTree you will need to use OptionsV2 class. The previous Options class is still there and continues to use the same file format. // Create the OptionsV2 class to specify construction arguments: var [...]


Continued from: BPlusTree 2.0 Changes Part 3 – AddRange and BulkInsert So all the previous updates took place back in April of this year. As I started to prepare to release a new drop of the BPlusTree I started having thoughts about an alternative storage format. So the update got shelved and I started working [...]

BPlusTree 2.0 Changes Part 3 - AddRange and BulkInsert

Continued from: Part 2 – Enumerate Ranges and First/Last This is really the major piece of work in this release. There are a number of factors as to why these methods were added, but the foremost among them is performance when merging two sets of data. Before we go further let’s look at a typical [...]


Continued from: Part 1 – Interface Changes Enumerating Ranges I’ve been contacted several times about adding the ability to enumerate ranges from the b+tree. It’s actually a very trivial thing to implement and I’ve handed out the code several times. With this release the following range enumeration methods will be available: EnumerateFrom(TKey start) – Enumerate [...]


After much deliberation on the subject, I decided to introduce breaking changes interface. I know, I know, I don’t do this lightly, in fact I think it’s the third worse thing I could possible do (sorry it does follow adding bugs and semantic changes). So here are my reasons why I thought this was necessary: [...]


I’ve recently seen some comments about various aspects of btree/b+tree structures that are troublesome. They are, IMHO, just plain wrong. Let’s look at a few of these and see if we can shed some light on b+trees and their implementations. 1. Items in a tree node must be presorted. FALSE This is simply not true, [...]