I really like the idea.

On Mon, Nov 19, 2018, 23:45 Vladimir Ozerov <[email protected] wrote:

> Igniters,
>
> We had several discussion about cache groups [1]. Our current consensus is
> that this is not that good design decision - bad scan performance, no API.
> A kind of shortcut to solve memory consumption problems. For this reason we
> try to avoid exposing "cache group" to API when possible. Also we
> understand that current file-per-partition approach is not ideal either -
> when there are too many partitions we have to fsync a lot of files. And as
> an idea for "bright future" we consider tablespaces - one or several files
> where all database objects are stored in dedicated "segments", which are
> allocated in smaller units called "extents".
>
> I was thinking on how to "legalize" cache groups on API on the one hand
> (product needs them currently), and to let real tablespaces to appear in
> future. Idea is simple - treat cache group as special kind of tablespace.
> We may say that current storage organization is one type of tablespace, and
> proposed "file-segment-extent" storage organization is another type of
> tablespace.
>
> With this in mind we can configure tablespaces in IgniteConfiguration, then
> assign each cache a tablespace. As advanced tasks we may allow dynamic
> table space create/alter/drop, I'll show SQL examples below.
>
> // Interface
> interface Tablespace {
>     String name();
> }
>
> // Current non-shared tablespace (aka "physical cache")
> class FilePerPartitionTablespace implements Tablespace {
>     // ...
> }
>
> // Shared tablespace (aka "cache group") - note that now we have a legal
> place for cache group configuration:
> class FilePerPartitionSharedTablespace implements Tablespace {
>     CacheMode cacheMode;
>     CacheAtomicityMode cacheAtomicityMode;
>     AffinityFunction affinityFunction;
>     // + Other parameters from
> ClusterCachesInfo.validateCacheGroupConfiguration
>     // + Some parameters from "DataRegionConfiguration" (e.g. paths)
> }
>
> // Future "real" tablespace
> class SegmentedTablespace implements Tablespace {
>     // Whatever is needed.
> }
>
> // Cache configuration
> class CacheConfiguration {
>     ...
>     String tablespace;
>    ...
> }
>
> // Managing tablespaces from SQL:
> CREATE TABLESPACE my_tbs ENGINE=FILE_PER_PARTITION_SHARED
> CACHE_MODE=PARTITIONED BACKUPS=1
> ALTER TABLESPACE my_tbs ENCRYPTED=1
> CREATE TABLE my_table (...) TABLESPACE my_tbs
>
> What do you think?
>
> Vladimir.
>
> [1]
>
> http://apache-ignite-developers.2346864.n4.nabble.com/Remove-cache-groups-in-AI-3-0-td29184.html
>

Reply via email to