2016-01-13 63 views

回答

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 ...)应该是static只存储一次,而不是每个块重复

+1

亚伦莫顿和我做了一个关于如何做到这一点,如果你想获得更多信息的教程会话:http://youtu.be/gk-B75xgFUg –

+0

我有2个表“职位“和”饲料“;我应该将图像存储在“发布”和“提要”表中,还是仅存储表格“image”中的image_id?表格“post”和“feed”中会使用相同的图像(表格“feed”中会有很多重复数据) – Q24

+0

只需使用image_id并避免重复大量数据。您甚至可以尝试对图像进行哈希处理以自行去除图像。 –

相关问题