I see what you're doing here: it simplifies some things, but could it mean that we're allocating an ID in some cases where we don't end up needing one?  For example, when attempting to update with a key that doesn't exist -- we'll allocate the ID before doing the search.

Maybe that's not worth worrying about?