大量載入
大量載入 Apache Cassandra 資料由不同的工具支援。要大量載入的資料必須採用 SSTables 的形式。Cassandra 不支援直接載入任何其他格式(例如 CSV、JSON 和 XML)的資料。儘管 cqlsh COPY
命令可以載入 CSV 資料,但對於大量資料而言並非一個好選項。大量載入用於
-
還原增量備份和快照。備份和快照已經採用 SSTables 的形式。
-
將現有的 SSTables 載入到另一個叢集。資料可以有不同的節點數或複製策略。
-
將外部資料載入到叢集。
大量載入的工具
Cassandra 提供兩個命令或工具來大量載入資料
-
Cassandra 大量載入器,也稱為
sstableloader
-
nodetool import
命令
如果 Cassandra 安裝的 bin
目錄在 PATH
環境變數中,則可以存取 sstableloader
和 nodetool import
。或者,可以直接從 bin
目錄存取這些目錄。範例使用在 備份 中建立的鍵空間和表格。
使用 sstableloader
sstableloader
是用於大量上傳資料的主要工具。sstableloader
將 SSTable 資料檔串流傳送至正在執行的叢集,並符合複製策略和複製因子。不需要將資料上傳至的表格為空。
執行 sstableloader
的唯一需求為
-
一個或多個以逗號分隔的初始主機,用於連線並取得環狀資訊
-
要載入的 SSTable 的目錄路徑
sstableloader [options] <dir_path>
Sstableloader 會將在目錄 <dir_path>
中找到的 SSTable 大量載入至已設定的叢集。<dir_path>
用作目標 鍵空間/表格 名稱。例如,若要將名為 Standard1-g-1-Data.db
的 SSTable 載入至 Keyspace1/Standard1
,您需要在目錄 /path/to/Keyspace1/Standard1/
中擁有檔案 Standard1-g-1-Data.db
和 Standard1-g-1-Index.db
。
Sstableloader 選項,用於接受目標鍵空間名稱
通常,作為備份策略的一部分,某些 Cassandra DBA 會儲存整個資料目錄。當資料中發現損毀時,在同一叢集中還原資料(對於大型叢集為 200 個節點)很常見,但使用不同的鍵空間名稱。
目前,sstableloader
會從資料夾結構中衍生鍵空間名稱。作為選項,若要指定目標鍵空間名稱作為 sstableloader
的一部分,4.0 版新增了對 --target-keyspace
選項的支持 (CASSANDRA-13884).
支援下列選項,其中 -d,--nodes <initial hosts>
為必要
-alg,--ssl-alg <ALGORITHM> Client SSL: algorithm
-ap,--auth-provider <auth provider> Custom
AuthProvider class name for
cassandra authentication
-ciphers,--ssl-ciphers <CIPHER-SUITES> Client SSL:
comma-separated list of
encryption suites to use
-cph,--connections-per-host <connectionsPerHost> Number of
concurrent connections-per-host.
-d,--nodes <initial hosts> Required.
Try to connect to these hosts (comma separated) initially for ring information
--entire-sstable-throttle-mib <throttle-mib> Entire SSTable throttle
speed in MiB/s (default 0 for unlimited).
--entire-sstable-inter-dc-throttle-mib <inter-dc-throttle-mib>
Entire SSTable inter-datacenter throttle
speed in MiB/s (default 0 for unlimited).
-f,--conf-path <path to config file> cassandra.yaml file path for streaming throughput and client/server SSL.
-h,--help Display this help message
-i,--ignore <NODES> Don't stream to this (comma separated) list of nodes
-idct,--inter-dc-throttle <inter-dc-throttle> (deprecated) Inter-datacenter throttle speed in Mbits (default 0 for unlimited).
Use --inter-dc-throttle-mib instead.
--inter-dc-throttle-mib <inter-dc-throttle-mib> Inter-datacenter throttle speed in MiB/s (default 0 for unlimited)
-k,--target-keyspace <target keyspace name> Target
keyspace name
-ks,--keystore <KEYSTORE> Client SSL:
full path to keystore
-kspw,--keystore-password <KEYSTORE-PASSWORD> Client SSL:
password of the keystore
--no-progress Don't
display progress
-p,--port <native transport port> Port used
for native connection (default 9042)
-prtcl,--ssl-protocol <PROTOCOL> Client SSL:
connections protocol to use (default: TLS)
-pw,--password <password> Password for
cassandra authentication
-sp,--storage-port <storage port> Port used
for internode communication (default 7000)
-spd,--server-port-discovery <allow server port discovery> Use ports
published by server to decide how to connect. With SSL requires StartTLS
to be used.
-ssp,--ssl-storage-port <ssl storage port> Port used
for TLS internode communication (default 7001)
-st,--store-type <STORE-TYPE> Client SSL:
type of store
-t,--throttle <throttle> (deprecated) Throttle speed in Mbits (default 0 for unlimited).
Use --throttle-mib instead.
--throttle-mib <throttle-mib> Throttle
speed in MiB/s (default 0 for unlimited)
-ts,--truststore <TRUSTSTORE> Client SSL:
full path to truststore
-tspw,--truststore-password <TRUSTSTORE-PASSWORD> Client SSL:
Password of the truststore
-u,--username <username> Username for
cassandra authentication
-v,--verbose verbose
output
可以使用 -f
選項在命令列中提供 cassandra.yaml
檔案,以設定串流傳輸量、用戶端和伺服器加密選項。只有 stream_throughput_outbound_megabits_per_sec
、server_encryption_options
和 client_encryption_options
會從 cassandra.yaml
檔案讀取。您可以使用對應的命令列選項覆寫從 cassandra.yaml
讀取的選項。
sstableloader 示範
範例顯示如何使用 sstableloader
上傳表格 catalogkeyspace.magazine
的增量備份資料。此外,會建立同一表格的快照,以大量上傳,也使用 sstableloader
。
catalogkeyspace.magazine
表格的備份和快照如下所示
$ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l
結果為
total 0
drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups
drwxrwxr-x. 4 ec2-user ec2-user 40 Aug 19 02:45 snapshots
使用 sstableloader
上傳 SSTable 的目錄路徑結構用作目標鍵空間/表格。如果目錄結構採用 sstableloader
使用的格式,你可以直接從 backups
和 snapshots
目錄上傳。但是,SSTable 的備份和快照目錄路徑分別為 /catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups
和 /catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots
,且無法用於將 SSTable 上傳到 catalogkeyspace.magazine
表格。目錄路徑結構必須為 /catalogkeyspace/magazine/
才能使用 sstableloader
。建立新的目錄結構以使用位於 /catalogkeyspace/magazine
的 sstableloader
上傳 SSTable,並設定適當的權限。
$ sudo mkdir -p /catalogkeyspace/magazine
$ sudo chmod -R 777 /catalogkeyspace/magazine
從增量備份大量載入
增量備份不包含表格的 DDL;表格必須已存在。如果表格已刪除,可以使用每個表格快照產生的 schema.cql
檔案建立表格。在使用 sstableloader
將 SSTable 載入 magazine
表格之前,表格必須存在。表格不需要為空,但我們已使用 CQL 查詢指示的空表格
SELECT * FROM magazine;
結果為
id | name | publisher
----+------+-----------
(0 rows)
建立要上傳到的表格後,將 SSTable 檔案從 backups
目錄複製到 /catalogkeyspace/magazine/
目錄。
$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups/* \
/catalogkeyspace/magazine/
執行 sstableloader
以從 /catalogkeyspace/magazine/
目錄上傳 SSTable。
$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/
sstableloader
命令的輸出應類似於此清單
$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/
結果為
Opening SSTables and calculating sections to stream
Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db
/catalogkeyspace/magazine/na-2-big-Data.db to [35.173.233.153:7000, 10.0.2.238:7000,
54.158.45.75:7000]
progress: [35.173.233.153:7000]0:1/2 88 % total: 88% 0.018KiB/s (avg: 0.018KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% total: 176% 33.807KiB/s (avg: 0.036KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% total: 176% 0.000KiB/s (avg: 0.029KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:1/2 39 % total: 81% 0.115KiB/s
(avg: 0.024KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % total: 108%
97.683KiB/s (avg: 0.033KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:1/2 39 % total: 80% 0.233KiB/s (avg: 0.040KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 88.522KiB/s (avg: 0.049KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.045KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.044KiB/s)
sstableloader
完成資料載入後,執行查詢 magazine
表格以檢查
SELECT * FROM magazine;
結果為
id | name | publisher
----+---------------------------+------------------
1 | Couchbase Magazine | Couchbase
0 | Apache Cassandra Magazine | Apache Cassandra
(2 rows)
從快照大量載入
可以輕鬆地將表格快照還原到同一表格
如果載入 SSTable 至 catalogkeyspace.magazine
所需的目錄結構不存在,請建立目錄並設定適當的權限
$ sudo mkdir -p /catalogkeyspace/magazine
$ sudo chmod -R 777 /catalogkeyspace/magazine
從目錄中移除所有檔案,以便可以在不受到干擾的情況下複製快照檔案
$ sudo rm /catalogkeyspace/magazine/*
$ cd /catalogkeyspace/magazine/
$ ls -l
結果為
total 0
將快照檔案複製到 /catalogkeyspace/magazine
目錄。
$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots/magazine/* \
/catalogkeyspace/magazine
列出 /catalogkeyspace/magazine
目錄中的檔案。schema.cql
也會列出。
$ cd /catalogkeyspace/magazine && ls -l
結果為
total 44
-rw-r--r--. 1 root root 31 Aug 19 04:13 manifest.json
-rw-r--r--. 1 root root 47 Aug 19 04:13 na-1-big-CompressionInfo.db
-rw-r--r--. 1 root root 97 Aug 19 04:13 na-1-big-Data.db
-rw-r--r--. 1 root root 10 Aug 19 04:13 na-1-big-Digest.crc32
-rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Filter.db
-rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Index.db
-rw-r--r--. 1 root root 4687 Aug 19 04:13 na-1-big-Statistics.db
-rw-r--r--. 1 root root 56 Aug 19 04:13 na-1-big-Summary.db
-rw-r--r--. 1 root root 92 Aug 19 04:13 na-1-big-TOC.txt
-rw-r--r--. 1 root root 815 Aug 19 04:13 schema.cql
或者建立指向快照資料夾的符號連結,而不是複製資料
$ mkdir <keyspace_name>
$ ln -s <path_to_snapshot_folder> <keyspace_name>/<table_name>
如果 magazine
表格已刪除,請執行 schema.cql
中的 DDL 以建立表格。使用下列命令執行 sstableloader
$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/
如命令輸出所示,SSTable 會串流到叢集
Established connection to initial hosts
Opening SSTables and calculating sections to stream
Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db to
[35.173.233.153:7000, 10.0.2.238:7000, 54.158.45.75:7000]
progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.017KiB/s (avg: 0.017KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.000KiB/s (avg: 0.014KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % total: 108% 0.115KiB/s
(avg: 0.017KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.232KiB/s (avg: 0.024KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.022KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.021KiB/s)
應考量的 sstableloader
的其他一些需求包括
-
載入的 SSTable 必須與要載入的 Cassandra 版本相容。
-
修復載入到不同叢集的資料表不會修復來源資料表。
-
Sstableloader 使用埠 7000 進行節點間通訊。
-
在還原增量備份之前,請執行
nodetool flush
以備份記憶表中的所有資料。
使用 nodetool import
建議使用 nodetool import
指令將 SSTable 匯入資料表,而不是使用已棄用的 nodetool refresh
指令。nodetool import
指令有一個選項,可以從單獨的目錄載入新的 SSTable。
指令用法如下
nodetool [(-h <host> | --host <host>)] [(-p <port> | --port <port>)]
[(-pp | --print-port)] [(-pw <password> | --password <password>)]
[(-pwf <passwordFilePath> | --password-file <passwordFilePath>)]
[(-u <username> | --username <username>)] import
[(-c | --no-invalidate-caches)] [(-e | --extended-verify)]
[(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)]
[(-t | --no-tokens)] [(-v | --no-verify)] [--] <keyspace> <table>
<directory> ...
需要 keyspace
、table
名稱和 directory
引數。
支援下列選項
-c, --no-invalidate-caches
Don't invalidate the row cache when importing
-e, --extended-verify
Run an extended verify, verifying all values in the new SSTables
-h <host>, --host <host>
Node hostname or ip address
-l, --keep-level
Keep the level on the new SSTables
-p <port>, --port <port>
Remote jmx agent port number
-pp, --print-port
Operate in 4.0 mode with hosts disambiguated by port number
-pw <password>, --password <password>
Remote jmx agent password
-pwf <passwordFilePath>, --password-file <passwordFilePath>
Path to the JMX password file
-q, --quick
Do a quick import without verifying SSTables, clearing row cache or
checking in which data directory to put the file
-r, --keep-repaired
Keep any repaired information from the SSTables
-t, --no-tokens
Don't verify that all tokens in the new SSTable are owned by the
current node
-u <username>, --username <username>
Remote jmx agent username
-v, --no-verify
Don't verify new SSTables
--
This option can be used to separate command-line options from the
list of argument, (useful when arguments might be mistaken for
command-line options
由於 nodetool import
的指令列上指定了鍵空間和資料表,因此與 sstableloader
不同,不需要將 SSTable 放置在特定目錄路徑中。使用 nodetool import
匯入快照或增量備份時,不需要將 SSTable 複製到另一個目錄。
從增量備份匯入資料
使用 nodetool import
從增量備份匯入 SSTable,並還原資料表,如下所示。
DROP table t;
資料表的增量備份不包含資料表的架構定義。如果架構定義未保留為單獨的備份,則可以使用資料表備份中的 schema.cql
來建立資料表,如下所示
CREATE TABLE IF NOT EXISTS cqlkeyspace.t (
id int PRIMARY KEY,
k int,
v text)
WITH ID = d132e240-c217-11e9-bbee-19821dcea330
AND bloom_filter_fp_chance = 0.01
AND crc_check_chance = 1.0
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND min_index_interval = 128
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND speculative_retry = '99p'
AND additional_write_policy = '99p'
AND comment = ''
AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' }
AND compaction = { 'max_threshold': '32', 'min_threshold': '4',
'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' }
AND compression = { 'chunk_length_in_kb': '16', 'class':
'org.apache.cassandra.io.compress.LZ4Compressor' }
AND cdc = false
AND extensions = { }
;
資料表最初可以是空的,但並非必要。
SELECT * FROM t;
id | k | v
----+---+---
(0 rows)
執行 nodetool import
指令,提供鍵空間、資料表和備份目錄。不要將資料表備份複製到另一個目錄,就像使用 sstableloader
一樣。
$ nodetool import -- cqlkeyspace t \
./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups
SSTable 已匯入資料表中。在 cqlsh 中執行查詢以檢查
SELECT * FROM t;
id | k | v
----+---+------
1 | 1 | val1
0 | 0 | val0
(2 rows)
從快照匯入資料
使用 nodetool import
指令從快照匯入 SSTable 類似於從增量備份匯入 SSTable。這裡顯示的是在刪除資料表以示範還原後,匯入 catalogkeyspace.journal
資料表的快照。
USE CATALOGKEYSPACE;
DROP TABLE journal;
對 journal
資料表使用 catalog-ks
快照。檢查快照中的檔案,並注意 schema.cql
檔案的存在。
$ ls -l
total 44
-rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.json
-rw-rw-r--. 3 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db
-rw-rw-r--. 3 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db
-rw-rw-r--. 3 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32
-rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db
-rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db
-rw-rw-r--. 3 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db
-rw-rw-r--. 3 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db
-rw-rw-r--. 3 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt
-rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql
從 schema.cql
複製 DDL,並在 cqlsh 中執行以建立 catalogkeyspace.journal
表格
CREATE TABLE IF NOT EXISTS catalogkeyspace.journal (
id int PRIMARY KEY,
name text,
publisher text)
WITH ID = 296a2d30-c22a-11e9-b135-0d927649052c
AND bloom_filter_fp_chance = 0.01
AND crc_check_chance = 1.0
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND min_index_interval = 128
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND speculative_retry = '99p'
AND additional_write_policy = '99p'
AND comment = ''
AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' }
AND compaction = { 'min_threshold': '4', 'max_threshold':
'32', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' }
AND compression = { 'chunk_length_in_kb': '16', 'class':
'org.apache.cassandra.io.compress.LZ4Compressor' }
AND cdc = false
AND extensions = { }
;
執行 nodetool import
指令,以匯入快照的 SSTable
$ nodetool import -- catalogkeyspace journal \
./cassandra/data/data/catalogkeyspace/journal-
296a2d30c22a11e9b1350d927649052c/snapshots/catalog-ks/
接著在 journal
表格上執行 CQL 查詢,以檢查已匯入的資料
SELECT * FROM journal;
id | name | publisher
----+---------------------------+------------------
1 | Couchbase Magazine | Couchbase
0 | Apache Cassandra Magazine | Apache Cassandra
(2 rows)
大量載入外部資料
我們討論過的所有工具,包括 sstableloader
和 nodetool import
,都不支援直接大量載入外部資料。sstableloader
和 nodetool import
要求資料以 SSTable 的形式呈現。Apache Cassandra 支援一個 Java API,可使用 org.apache.cassandra.io.sstable.CQLSSTableWriter
Java 類別,從輸入資料產生 SSTable。接著,使用 sstableloader
或 nodetool import
來大量載入 SSTable。
使用 CQLSSTableWriter Java API 產生 SSTable
若要使用 CQLSSTableWriter
類別產生 SSTable,需要下列項目
-
用來產生 SSTable 的輸出目錄
-
SSTable 的架構
-
INSERT
的已準備陳述式 -
一個分割器
輸出目錄必須在開始前存在。建立一個目錄(例如 /sstables
),並設定適當的權限。
$ sudo mkdir /sstables
$ sudo chmod 777 -R /sstables
若要在 Java 應用程式中使用 CQLSSTableWriter
,請為輸出目錄建立一個 Java 常數。
public static final String OUTPUT_DIR = "./sstables";
CQLSSTableWriter
Java API 可以建立自訂類型。建立一個新類型來儲存 int
資料
String type = "CREATE TYPE CQLKeyspace.intType (a int, b int)";
// Define a String variable for the SSTable schema.
String schema = "CREATE TABLE CQLKeyspace.t ("
+ " id int PRIMARY KEY,"
+ " k int,"
+ " v1 text,"
+ " v2 intType,"
+ ")";
定義一個 String
變數,用於已準備的陳述式
String insertStmt = "INSERT INTO CQLKeyspace.t (id, k, v1, v2) VALUES (?, ?, ?, ?)";
若未使用預設分割器 Murmur3Partitioner
,則只需要設定要使用的分割器。
建構函式類別 CQLSSTableWriter.Builder
會使用所有這些變數或設定,來建立一個 CQLSSTableWriter
物件。
為輸出目錄建立一個 File 物件。
File outputDir = new File(OUTPUT_DIR + File.separator + "CQLKeyspace" + File.separator + "t");
使用 static
方法 CQLSSTableWriter.builder()
取得一個 CQLSSTableWriter.Builder
物件。設定下列項目
-
輸出目錄
File
物件 -
自訂類型
-
SSTable 架構
-
緩衝區大小
-
已準備的陳述式
-
其他建構函式選項(選用)
並呼叫 build()
方法,以建立一個 CQLSSTableWriter
物件
CQLSSTableWriter writer = CQLSSTableWriter.builder()
.inDirectory(outputDir)
.withType(type)
.forTable(schema)
.withBufferSizeInMB(256)
.using(insertStmt).build();
設定 SSTable 資料。若使用任何自訂類型,請為每個類型取得一個 UserType
物件
UserType userType = writer.getUDType("intType");
為結果 SSTable 新增資料列
writer.addRow(0, 0, "val0", userType.newValue().setInt("a", 0).setInt("b", 0));
writer.addRow(1, 1, "val1", userType.newValue().setInt("a", 1).setInt("b", 1));
writer.addRow(2, 2, "val2", userType.newValue().setInt("a", 2).setInt("b", 2));
關閉寫入器,完成 SSTable
writer.close();
CQLSSTableWriter
類別提供的其他公開方法為
方法 | 說明 |
---|---|
addRow(java.util.List<java.lang.Object> values) |
新增一列至寫入器。傳回 CQLSSTableWriter 物件。每個提供的值類型應對應至該值所屬的 CQL 欄位類型。Java 類型與 CQL 類型之間的對應關係與 www.datastax.com/drivers/java/2.0/apidocs/com/datastax/driver/core/DataType.Name.html#asJavaC lass() 中所記載的相同。 |
addRow(java.util.Map<java.lang.String,java.lang.Object> values) |
新增一列至寫入器。傳回 CQLSSTableWriter 物件。這等同於其他 addRow 方法,但採用一個其金鑰為要新增的欄位名稱的映射,而非採用一個在建構此 SSTable 寫入器時所使用的插入陳述順序中的值清單。映射金鑰中的欄位名稱必須為小寫,除非宣告的欄位名稱為大小寫敏感的引號識別碼,在此情況下,映射金鑰必須使用欄位的確切大小寫。值參數是欄位名稱至欄位值的映射,代表要新增的新列。如果映射中未包含某個欄位,其值將為 null。如果映射包含不對應於建構此 SSTable 寫入器時所使用的插入陳述中任一欄位的金鑰,則會忽略對應的值。 |
addRow(java.lang.Object… values) |
新增一列至寫入器。傳回 CQLSSTableWriter 物件。 |
CQLSSTableWriter.builder() |
傳回 CQLSSTableWriter 的新建構器。 |
close() |
關閉寫入器。 |
rawAddRow(java.nio.ByteBuffer… values) |
新增一列至寫入器,提供已序列化的二進位值。傳回 CQLSSTableWriter 物件。列值必須對應於建構此 SSTable 寫入器時所使用的插入陳述的繫結變數。 |
rawAddRow(java.util.List<java.nio.ByteBuffer> values) |
新增一列至寫入器,提供已序列化的二進位值。傳回 CQLSSTableWriter 物件。列值必須對應於建構此 SSTable 寫入器時所使用的插入陳述的繫結變數。 |
rawAddRow(java.util.Map<java.lang.String, java.nio.ByteBuffer> values) |
新增一列至寫入器,提供已序列化的二進位值。傳回 CQLSSTableWriter 物件。列值必須對應於建構此 SSTable 寫入器時所使用的插入陳述的繫結變數。 |
getUDType(String dataType) |
傳回此 SSTable 寫入器中使用的使用者定義類型,可用於建立 UDTValue 執行個體。 |
CQLSSTableWriter.Builder
類別提供的其他公開方法為
方法 | 說明 |
---|---|
inDirectory(String directory) |
寫入 SSTable 的目錄。這是一個強制選項。要使用的目錄應已存在且可寫入。 |
inDirectory(File directory) |
寫入 SSTable 的目錄。這是一個強制選項。要使用的目錄應已存在且可寫入。 |
forTable(String schema) |
要建立 SSTable 的表格的架構 (CREATE TABLE 陳述)。提供的 CREATE TABLE 陳述必須使用完全限定的表格名稱,其中包含鍵集名稱。這是一個強制選項。 |
withPartitioner(IPartitioner partitioner) |
要使用的分區器。預設情況下,將使用 Murmur3Partitioner。如果這不是叢集用來建立 SSTable 的分區器,則需要提供正確的分區器。 |
using(String insert) |
定義要新增至特定 CQL 列的數值順序的 INSERT 或 UPDATE 陳述式。提供的 INSERT 陳述式必須使用完整的資料表名稱,其中包含鍵空間名稱。此外,該陳述式必須使用繫結變數,因為這些變數將繫結至結果 SSTable 寫入器的數值。這是強制選項。 |
withBufferSizeInMiB(int size) |
要使用的緩衝區大小。這會定義在寫入為新的 SSTable 之前,將緩衝多少資料。這大致對應於建立的 SSTable 將擁有的資料大小。預設值為 128MB,這對於 1GB 堆積來說應該是合理的。如果在使用 SSTable 寫入器時產生 OutOfMemory 例外狀況,應降低此值。 |
withBufferSizeInMB(int size) |
已過時,且至少會提供至下一個主要版本。請使用 withBufferSizeInMiB(int size),這是具有新名稱的相同方法。 |
sorted() |
建立會預期已排序輸入的 CQLSSTableWriter。如果使用此選項,結果 SSTable 寫入器將預期列會以 SSTable 已排序順序新增(如果在列插入期間並非如此,則會擲回例外狀況)。SSTable 已排序順序表示列的加入方式,其分區金鑰會遵循分區器順序。只有當列可以按順序提供時,才應使用此選項,而這種情況很少見。然而,如果列可以按順序提供,使用此已排序選項可能會更有效率。如果使用此選項,會略過一些選項,例如 withBufferSizeInMB。 |
build() |
建立 CQLSSTableWriter 物件。 |