我需要存储大量小文本文件(约30亿个,每天增长70m),大小从100B到几kB。我可以将它们分组,但组中的项目数量不可预测:从 1 到 100m。有2个要求:
实际上我可以做一个层次结构并将它们存储在文件系统中(我也可以使用ZFS在其之上进行压缩),但是我担心我浪费了太多空间,因为文件的平均大小大约只有1Kb。
我查看了 HBase 和 Cassandra,我认为它们对我来说太过分了,我不需要分片和其他功能。最近我发现了RocksDB。也许存在一些轻量级的解决方案?
这是 Cassandra 的一个非常好的用例。
您可以使用文件ID作为分区键,拥有数十亿个文件(分区)根本不是问题,并且通过ID检索会非常快。将文本文件的内容存储在 CQL
text
类型的列中。由于它只是一堆文本,因此它会在磁盘上自动严重压缩。
这是一个表定义示例:
CREATE TABLE files_by_id (
file_id int PRIMARY KEY,
content text
)
当然,您可以将文件 ID 存储为 CQL 类型
uuid
甚至 text
,具体取决于 ID 是什么。干杯!