簡體   English   中英

如何在Cassandra中進行同步刪除並創建鍵空間?

[英]How to do a sync drop and create keyspace in cassandra?

我不想要鍵空間中任何表中的任何數據。 因此,我決定刪除鍵空間(如果存在)並立即創建它。 我正在使用下面的代碼來實現相同的目的。

 CassandraConnector(conf).withSessionDo { session =>
  session.execute(s"DROP KEYSPACE if EXISTS $keyspace")
  session.execute("""CREATE KEYSPACE if NOT EXISTS %s
  WITH replication = {'class':'SimpleStrategy','replication_factor':'1'};""".format(keyspace)

)}

但是它無法創建鍵空間。 從日志中,我只能看到警告,指出

Received a DROPPED notification for table test.table_tracker, but this keyspace is unknown in our metadata.

我也嘗試使用python cassandra驅動程序。 但是結果是一樣的。 我相信有些競爭情況,並且放下鍵空間是異步的(如果我錯了,請糾正我)。

如何同步刪除和創建鍵空間?

如果僅是要刪除表中的所有數據,則應考慮使用TRUNCATE ,它會在保留其架構的同時從表中刪除所有數據,即:

TRUNCATE test.table_tracker;

執行模式更改應謹慎執行,因此應盡可能避免這樣做。 此外,在所有版本的cassandra中,圍繞快速刪除和重新創建鍵空間都存在許多不同的問題,因此截斷路由更加可靠。

您可能會遇到的一個問題是,可能您在執行每個操作后沒有等待架構協議,這可能會帶來問題,尤其是在后續操作中操作相同的鍵空間/表的情況下。 Java驅動程序(以及因此的spark連接器)在架構更改之間最多只能等待可配置的時間。 請參閱Java驅動程序元數據文檔中的此指南,以獲取有關如何等待協議的指南,即:

if (cluster.getMetadata().checkSchemaAgreement()) {
    // schema is in agreement
} else {
    // schema is not in agreement
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM