[
https://issues.apache.org/jira/browse/CASSANDRA-3625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylvain Lebresne updated CASSANDRA-3625:
----------------------------------------
Attachment: (was: 0001-allow-comparing-different-types.patch)
> Do something about DynamicCompositeType
> ---------------------------------------
>
> Key: CASSANDRA-3625
> URL: https://issues.apache.org/jira/browse/CASSANDRA-3625
> Project: Cassandra
> Issue Type: Improvement
> Components: Core
> Reporter: Sylvain Lebresne
>
> Currently, DynamicCompositeType is a super dangerous type. We cannot leave it
> that way or people will get hurt.
> Let's recall that DynamicCompositeType allows composite column names without
> any limitation on what each component type can be. It was added to basically
> allow to use different rows of the same column family to each store a
> different index. So for instance you would have:
> {noformat}
> index1: {
> "bar":24 -> someval
> "bar":42 -> someval
> "foo":12 -> someval
> ...
> }
> index2: {
> 0:uuid1:3.2 -> someval
> 1:uuid2:2.2 -> someval
> ...
> }
> ....
> {noformat}
> where index1, index2, ... are rows.
> So each row have columns whose names have similar structure (so they can be
> compared), but between rows the structure can be different (we neve compare
> two columns from two different rows).
> But the problem is the following: what happens if in the index1 row above,
> you insert a column whose name is 0:uuid1 ? There is no really meaningful way
> to compare "bar":24 and 0:uuid1. The current implementation of
> DynamicCompositeType, when confronted with this, says that it is a user error
> and throw a MarshalException.
> The problem with that is that the exception is not throw at insert time, and
> it *cannot* be because of the dynamic nature of the comparator. But that
> means that if you do insert the wrong column in the wrong row, you end up
> *corrupting* a sstable.
> It is too dangerous a behavior. And it's probably made worst by the fact that
> some people probably think that DynamicCompositeType should be superior to
> CompositeType since you know, it's dynamic.
> One solution to that problem could be to decide of some random (but
> predictable) order between two incomparable component. For example we could
> design that IntType < LongType < StringType ...
> Note that even if we do that, I would suggest renaming the
> DynamicCompositeType to something that suggest that CompositeType is always
> preferable to DynamicCompositeType unless you're really doing very advanced
> stuffs.
> Opinions?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira