首页 文章

为什么我的观点具体化观点不反映这些变化?

提问于
浏览
0

嗨,实际上我在一个项目上使用cassandra,但我有一个物化视图的问题,在片刻解释我在cassandra和问题中的设置 .

我在Google Cloud中有两个实例,每个实例都有一个具有下一个要求的节点:

  • Cassandra 3.10.0版

  • CQLSH版本5.0.1

在服务器上

  • 1核心 - CPU Haswell

  • 6.5GB RAM

  • HDD 240GB

  • Ubuntu Server 16.04.2 LTS

每当我更新具有物化视图的表时,前者都会正确更新,但物化视图不会反映这些更改 .

表现得像这样的表有23个字段:

  • 4个用于分区和群集密钥的字段

  • 12个数据字段

  • 7个字段用于作为物化视图定义条件的标志

  • 8个二级索引应用了许多字段

物化视图仅复制原始表中的12个字段,并且这些字段不包含在这些字段中 .

MODIFIED

物化视图句子的示例:

CREATE MATERIALIZED VIEW IF NOT EXISTS sav.laboratorio_unidad AS
    SELECT unidad_politecnica, seccion_politecnica, modulo, datos_modificados, /* Primary Key */
        tipo, id_contacto, contacto, foto, descripcion,
        area, palabra_clave, sector_impacto /* Clasificación */
    FROM sav.laboratorio
    WHERE tipo IS NOT NULL
        AND unidad_politecnica IS NOT NULL 
        AND seccion_politecnica IS NOT NULL
        AND modulo IS NOT NULL
        AND datos_modificados IS NOT NULL
        AND creada_sin_mostrar = false
        AND datos_modificados = false 
        AND validado = true
        AND modificado IS NOT NULL
        AND revisado IS NOT NULL
        AND eliminacion = false
        AND revalidado IS NOT NULL
    PRIMARY KEY ((unidad_politecnica), seccion_politecnica, tipo, modulo, datos_modificados);

是我 table 的DESCRIBE

