Привет, на самом деле я работаю с cassandra над проектом, но у меня проблема с материализованными представлениями, через мгновение объясните мои настройки в cassandra и проблему.
У меня есть два экземпляра в Google Cloud, каждый экземпляр имеет узел со следующими требованиями:
- Кассандра версии 3.10.0
- CQLSH версии 5.0.1
На сервере
- 1 ядерный процессор Haswell
- 6,5 ГБ оперативной памяти
- Жесткий диск 240 ГБ
- Сервер Ubuntu 16.04.2 LTS
Каждый раз, когда я обновляю таблицу, которая имеет материализованные представления, первая обновляется правильно, но материализованные представления не отражают эти изменения.
Пример таблицы, которая ведет себя так, имеет 23 поля:
- 4 поля для ключей раздела и кластеризации
- 12 полей для данных
- 7 полей для флагов, которые используются в качестве условий для определения материализованного представления
- 8 вторичных индексов применяют множество полей
Материализованное представление копирует только 12 полей из исходной таблицы, и флаги в них не включены.
ИЗМЕНЕНО
Пример предложения материализованного представления:
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);
Является ли 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';
Извините, но моя таблица написана на испанском
ОБНОВЛЕНО
Когда инструкция INSERT выполняется со значениями, которые удовлетворяют заданным условиям, таблица и материализованное представление правильно отражают изменения.
Проблема заключается в том, что выполняется оператор INSERT с недопустимыми значениями, а затем выполняется оператор UPDATE, чтобы значения удовлетворяли заданным условиям материализованного представления; в этом случае изменения отражаются в таблице, но не отражаются в материализованном представлении.
Этот рабочий процесс необходим с учетом требований проекта.
В этом случае при выполнении оператора INSERT нет необходимости показывать значения в материализованном представлении до тех пор, пока не будет выполнен оператор UPDATE с правильными значениями, это проверка данных с некоторыми логическими флагами, и мы хотим использовать материализованное представление, чтобы скрыть или показать данные.
Следует обратить внимание на то, что мы используем единое пространство ключей с 40 таблицами и 19 материализованными представлениями, 10 материализованных представлений имеют ту же проблему.