Cassandra中的鍵空間是一個定義節(jié)點上數(shù)據(jù)復(fù)制的命名空間。集群每個節(jié)點包含一個鍵空間。下面給出了使用語句CREATE KEYSPACE創(chuàng)建鍵空間的語法。
CREATE KEYSPACE <identifier> WITH <properties>
即
CREATE KEYSPACE “KeySpace Name” WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’}; CREATE KEYSPACE “KeySpace Name” WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of replicas’} AND durable_writes = ‘Boolean value’;
CREATE KEYSPACE語句有兩個屬性:replication和durable_writes。
復(fù)制選項用于指定副本位置策略和所需副本的數(shù)量。下表列出了所有副本位置策略。
策略名稱 | 描述 |
---|---|
簡單的策略 | 為集群指定簡單的復(fù)制因子。 |
網(wǎng)絡(luò)拓撲策略 | 使用此選項,可以單獨為每個數(shù)據(jù)中心設(shè)置復(fù)制因子。 |
舊網(wǎng)絡(luò)拓撲策略 | 使用此選項,可以單獨為每個數(shù)據(jù)中心設(shè)置復(fù)制因子。 |
使用此選項,您可以指示Cassandra是否對當前KeySpace的更新使用commitlog。此選項不是強制性的,默認情況下,它設(shè)置為true。
下面給出了創(chuàng)建KeySpace的示例。
這里我們創(chuàng)建一個名為TutorialsPoint 的KeySpace。
我們使用第一個副本放置策略,即簡單策略。
我們選擇復(fù)制因子為1個副本。
cqlsh.> CREATE KEYSPACE tutorialspoint WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
您可以使用命令Describe驗證是否創(chuàng)建表。如果對鍵空間使用此命令,它將顯示如下所示創(chuàng)建的所有鍵空間。
cqlsh> DESCRIBE keyspaces; tutorialspoint system system_traces
在這里您可以觀察新創(chuàng)建的KeySpace tutorialspoint。
默認情況下,表的durable_writes屬性設(shè)置為true,但可以將其設(shè)置為false。您不能將此屬性設(shè)置為simplex策略。
下面給出了示例持久寫入屬性的使用示例。
cqlsh> CREATE KEYSPACE test ... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 } ... AND DURABLE_WRITES = false;
您可以通過查詢系統(tǒng)鍵空間來驗證test KeySpace的durable_writes屬性是否設(shè)置為false。此查詢提供了所有KeySpaces及其屬性。
cqlsh> 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)
在這里可以觀察測試KeySpace的durable_writes屬性設(shè)置為false。
您可以使用關(guān)鍵字USE使用創(chuàng)建的KeySpace。其語法如下:
Syntax:USE <identifier>
在下面的示例中,我們使用KeySpace tutorialspoint。
cqlsh> USE tutorialspoint; cqlsh:tutorialspoint>
您可以使用Session類的execute()方法創(chuàng)建一個Keyspace。按照以下步驟使用Java API創(chuàng)建鍵空間。
首先,創(chuàng)建一個名為com.datastax.driver.core的Cluster.builder類的實例,如下所示。
//Creating Cluster.Builder object Cluster.Builder builder1 = Cluster.builder();
使用Cluster.Builder對象的addContactPoint()方法添加聯(lián)系點(節(jié)點的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();
使用Cluster類的connect()方法創(chuàng)建一個Session對象的實例,如下所示。
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í)行。
在這個例子中,我們創(chuàng)建一個名為tp的KeySpace。我們使用第一個副本放置策略,即簡單策略,我們選擇復(fù)制因子為1個副本。
您必須將查詢存儲在字符串變量中,并將其傳遞給execute()方法,如下所示。
String query = "CREATE KEYSPACE tp WITH replication " + "= {'class':'SimpleStrategy', 'replication_factor':1}; "; session.execute(query);
您可以使用execute()方法使用創(chuàng)建的KeySpace,如下所示。
execute(“ USE tp ” );
下面給出了使用Java API在Cassandra中創(chuàng)建和使用鍵空間的完整程序。
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Session; public class Create_KeySpace { public static void main(String args[]){ //Query String query = "CREATE KEYSPACE tp WITH replication " + "= {'class':'SimpleStrategy', 'replication_factor':1};"; //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); //using the KeySpace session.execute("USE tp"); System.out.println("Keyspace created"); } }
使用類名稱和.java保存上述程序,瀏覽到保存位置。編譯并執(zhí)行程序如下圖所示。
$javac Create_KeySpace.java $java Create_KeySpace
在正常條件下,它將產(chǎn)生以下輸出:
Keyspace created
更多建議: