2010-06-28 57 views
1

我有一个问题,每天在分布式环境中存储50Gb的日志。我查看了Hadoop HDFS,但由于它在Windows基础结构上运行时出现问题,缺乏多语言文件系统API,所以它不适合我。另一方面,卡桑德拉非常容易在任何平台上部署。我面临的唯一的大问题是磁盘空间的使用。下面是数字:Cassandra是否足够适用于根据磁盘空间使用情况存储日志?

  • 原始日志文件的大小为224MB
  • Cassandra的数据文件是557Mb
  • 卡桑德拉索引文件了109M

所以我存储从日志行的时候得到了几乎2倍的开销日志文件。

是否有可能以某种方式调整Cassandra,因此它不会为非常简单的场景吃掉太多的磁盘空间?

+0

mamu,please read http://stackoverflow.com/questions/2359175/cassandra-file-structure-how-are-the-files-used/2359282#2359282 – Schildmeijer 2010-06-28 21:04:44

回答

3

我想你的意思是你的专栏里有一行(有四列)?与每列关联的“开销”是一个很长的(时间戳,64位)和一个字节[](列名,最大64 kb)。所以4倍的磁盘使用似乎有点奇怪。你在做删除吗?一定要了解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'页面)

+0

Schildmeijer,实际上当我提交我的问题时,我错误地使用了Cassandra磁盘空间(你是对的,我没有运行压缩)。因此,这里有真实的数字(我还更新了原来的问题): - 原始日志文件的大小为224MB - Cassandra的数据文件是557Mb - 卡桑德拉索引文件了109M 我没有做任何删除。我将每条日志行分别放入Cassandra,最长的行大约1kb。 仍然2倍的开销是有点大我的目的存储多头 - 有没有什么办法来优化呢? 谢谢! – sha1dy 2010-06-29 07:55:15

相关问题