Maybe in the short term just some CQL syntax to detect the case of a static 
only row

SELECT id, inserted, large_static_thing from series;

works, and returns a single row with null for inserted if there are no “rows”, 
but this is a fictitious row… (and I must include large_static_thing in order 
to get id) - and of course I’d have to filter for null inserted on the client.

If i was to do manual clean up, I’d really want a way to select just the 
partition keys with only static columns as is detected by the code that makes 
the fictitious row today - ideally it’d just check for the absence of any 
column names prefixed by the partition key

On Jun 24, 2014, at 12:26 AM, graham sanderson <gra...@vast.com> wrote:

> Note, that as I think about it, if you had the new OnDiskAtom time with TTL 
> and no value, then you wouldn’t need anything special about static columns, 
> you’d just need a CQL syntax to update/set the TTL for a column which might 
> be useful for lots of things.
> 
> On Jun 24, 2014, at 12:22 AM, graham sanderson <gra...@vast.com> wrote:
> 
>> So, I was thinking about a new use case, where an ideal situation would be 
>> to have something like
>> 
>> CREATE TABLE series {
>>      id uuid,
>>      inserted timeuuid,
>>      small_thing blob,
>>      large_static_thing blob static,
>>      PRIMARY KEY (id, inserted)
>> }
>> 
>> So this is my first use of static columns, but I also want to use TTL (I 
>> just built 2.0.8 to play with)
>> 
>> https://issues.apache.org/jira/browse/CASSANDRA-6782 and friends are pretty 
>> confusing when it comes to TTL and the row marker, but from my playing, it 
>> seems at least you can control behavior because you can (re) INSERT the 
>> primary key values only using or not using a TTL. (Side node docs still say 
>> UPDATE and INSERT are identical which is strictly no longer true)
>> 
>> So what I really want is the ability to do
>> 
>> INSERT INTO series (id, large_static_thing)
>> 
>> then repeated 
>> 
>> INSERT INTO series (id, inserted, small_thing) VALUE (a, b, c) USING TTL X;
>> 
>> and have the partition (and the static column) disappear when the last “row” 
>> for the partition key is gone.
>> 
>> I can get this behavior if I update the large_static_thing every time along 
>> with inserting small_thiing, but that is exactly what I don’t want to do 
>> because it is large and static.
>> 
>> It sort of seems semantically right that "a special column that is shared by 
>> all the rows of the same partition”  should at least have an option to have 
>> it expire when all “rows” expire.
>> 
>> It seems like this would be technically feasible (though very much non 
>> trivial) if you had a syntax, say “large_static_thing blob static 
>> autoexpiring”, to make the static column an ExpiringColumn, and have any row 
>> updates with TTL insert a new OnDiskAtom type (that contains a TTL but no 
>> value) for the static column. These could be reconciled/reduced/compacted or 
>> whatever with the ExpiringColumn during read and compaction.
>> 
>> It all sounds a bit over-complicated… so:
>> 
>> 1) Does this sounds like a useful feature, or is it a me only use case
>> 2) Can someone think of a way to model this reasonably efficiently today 
>> without using TTL on the static column (and thus having to rewrite it every 
>> time) - not that I’m trying to be abusive and I haven’t thought this thru, 
>> but my spider sense makes me think that maybe I can abuse an index on a 
>> small expiring column to quickly find empty partition keys
>> 3) Is it actually simpler to implement than I think in the code base (This 
>> is the first time I’ve peeked at these areas of the code)
>> 4) If implemented as I suggested above, does that have to be done in a major 
>> version?
>> 
>> Thanks,
>> 
>> Graham
>> 
>> 
> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to