就磁盘空间使用而言,Cassandra 是不是足够适合存储日志?

Posted

技术标签:

【中文标题】就磁盘空间使用而言,Cassandra 是不是足够适合存储日志?【英文标题】:Is Cassandra suitable enough for storing logs in term of disk space usage?就磁盘空间使用而言,Cassandra 是否足够适合存储日志? 【发布时间】:2010-06-28 18:48:11 【问题描述】:

我在分布式环境中每天存储 50Gb 的日志时遇到了问题。我查看了 Hadoop HDFS,但因为它在 Windows 基础架构上运行存在问题,缺乏多语言文件系统 API,它不太适合我。另一方面,Cassandra 很容易部署在任何平台上。我面临的唯一大问题是磁盘空间使用。以下是数字:

原始日志大小为 224Mb Cassandra 数据文件为 557Mb Cassandra 索引文件为 109Mb

因此,从日志文件存储日志行时,我的开销几乎增加了 2 倍。

是否可以通过某种方式调整 Cassandra,使其在非常简单的场景中不会占用太多磁盘空间?

【问题讨论】:

妈咪,请看***.com/questions/2359175/… 【参考方案1】:

我猜你的意思是你的列族中的一行(四列)?与每列相关的“开销”是一个 long(时间戳,64 位)和一个 byte[](列名,最大 64 kb)。所以 4x 磁盘使用率似乎有点奇怪。你在做任何删除吗?一定要了解how deletes are done in a distributed, eventually consistent system。

请务必阅读“compactions”。 ("一旦压缩完成,旧的 SSTable 文件可能会被删除")

还想提醒您 Thrift 关于如何进行流式传输的限制。

Cassandra 的公共 API 基于 Thrift,它不提供流式传输功能 - 写入或获取的任何值都必须适合内存。这是 Thrift 设计所固有的,因此不太可能改变。因此,为 Cassandra 添加大对象支持需要一个特殊的 API 来手动将大对象拆分为多个部分。 http://issues.apache.org/jira/browse/CASSANDRA-265 中描述了一种潜在的方法。同时,作为一种解决方法,您可以手动将文件拆分为您喜欢的任何大小的块——至少一个人使用 64MB——并使文件对应于一行,并将块作为列值。 (来自 wiki 上的“Cassandra Limitations”页面)

【讨论】:

Schildmeijer,实际上我在提交问题时对 Cassandra 磁盘空间的使用有误(你是对的,我没有运行压缩)。所以这里是真实的数字(我也更新了原始问题): - 原始日志大小是 224Mb - Cassandra 数据文件是 557Mb - Cassandra 索引文件是 109Mb 我没有做任何删除。我将每个日志行分别放入 Cassandra,最长的行大约 1kb。对于我存储多头的目的来说,仍然有 2 倍的开销有点大 - 有没有办法优化它?谢谢!

以上是关于就磁盘空间使用而言,Cassandra 是不是足够适合存储日志?的主要内容,如果未能解决你的问题,请参考以下文章

cassandra的物理磁盘空间管理

nodetool 清理后磁盘空间使用量增加 - Apache Cassandra

磁盘上没有足够的空间完成此操作

正在保存备份的磁盘没有足够的可用空间

Cassandra 磁盘空间开销

删除 cassandra 数据后磁盘空间不减少