簡體   English   中英

Cassandra並使用cql來插入列

[英]Cassandra and using cql to INSERT a column

為了理解Cassandra中的一些基礎知識,我的印象是開發人員在設計數據模型時可以采用的一個優點是動態地將列添加到由鍵標識的行中。 這意味着我可以對我的數據進行建模,以便在有意義的情況下,密鑰可以是諸如關系數據庫中的user_id之類的東西,例如,我可以創建與該用戶相關的任意數量的列。

我不理解的是為什么CLQ示例中的預定義列非常強調,特別是在CREATE TABLE / COLUMNFAMILY示例中:

CREATE TABLE emp (
  empID int,
  deptID int,
  first_name varchar,
  last_name varchar,
  PRIMARY KEY (empID, deptID)
);

將這種類型的模型放入關系數據庫中會不會更有意義? 如果我在運行時之前不知道我的列名並且需要動態創建它,該怎么辦? 我是否必須使用ALTER TABLE使用CLQ向行添加新列? 我想到的特定應用程序用例我只需要一個鍵標識符和任意列名,其中列名可能包含時間戳+ variable_identifier。

Cassandra是正確的工具嗎? 文檔中的預定義列只是一個示例嗎? 如何使用現有列族/表添加動態列名?

我是否必須使用ALTER TABLE使用CLQ向行添加新列?

是的,必須先定義架構,然后才能插入“新列”。 但是,您可以定義1列作為數據集合。 混合動態和靜態列下,查看datastax的'thrift to cql upgrade'博客中的'tag'示例。

如何使用現有列族/表添加動態列名?

在CQL中,您必須首先使用ALTER關鍵字更改表(列族)的結構。 我的猜測是,這是為了確保列族包含指定的列,從而消除錯誤添加列的可能性(更好的數據質量)。

Cassandra是正確的工具嗎?

我認為是這樣,但是如果您需要在不指定模式更改語句的情況下即時添加列,那么您應該考慮基於thrift的API,這可以做到這一點,但只是一個友好的警告,datastax建議新應用程序使用CQL。

我在郵件列表中的回答是:

對於Cassandra來說,Schemalessness根本不是一個有趣的概念。 您可能會遭受過多的文檔數據庫暴露。 經驗表明,隨着項目和團隊的成長,使用模式說“電子郵件列是文本,出生日期列是時間戳”非常有用。

關系模型本身沒有任何問題(根據需要對規范進行非規范化的通常解釋)。 Cassandra是關於使應用程序擴展,而不是為了與眾不同而將SQL嬰兒扔出洗澡水。

也就是說,如果你真的不知道可能適用哪種屬性(通常是因為它們是用戶生成的),你可以使用Map。

暫無
暫無

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

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