我每天在分布式环境中存储50Gb的日志时遇到问题。我查看了Hadoop HDFS,但由于它在Windows基础架构上运行时出现问题,缺少多语言文件系统API,因此不适合我。另一方面,Cassandra很容易在任何平台上部署。我面临的唯一一个大问题是磁盘空间的使用。以下是数据:
因此,当从日志文件中存储日志行时,我的开销几乎是2倍。
是否有可能以某种方式调整Cassandra,以便在非常简单的场景下不会占用太多磁盘空间?
答案 0 :(得分:3)
我猜您的列系列中有一行(有四列)?与每列相关联的“开销”是长(时间戳,64位)和字节[](列名,最大64kb)。所以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 - 并使文件对应一行,并将块作为列值。 (来自维基上的“Cassandra Limitations”页面