Not maybe. You are absolutely right. Bad idea. Hmpf.

Am 05.03.2017 09:23 schrieb "benjamin roth" <brs...@gmail.com>:

> Sorry. Answer was to fast. Maybe you are right.
>
> Am 05.03.2017 09:21 schrieb "benjamin roth" <brs...@gmail.com>:
>
>> No. You just change the partitioner. That's all
>>
>> Am 05.03.2017 09:15 schrieb "DuyHai Doan" <doanduy...@gmail.com>:
>>
>>> "How can that be achieved? I haven't done "scientific researches" yet
>>> but I
>>> guess a "MV partitioner" could do the trick. Instead of applying the
>>> regular partitioner, an MV partitioner would calculate the PK of the base
>>> table (which is always possible) and then apply the regular partitioner."
>>>
>>> The main purpose of MV is to avoid the drawbacks of 2nd index
>>> architecture,
>>> e.g. to scan a lot of nodes to fetch the results.
>>>
>>> With MV, since you give the partition key, the guarantee is that you'll
>>> hit
>>> a single node.
>>>
>>> Now if you put MV data on the same node as base table data, you're doing
>>> more-or-less the same thing as 2nd index.
>>>
>>> Let's take a dead simple example
>>>
>>> CREATE TABLE user (user_id uuid PRIMARY KEY, email text);
>>> CREATE MV user_by_email AS SELECT * FROM user WHERE user_id IS NOT NULL
>>> AND
>>> email IS NOT NULL PRIMARY KEY((email),user_id);
>>>
>>> SELECT * FROM user_by_email WHERE email = xxx;
>>>
>>> With this query, how can you find the user_id that corresponds to email
>>> 'xxx' so that your MV partitioner idea can work ?
>>>
>>>
>>>
>>> On Sun, Mar 5, 2017 at 9:05 AM, benjamin roth <brs...@gmail.com> wrote:
>>>
>>> > While I was reading the MV paragraph in your post, an idea popped up:
>>> >
>>> > The problem with MV inconsistencies and inconsistent range movement is
>>> that
>>> > the "MV contract" is broken. This only happens because base data and
>>> > replica data reside on different hosts. If base data + replicas would
>>> stay
>>> > on the same host then a rebuild/remove would always stream both
>>> matching
>>> > parts of a base table + mv.
>>> >
>>> > So my idea:
>>> > Why not make a replica ALWAYS stay local regardless where the token of
>>> a MV
>>> > would point at. That would solve these problems:
>>> > 1. Rebuild / remove node would not break MV contract
>>> > 2. A write always stays local:
>>> >
>>> > a) That means replication happens sync. That means a quorum write to
>>> the
>>> > base table guarantees instant data availability with quorum read on a
>>> view
>>> >
>>> > b) It saves network roundtrips + request/response handling and helps to
>>> > keep a cluster healthier in case of bulk operations (like repair
>>> streams or
>>> > rebuild stream). Write load stays local and is not spread across the
>>> whole
>>> > cluster. I think it makes the load in these situations more
>>> predictable.
>>> >
>>> > How can that be achieved? I haven't done "scientific researches" yet
>>> but I
>>> > guess a "MV partitioner" could do the trick. Instead of applying the
>>> > regular partitioner, an MV partitioner would calculate the PK of the
>>> base
>>> > table (which is always possible) and then apply the regular
>>> partitioner.
>>> >
>>> > I'll create a proper Jira for it on monday. Currently it's sunday here
>>> and
>>> > my family wants me back so just a few thoughts on this right now.
>>> >
>>> > Any feedback is appreciated!
>>> >
>>> > 2017-03-05 6:34 GMT+01:00 Edward Capriolo <edlinuxg...@gmail.com>:
>>> >
>>> > > On Sat, Mar 4, 2017 at 10:26 AM, Jeff Jirsa <jji...@gmail.com>
>>> wrote:
>>> > >
>>> > > >
>>> > > >
>>> > > >
>>> > > > > On Mar 4, 2017, at 7:06 AM, Edward Capriolo <
>>> edlinuxg...@gmail.com>
>>> > > > wrote:
>>> > > > >
>>> > > > >> On Fri, Mar 3, 2017 at 12:04 PM, Jeff Jirsa <jji...@gmail.com>
>>> > wrote:
>>> > > > >>
>>> > > > >> On Fri, Mar 3, 2017 at 5:40 AM, Edward Capriolo <
>>> > > edlinuxg...@gmail.com>
>>> > > > >> wrote:
>>> > > > >>
>>> > > > >>>
>>> > > > >>> I used them. I built do it yourself secondary indexes with
>>> them.
>>> > They
>>> > > > >> have
>>> > > > >>> there gotchas, but so do all the secondary index
>>> implementations.
>>> > > Just
>>> > > > >>> because datastax does not write about something. Lets see like
>>> 5
>>> > > years
>>> > > > >> ago
>>> > > > >>> there was this: https://github.com/hmsonline/c
>>> assandra-triggers
>>> > > > >>>
>>> > > > >>>
>>> > > > >> Still in use? How'd it work? Production ready? Would you still
>>> do it
>>> > > > that
>>> > > > >> way in 2017?
>>> > > > >>
>>> > > > >>
>>> > > > >>> There is a fairly large divergence to what actual users do and
>>> what
>>> > > > other
>>> > > > >>> groups 'say' actual users do in some cases.
>>> > > > >>>
>>> > > > >>
>>> > > > >> A lot of people don't share what they're doing (for business
>>> > reasons,
>>> > > or
>>> > > > >> because they don't think it's important, or because they don't
>>> know
>>> > > > >> how/where), and that's fine but it makes it hard for anyone to
>>> know
>>> > > what
>>> > > > >> features are used, or how well they're really working in
>>> production.
>>> > > > >>
>>> > > > >> I've seen a handful of "how do we use triggers" questions in
>>> IRC,
>>> > and
>>> > > > they
>>> > > > >> weren't unreasonable questions, but seemed like a lot of pain,
>>> and
>>> > > more
>>> > > > >> than one of those people ultimately came back and said they used
>>> > some
>>> > > > other
>>> > > > >> mechanism (and of course, some of them silently disappear, so we
>>> > have
>>> > > no
>>> > > > >> idea if it worked or not).
>>> > > > >>
>>> > > > >> If anyone's actively using triggers, please don't keep it a
>>> secret.
>>> > > > Knowing
>>> > > > >> that they're being used would be a great way to justify
>>> continuing
>>> > to
>>> > > > >> maintain them.
>>> > > > >>
>>> > > > >> - Jeff
>>> > > > >>
>>> > > > >
>>> > > > > "Still in use? How'd it work? Production ready? Would you still
>>> do it
>>> > > > that way in 2017?"
>>> > > > >
>>> > > > > I mean that is a loaded question. How long has cassandra had
>>> > Secondary
>>> > > > > Indexes? Did they work well? Would you use them? How many times
>>> were
>>> > > > they re-written?
>>> > > >
>>> > > > It wasn't really meant to be a loaded question; I was being sincere
>>> > > >
>>> > > > But I'll answer: secondary indexes suck for many use cases, but
>>> they're
>>> > > > invaluable for their actual intended purpose, and I have no idea
>>> how
>>> > many
>>> > > > times they've been rewritten but they're production ready for their
>>> > > narrow
>>> > > > use case (defined by cardinality).
>>> > > >
>>> > > > Is there a real triggers use case still? Alternative to MVs?
>>> > Alternative
>>> > > > to CDC? I've never implemented triggers - since you have, what's
>>> the
>>> > > level
>>> > > > of surprise for the developer?
>>> > >
>>> > >
>>> > > :) You mention alternatives/: Lets break them down.
>>> > >
>>> > > MV:
>>> > > They seem to have a lot pf promise. IE you can use them for things
>>> other
>>> > > then equality searches, and I do think the CQL example with the top N
>>> > high
>>> > > scores is pretty useful. Then again our buddy Mr Roth has a thread
>>> named
>>> > > "Rebuild / remove node with MV is inconsistent". I actually think a
>>> lot
>>> > of
>>> > > the use case for mv falls into the category of "something you should
>>> > > actually be doing with storm". I can vibe with the concept of not
>>> > needing a
>>> > > streaming platform, but i KNOW storm would do this correctly. I don't
>>> > want
>>> > > to land on something like 2x index v1 v2 where there was fundamental
>>> > flaws
>>> > > at scale.(not saying this is case but the rebuild thing seems a bit
>>> > scary)
>>> > >
>>> > > CDC:
>>> > > I slightly afraid of this. Rational: A extensible piece design
>>> > specifically
>>> > > for a close source implementation of hub and spoke replication. I
>>> have
>>> > some
>>> > > experience trying to "play along" with extensible things
>>> > > https://issues.apache.org/jira/browse/CASSANDRA-12627
>>> > > "Thus, I'm -1 on {[PropertyOrEnvironmentSeedProvider}}."
>>> > >
>>> > > Not a rub, but I can't even get something committed using an existing
>>> > > extensible interface. Heaven forbid a use case I have would want to
>>> > > *change*
>>> > > the interface, I would probably get a -12. So I have no desire to
>>> try and
>>> > > maintain a CDC implementation. I see myself falling into the same old
>>> > "why
>>> > > you want to do this? -1" trap.
>>> > >
>>> > > Coordinator Triggers:
>>> > > To bring things back really old-school coordinator triggers everyone
>>> > always
>>> > > wanted. In a nutshell, I DO believe they are easier to reason about
>>> then
>>> > > MV. It is pretty basic, it happens on the coordinator there is no
>>> > batchlogs
>>> > > or whatever, best effort possibly requiring more nodes then as the
>>> keys
>>> > > might be on different services. Actually I tend do like features
>>> like.
>>> > Once
>>> > > something comes on the downswing of  "software hype cycle" you know
>>> it is
>>> > > pretty stable as everyone's all excited about other things.
>>> > >
>>> > > As I said, I know I can use storm for top-n, so what is this feature?
>>> > Well
>>> > > I want to optimize my network transfer generally by building my batch
>>> > > mutations on the server. Seems reasonable. Maybe I want to have my
>>> own
>>> > > little "read before write" thing like CQL lists.
>>> > >
>>> > > The warts, having tried it. First time i tried it found it did not
>>> work
>>> > > with non batches, patched in 3 hours. Took weeks before some CQL
>>> user had
>>> > > the same problem and it got fixed :) There was no dynamic stuff at
>>> the
>>> > time
>>> > > so it was BYO class loader. Going against the grain and saying.
>>> > >
>>> > > The thing you have to realize with the best effort coordinator
>>> triggers
>>> > are
>>> > > that "transaction" could be incomplete and well that sucks maybe for
>>> some
>>> > > cases. But I actually felt the 2x index implementations force all
>>> > problems
>>> > > into a type of "foreign key transnational integrity " that does not
>>> make
>>> > > sense for cassandra.
>>> > >
>>> > > Have you every used elastic search, there version of consistency is
>>> write
>>> > > something, keep reading and eventually you see it, wildly popular :)
>>> It
>>> > is
>>> > > a crazy world.
>>> > >
>>> >
>>>
>>

Reply via email to