On Wed, Nov 22, 2017 at 07:01:31PM -0500, Richard Hipp wrote:
> > (2) Store true differential manifests.
> 
> I'm thinking that Fossil-NG will probably do like Git and store
> separate artifacts holding the content of each directory.  (Git calls
> these "Tree Objects").  I need to do more research, but I'm thinking
> that for most check-ins, only one or two directory artifacts will
> actually change, even if there are dozens or hundreds (or multiple
> thousands as in NetBSD) of directory artifacts in a single check-out.

I'm not sure splitting it up on a per-directory level well help that
much. If you change a number of files in the same directory, they will
have the same prefix and compress well (even without doing any adhoc
prefix compression schemes). Changes are quite high that larger commits
will scatter around many directories, it's a common theme i.e. for API
changes in larger projects. The primary reason for storing tree objects
in something like git is the lack of better indexing structures, I would
say. In short, I would strongly distinguish between storage format and
working format, optimizing the former for compactness and building up
the latter when necessary.

> >
> > (3) Make cluster manifests non-permanent artifacts.
> >
> 
> I'm thinking of doing away with cluster artifacts entirely, and
> managing sync in some other way.

Having something like cluster artifacts can be useful, i.e. consider the
typical case of one central main server and many clients pulling from
it. If the server builds a ephemeral cluster ever so often and the
clients remember the last cluster they got, they can just ask the server
"what changed since this point". If the implementation of the
communication process is actually asynchronous, adding a few round trips
is not that bad as long as the waiting time is minimized. If the first
request from the client starts with the last "cluster", the server can
answer with the commits added on top. Client can filter out those it
already has and request the new ones. While it gets the new commits, it
can start requesting the file changes. Non-commit artifacts would
essentially work like new leaf commits. A new "cluster" can either
reference an existing one as delta or be send from scratch. It would
still allow the server to do regular garbage collection.

Joerg
_______________________________________________
fossil-users mailing list
[email protected]
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to