It also doesn't solve the atomicity problem, which is its own challenge. We
would probably need to merge the memtables for the entire keyspace/node,
and split them out into their own sstables on flush. Or introduce mutual
exclusion at the partition key level for the node.

On Fri, May 1, 2015 at 3:01 PM, Jonathan Ellis <jbel...@gmail.com> wrote:

> I'm down for adding JOIN support within a partition, eventually.  I can see
> a lot of stuff I'd rather prioritize higher in the short term though.
>
> On Fri, May 1, 2015 at 8:44 AM, Jonathan Haddad <j...@jonhaddad.com> wrote:
>
> > I think what Benedict has described feels very much like a very
> specialized
> > version of the following:
> >
> > 1. Updates to different tables in a batch become atomic if the node is a
> > replica for the partition
> > 2. Supporting Inner joins if the partition key is the same in both
> tables.
> >
> > I'd rather see join support personally :)
> >
> > Jon
> >
> > On Fri, May 1, 2015 at 6:38 AM graham sanderson <gra...@vast.com> wrote:
> >
> > > I 100% agree with Benedict, but just to be clear about my use case
> > >
> > > 1) We have state of lets say real estate listings
> > > 2) We get field level deltas for them
> > > 3) Previously we would store the base state all the deltas in partition
> > > and roll them up from the beginning of time (this was a prototype and
> > silly
> > > since there was no expiration strategy)
> > > 4) Preferred plan is to keep current state in a static map (i.e. one
> > delta
> > > field only updates one cell) - we are MVCC but in the common case the
> > > latest version will be what we want
> > > 5) However we require history, so we’d use the partition to keep TTL
> > > deltas going backwards from the now state - this seems like a common
> > > pattern people would want. Note also that sometimes we might need to
> > apply
> > > reverse deltas if C* is ahead of our SOLR indexes
> > >
> > > The static columns and the regular columns ARE completely different in
> > > behavior/lifecycle, so I’d definitely vote for them being treated as
> > such.
> > >
> > >
> > > > On May 1, 2015, at 7:27 AM, Benedict Elliott Smith <
> > > belliottsm...@datastax.com> wrote:
> > > >
> > > >>
> > > >> How would it be different from creating an actual real extra table
> > > instead?
> > > >
> > > >
> > > > There's nothing that warrants making the codebase more complex to
> > > >> accomplish something it already does.
> > > >
> > > >
> > > > As far as I was aware, the only point of static columns was to
> support
> > > the
> > > > thrift ability to mutate and read them in the same expression, with
> > > > atomicity and isolation. As to whether or not it is more complex, I'm
> > not
> > > > at all convinced that it would be. We have had a lot of unexpected
> > > special
> > > > casing added to ensure they behave correctly (e.g. paging is broken),
> > and
> > > > have complicated the comparison/slice logic to accommodate them, so
> > that
> > > it
> > > > is harder to reason about (and to optimise). They also have very
> > > different
> > > > compaction characteristics, so the complexity on the user is
> increased
> > > > without their necessarily realising it. All told, it introduces a lot
> > > more
> > > > subtlety of behaviour than there would be with a separate set of
> > > sstables,
> > > > or perhaps a separate file attached to each sstable.
> > > >
> > > > Of course, we've already implemented it as a specialisation of the
> > > > slice/comparator, I think because it seemed like the least frictional
> > > path
> > > > to do so, but that doesn't mean it is the least complex. It does mean
> > > it's
> > > > the least work (assuming we're now on top of the bugs), which is its
> > own
> > > > virtue.
> > > >
> > > > There are some advantages to having them managed separately, and
> > > advantages
> > > > to having them combined. Combined, for small partitions, they can be
> > read
> > > > in the same seek. However for large partitions this is no longer
> true,
> > > and
> > > > we may behave much worse by polluting the page cache with lots of
> > > unwanted
> > > > data that is adjacent to the static columns. If they were managed
> > > > separately, the page cache would be populated mostly with other
> static
> > > > columns, which may be more likely of use. We could quite easily have
> a
> > > > "static column" cache, also, and completely avoid merging them. Or at
> > > least
> > > > we could easily read them with collectTimeOrderedData instead of
> > > > collectAllData semantics.
> > > >
> > > > All told, it certainly isn't a terrible idea, and shouldn't be
> > dismissed
> > > so
> > > > readily. Personally I think in the long run whether or not we manage
> > > static
> > > > columns together with non-static columns is dependent on if we intend
> > to
> > > > add tiered "static" columns (i.e., if each level of clustering
> > component
> > > > can have columns associated with it). If we do, we should definitely
> > keep
> > > > it all inline. If not, it probably permits a lot better behaviour to
> > > > separate them, since it's easier to reason about and improve their
> > > distinct
> > > > characteristics.
> > > >
> > > >
> > > > On Fri, May 1, 2015 at 1:24 AM, graham sanderson <gra...@vast.com>
> > > wrote:
> > > >
> > > >> Well you lose the atomicity and isolation, but in this case that is
> > > >> probably fine
> > > >>
> > > >> That said, in every interaction I’ve had with static columns, they
> > seem
> > > to
> > > >> be an odd duck (e.g. adding or complicating range slices), perhaps
> > > worthy
> > > >> of their own code path and sstables. Just food for thought.
> > > >>
> > > >>> On Apr 30, 2015, at 7:13 PM, Jonathan Haddad <j...@jonhaddad.com>
> > > wrote:
> > > >>>
> > > >>> If you want it in a separate sstable, just use a separate table.
> > > There's
> > > >>> nothing that warrants making the codebase more complex to
> accomplish
> > > >>> something it already does.
> > > >>>
> > > >>> On Thu, Apr 30, 2015 at 5:07 PM graham sanderson <gra...@vast.com>
> > > >> wrote:
> > > >>>
> > > >>>> Anyone here have an opinion; how realistic would it be to have a
> > > >> separate
> > > >>>> memtable/sstable for static columns?
> > > >>>>
> > > >>>> Begin forwarded message:
> > > >>>>
> > > >>>> *From: *Jonathan Haddad <j...@jonhaddad.com>
> > > >>>> *Subject: **Re: DateTieredCompactionStrategy and static columns*
> > > >>>> *Date: *April 30, 2015 at 3:55:46 PM CDT
> > > >>>> *To: *u...@cassandra.apache.org
> > > >>>> *Reply-To: *u...@cassandra.apache.org
> > > >>>>
> > > >>>>
> > > >>>> I suspect this will kill the benefit of DTCS, but haven't tested
> it
> > to
> > > >> be
> > > >>>> 100% here.
> > > >>>>
> > > >>>> The benefit of DTCS is that sstables are selected for compaction
> > based
> > > >> on
> > > >>>> the age of the data, not their size.  When you mix TTL'ed data and
> > non
> > > >>>> TTL'ed data, you end up screwing with the "drop the entire
> SSTable"
> > > >>>> optimization.  I don't believe this is any different just because
> > > you're
> > > >>>> mixing in static columns.  What I think will happen is you'll end
> up
> > > >> with
> > > >>>> an sstable that's almost entirely TTL'ed with a few static columns
> > > that
> > > >>>> will never get compacted or dropped.  Pretty much the worst
> > scenario I
> > > >> can
> > > >>>> think of.
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> On Thu, Apr 30, 2015 at 11:21 AM graham sanderson <
> gra...@vast.com>
> > > >> wrote:
> > > >>>>
> > > >>>>> I have a potential use case I haven’t had a chance to prototype
> > yet,
> > > >>>>> which would normally be a good candidate for DTCS (i.e. data
> > > delivered
> > > >> in
> > > >>>>> order and a fixed TTL), however with every write we’d also be
> > > updating
> > > >> some
> > > >>>>> static cells (namely a few key/values in a static map<text.text>
> > CQL
> > > >>>>> column). There could also be explicit deletes of keys in the
> static
> > > >> map,
> > > >>>>> though that’s not 100% necessary.
> > > >>>>>
> > > >>>>> Since those columns don’t have TTL, without reading thru the code
> > > code
> > > >>>>> and/or trying it, I have no idea what effect this has on DTCS
> > > (perhaps
> > > >> it
> > > >>>>> needs to use separate sstables for static columns). Has anyone
> > tried
> > > >> this.
> > > >>>>> If not I eventually will and will report back.
> > > >>>>
> > > >>>>
> > > >>
> > > >>
> > >
> > >
> >
>
>
>
> --
> Jonathan Ellis
> Project Chair, Apache Cassandra
> co-founder, http://www.datastax.com
> @spyced
>

Reply via email to