我必须以有效的压缩率将大量爬网和日志数据存储在 Datastore 中。
到目前为止,我尝试并安装了 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 网页/api 以获得最新的定价信息,因为不可能为每个加油站编写解析器,索引创建需要通用解决方案。使用包含所有 craweld 加油站页面的数据库,可以轻松开发通用解析器并进行回测。使用此原始数据模型,应避免通过损坏的特定转换器丢失数据。
使用“oil_type-gas_station-timestamp-content”之类的键,可以轻松高效地比较两个加油站的价格随时间变化。对于读取小于压缩块大小的时间序列,只需解压缩 2 到 4 个块。
因此,以下功能是最佳的:
- SSTables
- 可配置的压缩选项(级别、压缩引擎、块大小(从 64kb 到 10 MB))
- 范围扫描
- Java 绑定
- 列数据存储以实现更好的压缩
很高兴有:
- 复制
- 多主
- 写入法定人数 1
- 对数据进行前向和后向迭代。(比较两个时间序列)
- 可配置的副本分布
- 很少的依赖
问题:
Wich 免费数据库能够保存高冗余爬取数据的归档数据(只有几个字节变化),压缩好并且不会花费太多时间来查询随机记录。(与 mysql 归档格式相反,它必须解压缩整个表,直到请求的行)
也许有一个日志数据库,它能够索引很多日志行并在内部压缩它们?(logstash、fluentd、flume 的范围)
如果有人知道一些基准,关于这个主题的数字,这将有助于评估正确的技术。
我很高兴你的帮助!