何时在Cassandra(和CQL)表中使用Blob以及什么是blob?

时间:2014-04-15 17:28:31

标签: cassandra cql

在cassandra中制作表条目时以及blob类型是一个不错的选择时,我试图更好地理解设计决策选择。

我意识到我并不知道何时选择blob作为数据类型,因为我不确定blob究竟是什么(或者缩写代表什么)。因此,我决定阅读以下有关数据类型blob的文档:

http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/blob_r.html

  

斑点

Cassandra 1.2.3 still supports blobs as string constants for input (to allow smoother transition to blob constant). Blobs as strings are
     

现已弃用,不久将不再受支持。如果你   使用字符串作为blob,更新您的客户端代码以切换到blob   常量。 blob常量是由。定义的十六进制数   0xX +其中,十六进制是十六进制字符,例如   [0-9A-FA-F]。例如,0xcafe。

Blob conversion functions

A number of functions convert the native types into binary data (blob). For every <native-type> nonblob type supported by CQL3, the
     

typeAsBlob函数接受类型类型的参数并将其作为a返回   斑点。相反,blobAsType函数采用64位blob参数   并将其转换为bigint值。例如,bigintAsBlob(3)是   0x0000000000000003和blobAsBigint(0x0000000000000003)为3。

我得到的是它只是一个很长的十六进制/二进制。但是,当我将它用作潜在表格的列类型以及它比其他类型更好或更差时,我真的不会感激。此外,通过一些属性可能是一个很好的方法来弄清楚blob适合的情况。

2 个答案:

答案 0 :(得分:6)

Blob (Binary Large OBjectS)是您的数据不适合C *提供的标准类型的解决方案。 例如,假设您想建立一个允许用户上传任何类型文件的论坛。要将它们存储在C *中,您将使用Blob列(或者可能使用几个blob列,因为您不希望单个单元格变大)。

另一个示例可能是允许用户拥有当前照片的表格,此照片可以作为blob添加,并与其他用户信息一起存储。

答案 1 :(得分:2)

Accoring to 3.x document,blob类型适合存储小图像或短字符串。

在我的情况下,我用它来存储散列值,因为散列函数返回二进制,最好的选择是从表数据大小的视图存储为二进制。 (如果不考虑大小,转换为字符串并存储为字符串(文本)也可以。)

下面的结果显示我在本地计算机上的测试(插入100万条记录),大小为52,626,907(二进制)和72,879,839(base64转换后的数据为字符串)。 unit:byte。

CREATE TABLE IF NOT EXISTS testks.bin_data (
  bin_data blob,
  PRIMARY KEY(bin_data)
);

CREATE TABLE IF NOT EXISTS testks.base64_data (
  base64_data text,
  PRIMARY KEY(base64_data)
);

cqlsh> select * from testks.base64_data limit 10;

 base64_data
------------------------------
 W0umEPMzL5O81v+tTZZPKZEWpkI=
 bGUzPm4zRvcqK1ogwTvPNPNImvk=
 Nsr0GKx6LjXaiZSwATU38Ffo7fA=
 A6lBV69DbFz/UFWbxolb+dlLcLc=
 R919DvcyqBUup+NrpRyRvzJD+/E=
 63LEynDKE5RoEDd1M0VAnPPUtIg=
 FPkOW9+iPytFfhjdvoqAzbBfcXo=
 uHvtEpVIkKivS130djPO2f34WSM=
 fzEVf6a5zk/2UEIU8r8bZDHDuEg=
 fiV4iKgjuIjcAUmwGmNiy9Y8xzA=

(10 rows)
cqlsh> select * from testks.bin_data limit 10;

 bin_data
--------------------------------------------
 0xb2af015062e9aba22be2ab0719ddd235a5c0710f
 0xb1348fa7353e44a49a3363822457403761a02ba8
 0x4b3ecfe764cbb0ba1e86965576d584e6e616b03e
 0x4825ef7efb86bbfd8318fa0b0ac80eaa2ece9ced
 0x37bdad7db721d040dcc0b399f6f81c7fd2b5cea6
 0x3de4ca634e3a053a1b0ede56641396141a75c965
 0x596ec12d9d9afeb5b1b0bb42e42ad01b84302811
 0xbf51709a8d1a449e1eea09ef8a45bdd2f732e8ec
 0x67dcb3b6e58d8a13fcdc6cf0b5c1e7f71b416df6
 0x7e6537033037cc5c028bc7c03781882504bdbd65