cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Jirsa (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-7622) Implement virtual tables
Date Sun, 05 Jun 2016 03:34:59 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-7622?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15315709#comment-15315709
] 

Jeff Jirsa commented on CASSANDRA-7622:
---------------------------------------

Proposing: 

{code}
CREATE TABLE 
  USING 'o.a.c.db.virtual.ClassName' 
  [IF NOT EXISTS]
  ks.cfName ( column text, column2 int, etc ) 
  WITH virtual_table_options = {'key':'value', 'key2':'value2'}
{code}

Implication here is that  K_USING already exists in the grammar (e.g. custom indexes), and
it's fairly consistent for users. Presence of {{USING class}} would sets a {{VIRTUAL}} flag
for the CFMetaData. Instantiate the specified class passing the CFMetadata and key/value map,
store the resulting instance somewhere (map within Schema?). Columns would still be defined
in the standard way, persisted to the normal schema tables so drivers / cqlsh wouldn't need
to be modified. 

At minimum, the virtual tables should implement:

{code}
public String class(); 
public Map<String,String> options();
public String keyspace();
public String tableName();

public boolean writable();
public void execute(PartitionUpdate update, Clustering clustering, UpdateParameters params)
throws InvalidRequestException;

public boolean readable();
public ResultMessage.Rows execute(QueryState state, QueryOptions options) throws RequestExecutionException,
RequestValidationException;
{code}

Then, in {{SelectStatement}} if  the CFMetadata isVirtual and {{readable()}}, pass state/options
from {{SelectStatement.execute}} through to the virtual table's version.
Similarly, in {{UpdateStatement}}, if CFMetadata isVirtual for any updated rows and {{writable()}},
pass partitionKey + params from {{UpdataStatement.execute}} through to the virtual table's
version. 

The virtual tables I'm specifically interested in: 
- JMX getters and setters, probably implemented as multiple smaller virtual tables:
-- Ring state / equivalent of {{nodetool gossipinfo}} / {{o.a.c.net FailureDetector}}
-- CF attributes / equivalent of {{o.a.c.db ColumnFamilies.keyspace.table CompactionParametersJson}}
and similar
-- JMX {{o.a.c.metrics}}
- YAML config getters and setters a la CASSANDRA-9233
- SSTableMetadata virtual table (list all sstables per CF, showing timestamps / repairedAt,
ponies may with UPDATE .. SET deleted=true to mark a table obsolete)

Feedback appreciated on all of this, but especially:

- The two meaty {{execute}} functions here provide a lot of flexibility, but also a lot of
rope - is it too much rope? 
- On {{ALTER}} table: we could simply replace the instance in the map, or do we disallow ALTER
(and instead require DROP + CREATE)?

> Implement virtual tables
> ------------------------
>
>                 Key: CASSANDRA-7622
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7622
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Tupshin Harper
>            Assignee: Jeff Jirsa
>             Fix For: 3.x
>
>
> There are a variety of reasons to want virtual tables, which would be any table that
would be backed by an API, rather than data explicitly managed and stored as sstables.
> One possible use case would be to expose JMX data through CQL as a resurrection of CASSANDRA-3527.
> Another is a more general framework to implement the ability to expose yaml configuration
information. So it would be an alternate approach to CASSANDRA-7370.
> A possible implementation would be in terms of CASSANDRA-7443, but I am not presupposing.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message