From: "Jörn Engel" <joern@logfs.org>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC] B+Tree library
Date: Fri, 31 Oct 2008 12:26:51 +0100 [thread overview]
Message-ID: <20081031112651.GD18182@logfs.org> (raw)
In-Reply-To: <1225449314.3535.23.camel@johannes.berg>
On Fri, 31 October 2008 11:35:14 +0100, Johannes Berg wrote:
>
> [looks like this hitting LWN means everyone suddenly found it...]
It did?
> > The one aspect where my implementation is actually nice is in allowing
> > variable key length. Btree keys are interpreted as an array of unsigned
> > long. So by passing the correct geometry to the core functions, it is
> > possible to handle 32bit, 64bit or 128bit btrees, which logfs uses. If
> > so desired, any other weird data format can be used as well (Zach, are
> > you reading this?).
>
> Would there be an easy way to use 48-bit keys? Or variable length keys?
Variable as in one implementation for several trees with different
sizes, yes. Variable as in one tree with differently sized keys, no.
With the existing code, 48bit keys would need to be expressed as an
array of longs, thereby growing to 64bit. Alternatively one could
replace the longset/longcmp/longcpy with memset/memcmp/memcpy.
> > So would something like this be merged once some users are identified?
> > Would it be useful for anything but logfs? Or am I plain nuts?
>
> I could imagine using it instead of the hash-table for stations and APs
> in the wireless code, stations are identified by the MAC address (48
> bit) and APs (BSSs) are identified by their BSSID+SSID (or mesh ID), so
> variable length. Currently we use a hash table with 256 slots which is
> quite large for the typical case of mostly less than a hundred entries.
MAC address wouldn't be a problem. For BSSID+SSID one could just keep
the hashing and use the btree as an 'implementation detail' of the
'hashtable'. Beware that I don't allow two identical keys. The
implications of that make my toenails curl up.
> > This implementation is extremely simple. It splits nodes when they
> > overflow. It does not move elements to neighboring nodes. It does not
> > try fancy 2:3 splits. It does not even merge nodes when they shrink,
> > making degenerate cases possible. And it requires callers to do
> > tree-global locking. In effect, it will be hard to find anything less
> > sophisticated.
>
> I think the wireless case would probably want to have real shrinking
> because it's well possible that you're moving, with your laptop, from an
> area with a large number of APs to say your home out in the countryside
> that only has your single AP.
Indeed.
Jörn
--
Joern's library part 7:
http://www.usenix.org/publications/library/proceedings/neworl/full_papers/mckusick.a
next prev parent reply other threads:[~2008-10-31 11:27 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-26 12:46 [RFC] B+Tree library Jörn Engel
2008-10-28 1:25 ` Dave Chinner
2008-10-30 17:43 ` Pavel Machek
2008-10-30 17:58 ` Jörn Engel
2008-10-30 19:14 ` Pavel Machek
2008-10-30 20:20 ` Jörn Engel
2008-10-31 6:38 ` Christian Borntraeger
2008-10-31 7:35 ` Jörn Engel
2008-10-31 9:16 ` Geert Uytterhoeven
2008-10-31 9:20 ` Jörn Engel
2008-10-31 10:35 ` Johannes Berg
2008-10-31 11:26 ` Jörn Engel [this message]
2008-10-31 11:32 ` Johannes Berg
2008-10-31 12:54 ` Jörn Engel
2008-10-31 13:07 ` Johannes Berg
2008-10-31 13:15 ` Jörn Engel
2008-11-01 15:59 ` [RFC] B+Tree library V2 Jörn Engel
2008-11-05 19:57 ` Johannes Berg
2008-11-05 20:06 ` Jörn Engel
2008-11-05 20:12 ` Johannes Berg
2008-11-05 20:21 ` Jörn Engel
2008-11-05 20:25 ` Johannes Berg
2008-11-07 7:52 ` Jörn Engel
2009-01-08 0:57 ` Johannes Berg
2009-01-08 16:24 ` Jörn Engel
2009-01-08 16:34 ` Johannes Berg
2009-01-08 19:40 ` Jörn Engel
2009-01-08 16:50 ` Johannes Berg
2009-01-08 19:46 ` Jörn Engel
2009-01-08 17:10 ` Johannes Berg
2009-01-08 20:02 ` Jörn Engel
2009-01-08 20:18 ` Johannes Berg
2009-01-08 21:09 ` Jörn Engel
2008-10-31 13:16 ` [RFC] B+Tree library Johannes Berg
2008-10-31 13:29 ` Jörn Engel
2008-10-31 13:45 ` Bert Wesarg
2008-10-31 15:18 ` Tim Gardner
2008-10-31 15:35 ` Jörn Engel
2008-10-31 20:17 ` Sean Young
2008-10-31 23:36 ` Jörn Engel
2008-11-01 10:17 ` Sean Young
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081031112651.GD18182@logfs.org \
--to=joern@logfs.org \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox