Just use an atomic batch that holds both the insert and deletes: http://www.datastax.com/dev/blog/atomic-batches-in-cassandra-1-2
On Tue, Jun 3, 2014 at 2:13 PM, Charlie Mason <charlie....@gmail.com> wrote: > Hi All. > > I have a system thats going to make possibly several concurrent changes to > a running total. I know I could use a counter for this. However I have > extra meta data I can store with the changes which would allow me to reply > the changes. If I use a counter and it looses some writes I can't recover > it as I will only have its current total not the extra meta data to know > where to replay from. > > What I was planning to do was write each change of the value to a CQL > table with a Time UUID as a row level primary key as well as a partition > key. Then when I need to read the running total back I will do a query for > all the changes and add them up to get the total. > > As there could be tens of thousands of these I want to have a period after > which these are consolidated. Most won't be any where near that but a few > will which I need to be able to support. So I was also going to have a > consolidated total table which holds the UUID of the values consolidated up > to. Since I can bound the query for the recent updates by the UUID I should > be able to avoid all the tombstones. So if the read encounters any changes > that can be consolidated it inserts a new consolidated value and deletes > the newly consolidated changes. > > What I am slightly worried about is what happens if the consolidated value > insert fails but the deletes to the change records succeed. I would be left > with an inconsistent total indefinitely. I have come up with a couple of > ideas: > > > 1, I could make it require all nodes to acknowledge it before deleting the > difference records. > > 2, May be I could have another period after its consolidated but before > its deleted? > > 3, Is there anyway I could use the TTL to allow to it to be deleted after > a period of time? Chances are another read would come in and fix the value. > > > Anyone got any other suggestions on how I could implement this? > > > Thanks, > > Charlie M > -- Tyler Hobbs DataStax <http://datastax.com/>