[
https://issues.apache.org/jira/browse/CASSANDRA-10216?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14718321#comment-14718321
]
Sylvain Lebresne commented on CASSANDRA-10216:
----------------------------------------------
Since this comes from an offline discussion with Sam, I'll expand on my point
of view. I don't like that internal distinction we make between "column" and
"row" index because every index is a row index, it gets a row (a bunch of
column values) and decide to index it or not. Whether it checks a single column
value to do so or multiple values, and how exactly it indexes, are
implementation details of the index. Or to put it another way, every index is a
column (value) index because a row is really just a bunch of column, nothing
else. So I truly think this notion of "column" versus "row" is ill-defined.
To be more concrete, when we do:
{noformat}
CREATE INDEX foo ON t(c1, c2);
{noformat}
then I think {{c1, c2}} are really just options to be passed to the index
implementation. Or parameters if you prefer. Now, if a custom index doesn't
have a need for that option/parameter because which column values it'll look is
defined in some other way (though it's {{OPTIONS}} map typically), it's fine,
it just takes an empty list of parameter, but that doesn't make it a particular
type of index.
Regarding the {{system_schema.indexes}} and how we handle this internally, I
think I would actually even prefer to move the {{target_columns}} inside the
index {{options}} map. If only because what we pass to the {{CREATE INDEX}} is
not necessarily a set of columns, it can be a function (we already support some
hard-coded functions for maps but we'll want to expand that for true functional
index soon enough).
Currently, for map indexes, we extract the columns into {{target_columns}} and
have separate had-hock options for the different functions (keys, values,
keys_and_values). If instead we were to remove {{target_columns}} (and
{{target_type}} obviously) and simply have a "reserved" {{target}} option in
the {{options}} map, whose value would be the string in the {{CRATE INDEX}}
query, then that would:
* replace the pretty had-hock "index_keys", "index_values",
"index_keys_and_values". This replacement would make {{system_schema.indexes}}
more user friendly since the translation between the table results and the
original {{CREATE INDEX}} statement it represents would be a lot more direct.
* be future proof for functional indexes, which would be handled consistently
with our pre-existing hard-coded map indexes (that are functional indexes after
all).
That would leave the parsing of that {{target}} option to index
implementations, but that's not a big deal and having it be completely generic
might offer interesting possibility in the future.
Now, I do believe that this {{target}} option suggestion is the best way to go,
but if there is strong opposition, I do think we should at least get rid of
{{target_type}} for the reasons expressed above (custom indexes that don't need
any particular target will just use an empty set for {{target_columns}}, which
will be more consistent with the {{CREATE INDEX}} syntax suggested by [~beobal]
in CASSANDRA-10124 anyway).
> Remove target type from internal index metadata
> -----------------------------------------------
>
> Key: CASSANDRA-10216
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10216
> Project: Cassandra
> Issue Type: Improvement
> Reporter: Sam Tunnicliffe
> Fix For: 3.0.0 rc1
>
>
> As part of CASSANDRA-6716 & in anticipation of CASSANDRA-10124, a distinction
> was introduced between secondary indexes which target a fixed set of 1 or
> more columns in the base data, and those which are agnostic to the structure
> of the underlying rows. This distinction is manifested in
> {{IndexMetadata.targetType}} and {{system_schema.indexes}}, in the
> {{target_type}} column. It could be argued that this distinction complicates
> the codebase without providing any tangible benefit, given that the target
> type is not actually used anywhere.
> It's only the impact on {{system_schema.indexes}} that makes puts this on the
> critical path for 3.0, any code changes are just implementation details.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)