2013-07-08 116 views
43

有誰知道Cassandra中兩個CQL數據類型textvarchar之間的區別嗎? Cassandra文檔將這兩種類型描述爲「UTF-8編碼字符串」,僅此而已。Cassandra:text vs varchar

+0

您能否提供文檔鏈接?我從來沒有聽說過。然而,我所聽到的是AsciiType和UTF8Type之間的差異應該是不言而喻的。 –

+0

@baba這些是CQL3使用的名稱。 – Raedwald

+0

是的,它花了我一段時間,但我想:) –

回答

49

text只是varchar的別名!

的文檔:

編輯
這裏的鏈接到C* 1.2 docs。文本vs varchar信息仍然是相同的,但是這個文檔包含一些額外的數據類型。

+2

你可以參考你發現的地方TEXT是VARCHAR的別名?無法在任何給定鏈接中找到它 – analogue

+0

「別名」的Ctrl + F不會產生您想要的答案。在CQL3文檔 - Apache鏈接中搜索「本地數據類型的信息」,您將看到varchar和text的描述,它們是相同的。還有[this](http://www.thefreedictionary.com/Aliases) –

+0

@analogue [關於數據類型](http://docs.datastax.com/en/cassandra/1.2/cassandra/tools/use_about_data_types_c.html)內部的'UTF8Type'與CQL名稱'text,varchar'匹配,我認爲它們是別名。 – karmakaze

9

也許你的意思是CQL存儲類型,如果不是,則忽略我的答案。

在CQL中一直存在着嘗試與cassandra的內部進行距離的趨勢。無論這是一件好事還是一件壞事,都有待解釋。然而,與CQL最新版本相關的是,CQL開發人員一直在試圖提出更爲人熟悉的語法,而這些語法並不深入cassandra的內部。

如果你看看這個SO問題,你會得到的情況一個很好的例證: Creating column family or table in Cassandra while working Datastax API(which uses new Binary protocol)

近CQL版本中,一些別名,外星人卡桑德拉,但非常熟悉DBA的已經開始出現。例如,cassandra的ColumnFamily的本機已被別名替換爲Table,而文本只是varchar的別名,反之亦然。同樣,如果這是一件好事,這是一個意見問題。

因此,總而言之,您可以交替使用varchar和text。

3

當我開始使用卡桑德拉時,這也使我感到害怕。

text和varchar都是UTF8編碼的字符串,並且是彼此的同義詞,也就是說它們是完全相同的東西。

作爲一個附加說明,如果一個來自像MS SQL這樣的關係型世界,那麼也許還會猶豫是否使用這些類型(特別是TEXT)作爲實體的主要字段。 TEXT尤其通常與文本內容的大塊相關聯,這些大塊不會將主要關鍵點提供給第三種正常形式的關係思維。但是由於所有Cassandra類型基本上都是以十六進制字節數組的形式存儲在磁盤上,所以在使用它們作爲主鍵時並沒有真正的重要性能。