【问题标题】:When to use Blobs in a Cassandra (and CQL) table and what are blobs exactly?何时在 Cassandra(和 CQL)表中使用 Blob,究竟什么是 Blob?
【发布时间】:2018-03-19 16:06:10
【问题描述】:

我试图更好地理解在 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+ 其中 hex 是十六进制字符,例如 [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 函数接受类型类型的参数并将其作为 斑点。相反,blobAsType 函数采用 64 位 blob 参数 并将其转换为 bigint 值。例如,bigintAsBlob(3) 是 0x0000000000000003 和 blobAsBigint(0x0000000000000003) 为 3。

我从中得到的是,它只是一个长的十六进制/二进制。但是,当我将它用作潜在表的列类型以及它与其他类型相比如何更好或更差时,我并不真正欣赏。此外,了解它的一些属性可能是确定 blob 适用于哪些情况的好方法。

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    Blobs(二进制大对象)是当您的数据不适合 C* 提供的标准类型时的解决方案。 例如,假设您想创建一个允许用户上传任何类型文件的论坛。要将这些存储在 C* 中,您将使用 Blob 列(或可能使用多个 blob 列,因为您不希望单个单元格变得太大)。

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

    【讨论】:

    • 但是 text 和 blob 在大小方面有相同的限制,即 2 GB?
    • 你不应该为任何一种类型制作那么大的单元格,但这是上限
    • 我同意!我之所以这么说,是因为您提到 BLOB 将用于数据不适合标准类型的地方。当所有字段都具有相同的限制时,这并不重要吗?当然,如果是二进制数据,我们使用 BLOB。
    • 为了适合我的意思是数据的类型而不是它的大小。
    • @rogodeter,不知道你在问什么,也许你可以通过一些代码示例提出一个关于 SO 的新问题
    【解决方案2】:

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

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2014-10-28
      相关资源
      最近更新 更多