ALTER KEYSPACE可用于更改屬性,例如,一個KeySpace的replicas和durable_writes的數(shù)量。下面給出了此命令的語法。
ALTER KEYSPACE <identifier> WITH <properties>
即:
ALTER KEYSPACE “KeySpace Name” WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’};
ALTER KEYSPACE的屬性與CREATE KEYSPACE相同。它有兩個屬性:replication和durable_writes。
使用此選項(xiàng),您可以指示Cassandra是否對當(dāng)前KeySpace的更新使用commitlog。此選項(xiàng)不是強(qiáng)制性的,默認(rèn)情況下,它設(shè)置為true。
下面給出一個修改KeySpace的例子。
這里我們改變一個名為TutorialsPoint的KeySpace。
我們將復(fù)制因子從1更改為3。
cqlsh.> ALTER KEYSPACE tutorialspoint WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};
您還可以修改KeySpace的durable_writes屬性。下面給出測試KeySpace的durable_writes屬性。
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;
再次,如果您驗(yàn)證KeySpaces的屬性,它將產(chǎn)生以下輸出。
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)
您可以使用Session類的execute()方法來更改鍵空間。按照以下步驟使用Java API更改鍵空間
首先,創(chuàng)建一個名為com.datastax.driver.core的Cluster.builder類的實(shí)例,如下所示。
//Creating Cluster.Builder object Cluster.Builder builder1 = Cluster.builder();
使用Cluster.Builder對象的addContactPoint()方法添加聯(lián)系點(diǎn)(節(jié)點(diǎn)的IP地址)。此方法返回Cluster.Builder。
//Adding contact point to the Cluster.Builder object Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
使用新的構(gòu)建器對象,創(chuàng)建一個集群對象。為此,在Cluster.Builder類中有一個名為build()的方法。以下代碼顯示如何創(chuàng)建集群對象。
//Building a cluster Cluster cluster = builder.build();
您可以使用單行代碼構(gòu)建集群對象,如下所示。
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
使用Clusterclass的connect()方法創(chuàng)建一個Session對象的實(shí)例,如下所示。
Session session = cluster.connect( );
此方法創(chuàng)建一個新會話并初始化它。如果已經(jīng)有一個鍵空間,可以通過將字符串格式的鍵空間名稱傳遞給這個方法來將其設(shè)置為現(xiàn)有鍵空間,如下所示。
Session session = cluster.connect(“ Your keyspace name ” );
您可以使用Session類的execute()方法執(zhí)行CQL查詢。將查詢以字符串格式或Statement類對象傳遞給execute()方法。無論您以字符串格式傳遞給此方法將在cqlsh上執(zhí)行。
在這個例子中,
我們正在改變一個名為tp的鍵空間。我們正在將復(fù)制選項(xiàng)從簡單策略更改為網(wǎng)絡(luò)拓?fù)洳呗浴?/span>
我們正在將durable_writes更改為false
您必須將查詢存儲在字符串變量中,并將其傳遞給execute()方法,如下所示。
//Query String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = false;"; session.execute(query);
下面給出了使用Java API在Cassandra中創(chuàng)建和使用鍵空間的完整程序。
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"); } }
使用類名稱和.java保存上述程序,瀏覽到保存位置。編譯并執(zhí)行程序如下圖所示。
$javac Alter_KeySpace.java $java Alter_KeySpace
在正常條件下,它產(chǎn)生以下輸出:
Keyspace Altered
更多建議: