Cassandra - Alter Keyspace
Modificar un espacio clave
ALTER KEYSPACE se puede utilizar para alterar propiedades como el número de réplicas y durable_writes de un KeySpace. A continuación se muestra la sintaxis de este comando.
Sintaxis
ALTER KEYSPACE <identifier> WITH <properties>
es decir
ALTER KEYSPACE “KeySpace Name”
WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
Las propiedades de ALTER KEYSPACEson los mismos que CREATE KEYSPACE. Tiene dos propiedades:replication y durable_writes.
Replicación
La opción de replicación especifica la estrategia de ubicación de la réplica y el número de réplicas deseadas.
Durable_writes
Con esta opción, puede indicarle a Cassandra si debe usar el registro de confirmación para las actualizaciones del KeySpace actual. Esta opción no es obligatoria y, de forma predeterminada, está configurada como verdadera.
Ejemplo
A continuación se muestra un ejemplo de alteración de un KeySpace.
Aquí estamos alterando un KeySpace llamado TutorialsPoint.
Estamos cambiando el factor de replicación de 1 a 3.
cqlsh.> ALTER KEYSPACE tutorialspoint
WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};
Modificación de Durable_writes
También puede modificar la propiedad durable_writes de un KeySpace. A continuación se muestra la propiedad durable_writes deltest KeySpace.
SELECT * FROM system.schema_keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
system | True | org.apache.cassandra.locator.LocalStrategy | { }
system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
(4 rows)
ALTER KEYSPACE test
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3}
AND DURABLE_WRITES = true;
Una vez más, si verifica las propiedades de KeySpaces, producirá el siguiente resultado.
SELECT * FROM system.schema_keyspaces;
keyspace_name | durable_writes | strategy_class | strategy_options
----------------+----------------+------------------------------------------------------+----------------------------
test | True | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
tutorialspoint | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
system | True | org.apache.cassandra.locator.LocalStrategy | { }
system_traces | True | org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
(4 rows)
Modificar un espacio de claves mediante la API de Java
Puede modificar un espacio de teclas usando el execute() método de Sessionclase. Siga los pasos que se indican a continuación para modificar un espacio de claves utilizando la API de Java
Paso 1: crear un objeto de clúster
En primer lugar, cree una instancia de Cluster.builder clase de com.datastax.driver.core paquete como se muestra a continuación.
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
Agregue un punto de contacto (dirección IP del nodo) usando el addContactPoint() método de Cluster.Builderobjeto. Este método devuelveCluster.Builder.
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
Con el nuevo objeto generador, cree un objeto de clúster. Para hacerlo, tienes un método llamadobuild() en el Cluster.Builderclase. El siguiente código muestra cómo crear un objeto de clúster.
//Building a cluster
Cluster cluster = builder.build();
Puede crear el objeto de clúster utilizando una sola línea de código como se muestra a continuación.
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
Paso 2: crear un objeto de sesión
Crea una instancia de Session objeto usando el connect() método de Clusterclase como se muestra a continuación.
Session session = cluster.connect( );
Este método crea una nueva sesión y la inicializa. Si ya tiene un espacio de claves, puede establecerlo en el existente pasando el nombre del espacio de claves en formato de cadena a este método como se muestra a continuación.
Session session = cluster.connect(“ Your keyspace name ” );
Paso 3: ejecutar la consulta
Puede ejecutar consultas CQL utilizando el método execute () de la clase Session. Pase la consulta en formato de cadena o comoStatementobjeto de clase al método execute (). Todo lo que pase a este método en formato de cadena se ejecutará en elcqlsh.
En este ejemplo,
Estamos alterando un espacio de teclas llamado tp. Estamos modificando la opción de replicación de estrategia simple a estrategia de topología de red.
Estamos alterando el durable_writes a falso
Debe almacenar la consulta en una variable de cadena y pasarla al método execute () como se muestra a continuación.
//Query
String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = false;";
session.execute(query);
A continuación se muestra el programa completo para crear y usar un espacio de claves en Cassandra usando la API de Java.
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Alter_KeySpace {
public static void main(String args[]){
//Query
String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}"
+ "AND DURABLE_WRITES = false;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect();
//Executing the query
session.execute(query);
System.out.println("Keyspace altered");
}
}
Guarde el programa anterior con el nombre de la clase seguido de .java, busque la ubicación donde está guardado. Compile y ejecute el programa como se muestra a continuación.
$javac Alter_KeySpace.java $java Alter_KeySpace
En condiciones normales, produce la siguiente salida:
Keyspace Altered