它应该将其存储为文件系统还是存储在Cassandra表中?

时间:2016-01-13 12:41:47

标签: cassandra

我是Cassandra的新手,我想创建一个社交网站。我想知道如何存储图像?它应该将其存储为文件系统还是存储在Cassandra表中? 如果将图像存储在表中,如何构造表?

1 个答案:

答案 0 :(得分:2)

  

它应该将其存储为文件系统还是将其存储在Cassandra表中?

取决于图片的尺寸。 Cassandra是一个数据库,主要用于存储结构化数据。原始文件不是结构化数据。

然而,人们仍然可以使用Cassandra进行二进制blob存储,因为它具有处理多数据中心和高可用性的能力,这也是一个正当理由。

  

如果将图像存储在表格中,如何构建表格?

如果图片的最大可能大小约为1Mb - 2Mb,您可以尝试将此图像存储在这样的常规blob列中

CREATE TABLE images(
   image_id uuid,
   name text,
   size_in_bytes bigint,
   author text,
   ...
   content blob,
   PRIMARY KEY(image_id) 
);

//Load the image by id
SELECT * FROM images WHERE image_id=xxx;

现在,如果您认为图像大小可以大幅增加到任意大小,那么您最好的机会是将其在应用程序中手动拆分为固定大小的块(例如64kb)并将所有块存储在宽分区:

CREATE TABLE images(
   image_id uuid,
   name text static,
   size_in_bytes bigint static,
   author text static,
   ...
   chunk_count int static,
   chunk_id uuid,
   content blob,
   PRIMARY KEY(image_id, chunk_id) 
);

//Load all the chunks of the image
//Use iterator to fetch chunks page by page
SELECT chunk_id,content FROM images WHERE image_id=xxx; 

请注意,在这种情况下,所有元数据列(name,size_in_bytes,author ...)都应静态,例如只存储一次而不是每个块重复