我是Cassandra的新手,我想创建一个社交网站。我想知道如何存储图像?它应该将其存储为文件系统还是存储在Cassandra表中? 如果将图像存储在表中,如何构造表?
答案 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 ...)都应静态,例如只存储一次而不是每个块重复