Apache Cassandra 預定義資料型別


介紹

作為一款著名的開源分散式 NoSQL 資料庫系統,它能夠管理大量的結構化資料。掌握 Cassandra 的各種資料型別對於充分利用其強大的設計至關重要。

本文將引導您瞭解內建和集合資料型別等關鍵元素,讓您掌握知識,輕鬆最佳化資料庫操作。

Apache Cassandra 中的內建資料型別

Apache Cassandra 提供了廣泛的預定義資料型別,包括數值型別、文字型別、日期型別、計數器型別和其他自定義資料型別。

數值型別

它提供了各種數值資料型別,以滿足不同的計算需求。這些包括 tinyint、smallint、int、bigint、decimal、double 和 float。tinyint 使用帶符號的 8 位整數表示最小的整數,而 bigint 使用帶符號的 64 位長整數表示最大的整數。

decimal 型別適用於精確的定點數,而 float 和 double 則設計用於浮點數,在精度和範圍之間取得平衡。這些選項有助於根據特定用例最佳化資料儲存策略,從而以有序的方式提高效能效率。

文字型別

文字型別儲存和操作字串資料。它們用途廣泛,可在資料庫中以各種方式使用。

  • text − 這是一個標準的字串型別,儲存以 UTF-8 編碼的字元。它最多可容納 20 億個字元,非常適合儲存大量文字資料。其語法為 'text'。示例程式碼如下:

String exampleCode = "CREATE TABLE my_table ( "+ " id UUID PRIMARY KEY, "+ " name text, "+ " description text "+ ");";
  • varchar − 與 text 資料型別類似,varchar 也儲存字元字串,長度限制為 20 億個字元。區別在於它們在 Apache Cassandra 中的內部處理;但是,從使用者的角度來看,它們是相同的。使用 varchar 的語法很簡單,就是 'varchar'。例如:

CREATE TABLE users ( id UUID PRIMARY KEY, name VARCHAR );
  • ascii − 與 text 和 varchar 型別不同,ascii 型別僅儲存與 ASCII 相容的字元,儲存容量較小,最大長度為 64k 位元組(~65KB)。在處理舊系統或需要精確控制字元編碼的資料時,它非常有用。語法為 'ascii',例如:

CREATE TABLE users (
   id UUID PRIMARY KEY,
   name ASCII
);
INSERT INTO users (id, name) VALUES (uuid(), 'V Sharma');
SELECT * FROM users;
  • uuid − 通用唯一識別符號 (UUID) 欄位儲存標準化的 128 位識別符號,適用於全域性唯一標識用例,例如會話金鑰、事務 ID 等。Apache Cassandra 中存在兩種型別 - `uuid` 和 `timeuuid`。雖然 'uuid' 可以攜帶任何隨機 UUID,但 'timeuuid' 通常與基於時間的 UUID 值一起使用,在這種情況下,基於時間的排序很重要。基於時間的排序很重要。示例:

CREATE TABLE events (
   event_id timeuuid PRIMARY KEY,
   event_name text,
   event_time timestamp
);
INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 1', toTimestamp(now()));
INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 2', toTimestamp(now()));
INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 3', toTimestamp(now()));
SELECT * FROM events ORDER BY event_time DESC;
  • inet − 此型別以 IPv4 或 IPv6 格式儲存 IP 地址,可以在列式資料庫系統中優雅地處理網際網路網路定址需求。例如:

CREATE TABLE users ( id UUID PRIMARY KEY, name text, ip_address inet );

日期型別

作為 Apache Cassandra 內建資料型別的一部分,日期型別對於管理和操作資料庫中的日期和時間資料至關重要。使用這些型別可以精確控制日期和時間在資料集中表示的方式,有助於有效的資料建模技術。

  • date − 它表示特定的一天,不包含時間。其語法格式為 'YYYY-MM-DD'。要設定某個日期值,您可以編寫:

`INSERT INTO table_name (column1) VALUES ('2022-10-14');`
  • time − 此型別代表一天中的時間,不參考特定的一天。它使用自午夜以來的納秒數,範圍從 0 到 86399999999999。例如:

