![](/img/trans.png)
[英]How to initialize Cassandra keyspace and tables with Spring boot
[英]Cassandra: how to move whole tables to another keyspace
我的Cassandra的版本信息:
[cqlsh 5.0.1 | 卡桑德拉2.2.5 | CQL規范3.3.1 | 本機協議v4]
我正在嘗試將一些巨大的表(幾百萬行)移到另一個鍵空間。 除了“復制到csv和從csv復制”之外,還有更好的解決方案嗎?
好的,我設法使它在運行2.2.8的單節點群集上工作。
我通過將holidays
表從presentation
鍵空間移到stackoverflow
鍵空間進行了實驗。
這是我采取的步驟:
在新的鍵空間內創建表。
此步驟很重要,因為每個表都有一個用於唯一標識符的UUID,該UUID存儲在cf_id
列的system.schema_columnfamilies
表中。 該ID附加到保存數據的目錄名稱上。 通過將模式從一個鍵空間復制/粘貼到另一個鍵空間,您將確保使用相同的列名,但是會生成一個新的唯一標識符。
注意:在3.x中,標識符存儲在system_schema.tables
表中。
aploetz@cqlsh:stackoverflow> CREATE TABLE holidays (
type text,
eventtime timestamp,
beginend text,
name text,
PRIMARY KEY (type, eventtime, beginend)
) WITH CLUSTERING ORDER BY (eventtime DESC, beginend DESC);
aploetz@cqlsh:stackoverflow> SELECT * FROM stackoverflow.holidays ;
type | eventtime | beginend | name
------+-----------+----------+------
(0 rows)
正確停止您的節點(DISABLEGOSSIP,DRAIN,kill / stop等)。
現在,找到磁盤上舊表和新表的位置,然后將文件復制/移動到新位置 (從舊位置):
$ ls -al /var/lib/cassandra/data22/stackoverflow/holidays-77a767e0a5f111e6a2bebd9d201c4c8f/
total 12
drwxrwxr-x 3 aploetz aploetz 4096 Nov 8 14:25 .
drwxrwxr-x 17 aploetz aploetz 4096 Nov 8 14:25 ..
drwxrwxr-x 2 aploetz aploetz 4096 Nov 8 14:25 backups
$ cp /var/lib/cassandra/data22/presentation/holidays-74bcfde0139011e6a67c2575e6398503/la* /var/lib/cassandra/data22/stackoverflow/holidays-77a767e0a5f111e6a2bebd9d201c4c8f/
$ ls -al /var/lib/cassandra/data22/stackoverflow/holidays-77a767e0a5f111e6a2bebd9d201c4c8f/
drwxrwxr-x 3 aploetz aploetz 4096 Nov 8 14:26 .
drwxrwxr-x 17 aploetz aploetz 4096 Nov 8 14:25 ..
drwxrwxr-x 2 aploetz aploetz 4096 Nov 8 14:25 backups
-rw-rw-r-- 1 aploetz aploetz 43 Nov 8 14:26 la-1-big-CompressionInfo.db
-rw-rw-r-- 1 aploetz aploetz 628 Nov 8 14:26 la-1-big-Data.db
-rw-rw-r-- 1 aploetz aploetz 9 Nov 8 14:26 la-1-big-Digest.adler32
-rw-rw-r-- 1 aploetz aploetz 16 Nov 8 14:26 la-1-big-Filter.db
-rw-rw-r-- 1 aploetz aploetz 57 Nov 8 14:26 la-1-big-Index.db
-rw-rw-r-- 1 aploetz aploetz 4468 Nov 8 14:26 la-1-big-Statistics.db
-rw-rw-r-- 1 aploetz aploetz 94 Nov 8 14:26 la-1-big-Summary.db
-rw-rw-r-- 1 aploetz aploetz 94 Nov 8 14:26 la-1-big-TOC.txt
-rw-rw-r-- 1 aploetz aploetz 43 Nov 8 14:26 la-2-big-CompressionInfo.db
-rw-rw-r-- 1 aploetz aploetz 164 Nov 8 14:26 la-2-big-Data.db
-rw-rw-r-- 1 aploetz aploetz 10 Nov 8 14:26 la-2-big-Digest.adler32
-rw-rw-r-- 1 aploetz aploetz 16 Nov 8 14:26 la-2-big-Filter.db
-rw-rw-r-- 1 aploetz aploetz 26 Nov 8 14:26 la-2-big-Index.db
-rw-rw-r-- 1 aploetz aploetz 4460 Nov 8 14:26 la-2-big-Statistics.db
-rw-rw-r-- 1 aploetz aploetz 108 Nov 8 14:26 la-2-big-Summary.db
-rw-rw-r-- 1 aploetz aploetz 94 Nov 8 14:26 la-2-big-TOC.txt
重新啟動您的節點。
通過cqlsh查詢:
Connected to SnakesAndArrows at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
aploetz@cqlsh> SELECT * FROM stackoverflow.holidays ;
type | eventtime | beginend | name
--------------+--------------------------+----------+------------------------
Religious | 2016-12-26 05:59:59+0000 | E | Christmas
Religious | 2016-12-25 06:00:00+0000 | B | Christmas
Religious | 2016-03-28 04:59:59+0000 | E | Easter
Religious | 2016-03-27 05:00:00+0000 | B | Easter
presentation | 2016-05-06 20:40:08+0000 | B | my presentation
presentation | 2016-05-06 20:40:03+0000 | B | my presentation
presentation | 2016-05-06 20:39:15+0000 | B | my presentation
presentation | 2016-05-06 20:38:10+0000 | B | my presentation
US | 2016-07-05 04:59:59+0000 | E | 4th of July
US | 2016-07-04 05:00:00+0000 | B | 4th of July
US | 2016-05-09 04:59:59+0000 | E | Mothers Day
US | 2016-05-08 05:00:00+0000 | B | Mothers Day
Nerd | 2016-12-22 05:59:59+0000 | E | 2112 Day
Nerd | 2016-12-21 06:00:00+0000 | B | 2112 Day
Nerd | 2016-09-26 04:59:59+0000 | E | Hobbit Day
Nerd | 2016-09-25 05:00:00+0000 | B | Hobbit Day
Nerd | 2016-09-20 04:59:59+0000 | E | Talk Like a Pirate Day
Nerd | 2016-09-19 05:00:00+0000 | B | Talk Like a Pirate Day
Nerd | 2016-05-07 04:59:59+0000 | E | Star Wars Week
Nerd | 2016-05-04 05:00:00+0000 | B | Star Wars Week
Nerd | 2016-03-14 05:00:00+0000 | E | Pi Day
Nerd | 2016-03-14 05:00:00+0000 | B | Pi Day
(22 rows)
這種方法的問題在於,您將需要停止集群,並在每個節點上四處移動文件。 而cqlsh COPY
允許您在單個節點上導入和導出,而群集仍在運行。
而且我知道COPY
具有這樣的聲譽,將它限制在較小的數據集上。 但是2.2.x的選項可以幫助限制COPY,以防止在大型數據集上超時。 我最近得到了它的3.7億行的導出/導入,沒有超時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.