我必须在数据存储中以很高的压缩率存储大量爬网和日志数据。
到目前为止,我尝试并安装了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个块。
因此,以下功能是最佳的:
很高兴:
问题:
免费数据库能够保存高冗余爬网数据的归档数据(只需几个字节更改),压缩良好且不会花太多时间查询随机记录。 (在mysql归档格式的对面,必须将整个表解压缩到请求的行)
也许有一个日志数据库,能够索引很多日志行并在内部压缩它们? (标志的范围,流利,水槽)
如果有人知道某些基准,那么就这个主题的数字对评估正确的技术会有很大的帮助。
我很高兴你的帮助!
答案 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。
但是,我必须说我从来没有"真的"用过它。