0
我是Cassandra的新手,我想创建一个社交网站。我想知道我应该如何存储图像?应该将其作为文件系统存储还是将其存储在Cassandra表中? 如果在表格中存储图像,如何构造表格?应该将其作为文件系统存储还是将其存储在Cassandra表中?
我是Cassandra的新手,我想创建一个社交网站。我想知道我应该如何存储图像?应该将其作为文件系统存储还是将其存储在Cassandra表中? 如果在表格中存储图像,如何构造表格?应该将其作为文件系统存储还是将其存储在Cassandra表中?
它应该将其存储为文件系统还是将其存储在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只存储一次,而不是每个块重复
亚伦莫顿和我做了一个关于如何做到这一点,如果你想获得更多信息的教程会话:http://youtu.be/gk-B75xgFUg –
我有2个表“职位“和”饲料“;我应该将图像存储在“发布”和“提要”表中,还是仅存储表格“image”中的image_id?表格“post”和“feed”中会使用相同的图像(表格“feed”中会有很多重复数据) – Q24
只需使用image_id并避免重复大量数据。您甚至可以尝试对图像进行哈希处理以自行去除图像。 –