需要高度压缩的数据存储区来抓取数据和日志数据

时间:2014-06-19 02:04:22

标签: database cassandra leveldb hypertable nosql

我必须在数据存储中以很高的压缩率存储大量爬网和日志数据。

到目前为止,我尝试并安装了Cassandra,Couchbase,Mysql和FlatFile格式,并阅读了Google Big Table,Hypertable和LevelDB File Layout的架构概述。

Cassandra和Couchbase大约是未压缩的Mysql数据库磁盘大小的1/5,但我想要更好的结果。

所以我需要一个具有高压缩功能的简单数据存储,如vertica,teradata,oracle和sqlserver产品。 (页面级压缩)

实际的flatFile数据集看起来像

/oil_type/gas_station/2014-03/2014-03-05-23.csv
/oil_type/gas_station/2014-03/2014-03-06-00.csv
/oil_type/gas_station/2014-03/2014-03-06-01.csv

每个文件大约有400个高冗余条目,每个大约5kb 文件可以从1722 KB压缩到39 KB,因此压缩比为44:1,最高可达100:1,具体取决于压缩块大小。

定义用例:

我必须每隔30秒轮询所有相关的gas_station网页/ apis以获取最新的定价信息,因为无法为每个加油站编写解析器,索引创建需要通用解决方案。通过一个包含所有焊接加油站页面的数据库,可以轻松开发和反向测试通用解析器。利用这种原始数据模型,应该避免通过破坏的特定转换器丢失数据。

使用像“oil_type-gas_station-timestamp-content”这样的键,可以轻松有效地比较两个gas_station价格随着时间的推移。对于读取小于时间系列的时间系列,压缩块大小应该只解压缩2到4个块。

因此,以下功能是最佳的:

  • SSTables
  • 可配置的压缩选项(级别,压缩引擎,块大小(从64kb到10 MB))
  • 范围扫描
  • Java Bindings
  • 用于更好压缩的列数据

很高兴:

  • 复制
  • Multi Master
  • 写1的法定人数
  • 对数据进行前向和后向迭代。 (比较两个时间序列)
  • 可配置的副本分发
  • 几个依赖

问题:

免费数据库能够保存高冗余爬网数据的归档数据(只需几个字节更改),压缩良好且不会花太多时间查询随机记录。 (在mysql归档格式的对面,必须将整个表解压缩到请求的行)

也许有一个日志数据库,能够索引很多日志行并在内部压缩它们? (标志的范围,流利,水槽)

如果有人知道某些基准,那么就这个主题的数字对评估正确的技术会有很大的帮助。

我很高兴你的帮助!

1 个答案:

答案 0 :(得分:1)

假设您处于多线程环境,可能是多进程,LevelDB不是一个好主意。

Cassandra是用Java编写的,因此在处理大量文件时你会看到过多的内存消耗,至少不需要调整JVM。此外,由于它是用Java编写的,因此它可能不会足够快以实现真正良好的压缩。

我在Linux机器上使用HyperTable来存储照片和电影。
您可以使用Thrift支持的任何语言使用HyperTable。

此外,如果您需要它,您可以使用C ++驱动程序,以提高速度 关于HyperTable的一个好处是,它没有添加对Java的依赖,因为它是用C ++编写的,这也意味着它快速且不垃圾收集(没有内存开销) )。

Hypertable确实有一个Java客户端,但开箱即用 我使用自己的C#Thrift客户端,我从Java移植。
请参见> here<代码。

由于HyperTable在Byte-Arrays上运行,你可以简单地将你的文件放在thrift-client中作为字节数组,如果你已经告诉它在列定义中这样做,HyperTable会自动为你压缩它。 / p>

如果你绝对想要,你也可以试试MongoDb。
顺便说一句,Mongo实际上来自hu mongo us。
但是,我必须说我从来没有"真的"用过它。