`INSERT INTO table_name (column1) VALUES ('12:30');`
  • timestamp − 此預定義資料型別通常用於時間序列資料建模,它可以精確到毫秒地跟蹤特定事件發生的時刻。例如:

`INSERT INTO table_name (column1) VALUES ('2022-10-14 12:30');`
  • duration − 使用月、日和納秒間隔的組合來測量持續時間或週期,可以精確地處理較長的時間跨度。

計數器型別

Apache Cassandra 中的計數器資料型別允許您對計數器列執行遞增和遞減操作。以下是使用計數器型別的語法和程式碼:

  • 要建立帶有計數器列的表,您需要在列定義中將資料型別指定為 'counter'。例如:

CREATE TABLE my_table ( id UUID PRIMARY KEY, counter_column COUNTER );
  • 要遞增或遞減計數器列的值,您可以使用帶有 '+= n' 或 '-= n' 語法的 UPDATE 語句。例如:

  • 要遞增計數器列的值:

UPDATE my_table SET counter_column = counter_column + 1 WHERE id = 'some_id';
  • 要遞減計數器列的值:

UPDATE my_table SET counter_column = counter_column - 1 WHERE id = 'some_id';
  • 檢索計數器列的值與檢索常規列的方式類似。但是,請記住,由於 Cassandra 的分散式性質,它不能保證計數器值的絕對精度。例如:

SELECT counter_column FROM my_table WHERE id = 'some_id';

Apache Cassandra 中的集合資料型別

在 Apache Cassandra 中,集合資料型別提供了一種在單個列中儲存多個值的方法。Cassandra 中的三種主要集合資料型別是集合、列表和對映。

集合是唯一元素的無序集合,而列表保持元素的順序並允許重複。對映由鍵值對組成,鍵和值都可以是 Cassandra 支援的任何資料型別。

Apache Cassandra 中的使用者定義資料型別

Apache Cassandra 中的使用者定義資料型別 (UDT) 允許您建立自己的自定義資料結構,這些結構可以用作資料庫模式中的列型別。這提供了靈活性,可以在單個列內建模複雜和巢狀的資料關係。

要定義 UDT,您需要指定型別的名稱及其欄位以及相應的數 據型別。例如:

cql
CREATE TYPE address (
   street text,
   city text,
   state text,
   zip int
);

在此示例中,我們定義了一個名為“address”的 UDT,它包含四個欄位:street(text)、city(text)、state(text)和 zip(int)。

定義 UDT 後,它可以在建立表時用作列型別。這是一個示例:

cql
CREATE TABLE users (
   id UUID PRIMARY KEY,
   name text,
   email text,
   home_address frozen
   ,
);

在此表定義中,我們有一個名為“home_address”的列,其型別為 UDT“address”。關鍵字“frozen”用於指示 UDT 應被視為原子值。

在插入或更新此表中的行時,您將使用點表示法為“home_address”列的每個欄位提供值。例如:

cql
INSERT INTO users (id, name, email, home_address)
VALUES
(UUID(), 'John Doe', 'john.doe@example.com',
{text: '123 Main St', city: 'New York', state: 'NY', zip: 10001});

您還可以將 UDT 巢狀在其他 UDT 中,甚至可以在集合(如集合、列表或對映)中使用它們。

總的來說,Apache Cassandra 中的使用者定義資料型別為在資料庫模式中建模複雜的資料結構提供了極大的靈活性。透過定義您自己的自定義型別,您可以建立更有意義和更直觀的資料表示,使資料更容易使用和查詢。

結論

瞭解 Apache Cassandra 中的預定義資料型別對於有效的資料建模和儲存至關重要。透過利用這些內建資料型別(如數值型別、文字型別、日期型別和計數器型別)以及集合和使用者定義型別,開發人員可以建立靈活且可擴充套件的體系結構,以滿足他們的特定需求。

憑藉 Apache Cassandra 的高效能和容錯功能,它仍然是構建分散式系統和處理大規模資料儲存需求的首選方案。利用此 NoSQL 資料庫提供的廣泛查詢功能,進一步最佳化應用程式的效能。

更新於:2024年1月31日

瀏覽量:52

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告