Lápides no Apache Cassandra

Tipos de lápides

Lápides pode obter criada em um número de maneiras e é crucial que você entenda certas armadilhas que podem levar ao implícito criação de marcas para exclusão que vai permanecer escondido do programador, do ponto de vista até em superfícies como uma plausível para o problema que afecte a sua cluster. Portanto, é importante entender os tipos de lápides que podem ser criados em Cassandra:

lápides celulares
insert statements podem criar lápides quando um determinado valor de célula é definido como nulo na consulta. Isto pode acontecer quando a camada de abstração de banco de dados ou um framework ORM abstrata a consulta com representação de nível de objeto e os valores nulos são implicitamente enviados na consulta Real para Cassandra. Por exemplo, considere a seguinte consulta CQL:

INSERT INTO item_price ( store_number, item_id, price, replacements, product_code ) VALUES ( 'CA104', 'item104', 2.50, null , 'p104');

isso criaria uma lápide celular para a coluna de substituições para o registro com o store_number CA104.
considere agora a seguinte pesquisa de remoção:

DELETE replacements FROM item_price WHERE store_number = 'CA104';

isso também criaria uma lápide celular para o registro correspondente.

Tombstones de linha
uma linha inteira é marcada como uma lápide como resultado de uma consulta delete que identifica uma linha. Por exemplo:

DELETE FROM item_price WHERE store_number = 'CA101' and item_id='item101' and price = 1.80;

o Sstabledump iria mostrar um deletion_ info no nível da linha para as colunas de agrupamento dentro da partição.

,
"position" : 0
},
"rows" : ,
"deletion_info" : {
"marked_deleted" : "2020-07-05T07:26:52.233374Z",
"local_delete_time" : "2020-07-05T07:26:52Z"
},
"cells" :
}
]
}
]

um grande número de lápides de linha pode ser uma indicação de um modelo de dados pobre, em que a sua aplicação está frequentemente a excluir registros de uma tabela. Nesses casos, considere revisitar seu modelo de dados e redesenhar tabelas com base em padrões de consulta e a cardinalidade.

Range tombstones
Deleting an entire range of rows using WHERE clause with a partition key and a range represented by a clustering column. Por exemplo,:

DELETE FROM item_price WHERE store_number = 'CA101' AND item_id='item101' AND price > 2.0;

SSTabledump iria mostrar,

,"position" : 0
},
"rows" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
},
{
"type" : "range_tombstone_bound",
"end" : {
"type" : "inclusive",
"clustering" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
}
]
}
}}

O SSTabledump seria o intervalo de impressão lápides com um tipo de range_tombstone_bound com um início e no final da chave de cluster usado para indicar o intervalo de linhas que foram marcados para exclusão dentro de uma partição. Tombstones de intervalo também são criados quando uma coleção inteira é substituída por uma consulta de inserção ou atualização. Recomenda-se sempre a substituição de elementos específicos de uma colecção em vez de substituir toda a colecção em si.

lápides de partição
lápides deste tipo são criadas quando uma consulta de exclusão é disparada usando apenas a chave de partição na cláusula onde. Por exemplo:

DELETE FROM item_price WHERE store_number = 'CA102';

como você certamente adivinhou, isso iria apagar toda a partição CA102 e o sstabledump iria mostrar a partição o atributo deletion_ Info com a data marcada.

,
"position" : 0,
"deletion_info" : {
"marked_deleted" : "2020-07-05T22:11:48.367057Z",
"local_delete_time" : "2020-07-05T22:11:48Z"
}
},
"rows" :
}
]

TTL lápides
estas são lápides criadas automaticamente quando o tempo de vida expira para uma determinada linha ou célula. No entanto, eles são marcados de forma diferente das lápides normais.

a seguinte declaração de inserção criaria uma lápide TTL após 20 segundos.

INSERT INTO item_price ( store_number, item_id, price, replacements, product_code) VALUES ( 'CA103', 'item103', 3.0, {'item101-r', 'item101'}, 'p103') using TTL 20;

:

,
"position" : 78
},
"rows" : ,
"liveness_info" : { "tstamp" : "2020-07-05T06:47:51.458099Z", "ttl" : 20, "expires_at" : "2020-07-05T06:48:11Z", "expired" : true },
"cells" : }
]
}
]
}
]

resumo

  • Cassandra trata uma consulta delete internamente como uma operação de atualização que adiciona um marcador chamado lápide sobre os dados a serem apagados.
  • lápides podem ser configuradas com um tempo de expiração (gc_grace_seconds) e são limpas durante o processo de compactação.
  • o utilitário sstabledump pode ser usado para ver o conteúdo de um ficheiro SSTable num formato legível pelo homem.
  • evite escrever valores nulos nas suas tabelas, pois pode criar lápides. Tenha cuidado ao fazer consultas abstraídas pela sua camada ORM.
  • as lápides de gama são preferidas sobre as lápides de células ou de linhas, uma vez que apenas armazena os limites do intervalo salvando o espaço em disco.
  • evite substituir elementos inteiros de uma coleção como o conjunto, Lista, mapa com Inserir e atualizar consultas, pois isso pode criar lápides de gama.

Deixe uma resposta

O seu endereço de email não será publicado.