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

Aleksey Yeschenko commented on CASSANDRA-13475:
-----------------------------------------------

I’m with Blake on this.

Now, I’ll be upfront: I’m not 100% sold on the idea of making the storage 
engine pluggable, although I am warming up to it, at least if someone did a 
really good job.

What I was expecting from the patch:

1. Keyspace abstracted away, ColumnFamilyStore (Table) interfaces extracted, 
with all sstable/compaction/etc. specific logic isolated into concrete default 
engine implementation
2. Some kind of StorageEngine interface that would consume metadata and return 
initialized engine-specific instances of Keyspace/Table classes
3. Abstracted away metadata, now that I think of it; default compaction, 
compression, and other params don’t make sense for rocksdb engine, I assume, 
nor would they for some other non-default implementations; also should be able 
to set options for non-default engine via CQL
4. Same goes for metrics; you’d be still creating all the default metric per 
ks/table, many of which making no sense in other engines; leaky
5. Acknowledgement and enumeration of everything that needs to be modified. And 
a lot needs to be - from startup checks to periodic tasks, to even some read 
logic that uses CFS for row size estimation

Assuming that the engine would be set on per-keyspace basis (which IMO makes 
most sense), Keyspace and CFS would be the primary extension points; not 
‘CFS/Keyspace will become a thin wrapper around the storage engine API’, but 
the exact opposite.

The suggested patch/API is very minimal, and not in a good way. It’s a hacky 
default engine bypass mechanism, not a proper abstraction of the storage 
engine, and not even a good starting point, imo :\

More importantly, I feel like the full scope of a properly implemented 
abstracted out storage engine is realized; done right, it’s a *huge* effort. I 
would like to see some kind of plan, with the full scope at least described, 
and perhaps suggested phases/steps of getting there.

> First version of pluggable storage engine API.
> ----------------------------------------------
>
>                 Key: CASSANDRA-13475
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13475
>             Project: Cassandra
>          Issue Type: Sub-task
>            Reporter: Dikang Gu
>            Assignee: Dikang Gu
>
> In order to support pluggable storage engine, we need to define a unified 
> interface/API, which can allow us to plug in different storage engines for 
> different requirements. 
> In very high level, the storage engine interface should include APIs to:
> 1. Apply update into the engine.
> 2. Query data from the engine.
> 3. Stream data in/out to/from the engine.
> 4. Table operations, like create/drop/truncate a table, etc.
> 5. Various stats about the engine.
> I create this ticket to start the discussions about the interface.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to