CREATE TABLE sav.laboratorio (
    unidad_politecnica text,
    seccion_politecnica text,
    modulo text,
    datos_modificados boolean,
    actualizado timestamp,
    area set<text>,
    certificado set<frozen<prueba>>,
    contacto frozen<contacto>,
    creada_sin_mostrar boolean,
    creado timestamp,
    descripcion text,
    eliminacion boolean,
    equipamiento frozen<equipo>,
    foto frozen<archivo>,
    id_contacto uuid,
    modificado boolean,
    palabra_clave set<text>,
    revalidado boolean,
    revisado boolean,
    sector_impacto set<text>,
    solicitud_eliminacion boolean,
    tipo text,
    validado boolean,
    PRIMARY KEY (unidad_politecnica, seccion_politecnica, modulo, datos_modificados)
) WITH CLUSTERING ORDER BY (seccion_politecnica ASC, modulo ASC, datos_modificados ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
CREATE INDEX laboratorio_creado_sin_mostrar_index ON sav.laboratorio (creada_sin_mostrar);
CREATE INDEX laboratorio_solicitud_eliminacion_index ON sav.laboratorio (solicitud_eliminacion);
CREATE INDEX laboratorio_id_contacto_index ON sav.laboratorio (id_contacto);
CREATE INDEX laboratorio_revisado_index ON sav.laboratorio (revisado);
CREATE INDEX laboratorio_validado_index ON sav.laboratorio (validado);
CREATE INDEX laboratorio_actualizado_index ON sav.laboratorio (actualizado);
CREATE INDEX laboratorio_modificado_index ON sav.laboratorio (modificado);
CREATE INDEX laboratorio_revalidado_index ON sav.laboratorio (revalidado);

CREATE MATERIALIZED VIEW sav.laboratorio_unidad AS
    SELECT unidad_politecnica, seccion_politecnica, tipo, modulo, datos_modificados, area, contacto, descripcion, foto, id_contacto, palabra_clave, sector_impacto
    FROM sav.laboratorio
    WHERE tipo IS NOT NULL AND unidad_politecnica IS NOT NULL AND seccion_politecnica IS NOT NULL AND modulo IS NOT NULL AND datos_modificados IS NOT NULL AND creada_sin_mostrar = false AND datos_modificados = false AND validado = true AND modificado IS NOT NULL AND revisado IS NOT NULL AND eliminacion = false AND revalidado IS NOT NULL
    PRIMARY KEY (unidad_politecnica, seccion_politecnica, tipo, modulo, datos_modificados)
    WITH CLUSTERING ORDER BY (seccion_politecnica ASC, tipo ASC, modulo ASC, datos_modificados ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

对不起,我的 table 是用西班牙语写的

UPDATED

当使用满足给定条件的值执行INSERT语句时,表和物化视图会正确反映更改 .

问题是当执行具有无效值的INSERT语句时,然后执行UPDATE语句以使值满足给定视图的给定条件;在这种情况下,更改将反映在表中,但不会反映在实体化视图中 .

鉴于项目的要求,此工作流程是必需的 .

在这种情况下,当执行和INSERT语句时,在执行具有正确值的UPDATE语句之前,不必显示物化视图中的值,这是对带有一些布尔标志的数据的验证,我们想要使用物化视图,以隐藏或显示数据 .

需要注意的是,我们使用的是具有40个表和19个物化视图的单个键空间,10个物化视图具有相同的问题 .

1 回答

  • 0

    Before Cassandra 3.10

    不属于基表主键的列只能受IS NOT NULL限制的限制 . 不允许其他限制 .

    In Cassandra 3.10 the issue is solved with CASSANDRA-10368

    • 支持在CREATE MATERIALIZED VIEW语句的WHERE子句中对非PRIMARY KEY列进行过滤(CASSANDRA-10368)

    资料来源:https://github.com/apache/cassandra/blob/trunk/CHANGES.txt#L361

    Edited#1

    我认为您在插入时缺少某些字段或插入的数据不满足where子句 . 在您的情况下,数据将被复制到物化视图当且仅当数据满足您在where子句中定义的以下条件时

    tipo IS NOT NULL 
     AND unidad_politecnica IS NOT NULL 
     AND seccion_politecnica IS NOT NULL 
     AND modulo IS NOT NULL 
     AND datos_modificados IS NOT NULL 
     AND creada_sin_mostrar = false 
     AND datos_modificados = false 
     AND validado = true 
     AND modificado IS NOT NULL 
     AND revisado IS NOT NULL 
     AND eliminacion = false 
     AND revalidado IS NOT NULL
    

    以下是满足上述条件的示例insert语句:

    INSERT INTO laboratorio (
        tipo, 
        unidad_politecnica,
        seccion_politecnica, 
        modulo, 
        datos_modificados, 
        modificado, 
        revisado, 
        revalidado, 
        creada_sin_mostrar, 
        eliminacion, 
        validado
    ) VALUES ( 
        'tipo', 
        'unidad', 
        'seccion', 
        'modulo', 
        false, 
        true, 
        true, 
        true, 
        false, 
        false, 
        true
    );
    

    输出:

    cqlsh:sav> SELECT * FROM laboratorio_unidad ;
    
    @ Row 1
    ---------------------+---------
     unidad_politecnica  | unidad
     seccion_politecnica | seccion
     tipo                | tipo
     modulo              | modulo
     datos_modificados   | False
     area                | null
     descripcion         | null
     id_contacto         | null
     palabra_clave       | null
     sector_impacto      | null
    

    Edited#2

    Found the Problem ,问题出在物化视图定义中,在where子句中,您已经定义了与某些列( creada_sin_mostrar, validado, modificado, revisado, eliminacion, revalidado )的关系,而这些列在选择子句中没有出现 . 在selection子句中添加缺少的列 .

    所以你的物化视图架构应该是:

    CREATE MATERIALIZED VIEW IF NOT EXISTS sav.laboratorio_unidad AS
        SELECT unidad_politecnica, seccion_politecnica, modulo, datos_modificados,
            tipo, id_contacto, contacto, foto, descripcion,
            area, palabra_clave, sector_impacto,
            creada_sin_mostrar, validado, modificado, revisado, eliminacion, revalidado
        FROM sav.laboratorio
        WHERE tipo IS NOT NULL
            AND unidad_politecnica IS NOT NULL 
            AND seccion_politecnica IS NOT NULL
            AND modulo IS NOT NULL
            AND datos_modificados IS NOT NULL
            AND creada_sin_mostrar = false
            AND datos_modificados = false 
            AND validado = true
            AND modificado IS NOT NULL
            AND revisado IS NOT NULL
            AND eliminacion = false
            AND revalidado IS NOT NULL
        PRIMARY KEY ((unidad_politecnica), seccion_politecnica, tipo, modulo, datos_modificados);
    

    You have to add the missing column otherwise it will not reflect your change correctly. This is an open issue in cassandra

    https://issues.apache.org/jira/browse/CASSANDRA-13547 https://issues.apache.org/jira/browse/CASSANDRA-11500

相关问题