Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: davebenson/dsk
base: e10ec187a7
head fork: davebenson/dsk
compare: d09236e71b
Checking mergeability… Don't worry, you can still create the pull request.
  • 2 commits
  • 2 files changed
  • 0 commit comments
  • 1 contributor
Showing with 72 additions and 2 deletions.
  1. +71 −2 doc/nosql.latex
  2. +1 −0  dsk-dir.h
73 doc/nosql.latex
@@ -27,8 +27,34 @@ When string values are set, the one with the greatest timestamp wins (ie assumes
Deletion tombstones (that is, markers for preserving deletion status) also have timestamps.
The difference is that tombstones may be removed if the deletion is old enough.
+Here are the operations on a string:
+{\bf operation} & {\bf description} \\
+{\tt ASSIGN} & set hte value of the string \\
+{\tt LADD} & add a new string value on the left \\
+{\tt RADD} & add a new string value on the right \\
+{\tt DELETE} & delete the entry
+This is a two-ended list. Duplicate entries are permitted. Operations:
+{\bf operation} & {\bf description} \\
+{\tt LPUSH} & insert entry on left-end of list \\
+{\tt RPUSH} & insert entry on right-end of list \\
+{\tt LPOP} & remove left-most entry from list \\
+{\tt RPOP} & remove right-most entry from list \\
+{\tt LTRIM} & keep the $N$ leftmost elements, delete the rest \\
+{\tt RTRIM} & keep the $N$ rightmost elements, delete the rest \\
+{\tt LREMOVE} & remove matching entry, starting at left \\
+{\tt RREMOVE} & remove matching entry, starting at right \\
+{\tt REMOVE\_ALL} & remove all matching entries \\
+{\tt ASSIGN} & set the entire list \\
+{\tt DELETE} & delete the entry
This is a string-to-string map.
@@ -51,7 +77,7 @@ what is a good way to allocate IDs with the following methods:
alloc_id_between(PREV, NEXT)
where there are special tokens called {\tt FIRST} and {\tt LAST} that can be used for
-{\tt prev} and {\tt {\tt next} respectively, to mean ``no limit''.
+{\tt prev} and {\tt next} respectively, to mean ``no limit''.
I guess easily proven that for any partitioning scheme,
there exists some set of $N$ choices of adjacent {\tt PREV}/{\tt NEXT} tokens that leads
@@ -73,12 +99,55 @@ Updates to objects whose core is later than the update are dropped.
When reading an object, if two machines have different update sets than expected, the differences
are sent to the servers.
+In pretty much all cases the updates match the update primitives.
+\section{Implementing {\tt merge}}
+This function takes two robust objects (above) and combines them into a new robust object.
+A reduce phase follows that cuts down the number of object updates required.
+{\bf Step 1}: {\it Reconciling the base objects (if any).}
+If there are no base objects, the result of the merge also has no base object.
+If there is only one base object, assuming that any updates from the non-base object that occurred
+before the base object's timestamp should be discarded, and the only base object is THE base object.
+If there are two base objects, take the later object, discard any updates before that timestamp.
+All other updates are merged: they must have the same timestamp and t
+{\bf Step 2}: {\it Merging the list of updates.}
+{\bf Step 3}. Use {\tt reduce} to limit the object size.
+\section{Implementing {\tt reduce}}
+Reduce has two purposes:
+\item to bound the size of updatable objects
+\item to deliver a final object to the user
+The general format of reduce takes a maximum number of updates and a
+maximum age, and condenses early updates with the base object.
\section{Combining Local Stores into a Highly-Available Global Store}
\section{Handling Failed Nodes}
\section{Tuning Reliability Versus Latency}
\section{Multiple Datacenter Support}
+\section{Appendix: Data Formats}
1  dsk-dir.h
@@ -13,6 +13,7 @@ struct _DskDir
unsigned buf_alloced;
char *buf;
unsigned buf_length;
+ dsk_boolean locked;
DskDir *alias;

No commit comments for this range

Something went wrong with that request. Please try again.