1

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

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

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

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

4

1 回答 1

3

我猜你的意思是你的列族中的一行(四列)?与每一列相关的“开销”是一个 long(时间戳,64 位)和一个 byte[](列名,最大 64 kb)。所以 4x 磁盘使用率似乎有点奇怪。你在做任何删除吗?请务必了解如何在分布式、最终一致的系统中完成删除

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

还想提醒您有关如何完成流式传输的 Thrift 限制。

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

于 2010-06-28T20:38:42.387 回答