[英]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.