我有一个可以并行化的解决方案,但我(还)没有使用 hadoop/nosql 的经验,我不确定哪种解决方案最适合我的需求。理论上,如果我有无限的 CPU,我的结果应该会立即返回。因此,任何帮助将不胜感激。谢谢!
这是我所拥有的:
- 1000 个数据集
- 数据集键:
- 所有数据集都有相同的键
- 100 万个密钥(以后可能是 10 或 2000 万个)
- 数据集列:
- 每个数据集都有相同的列
- 10 到 20 列
- 大多数列是我们需要聚合的数值(avg,stddev,并使用 R 计算统计信息)
- 一些列是“type_id”列,因为在特定查询中我们可能只想包含某些 type_id
- Web应用程序
- 用户可以选择他们感兴趣的数据集(从 15 到 1000)
- 应用程序需要呈现:key,以及每列的聚合结果(avg,stddev)
- 数据更新:
- 可以添加、删除或替换/更新整个数据集
- 能够添加列会很酷。但是,如果需要,可以只替换整个数据集。
- 永远不要向数据集添加行/键 - 所以不需要具有大量快速写入的系统
- 基础设施:
- 目前有两台机器,每台 24 核
- 最终,希望能够在亚马逊上运行它
我无法预先计算我的聚合值,但由于每个键都是独立的,因此应该很容易扩展。目前,我在 postgres 数据库中有这些数据,其中每个数据集都在自己的分区中。
- 分区很好,因为可以轻松添加/删除/替换分区
- 数据库非常适合基于 type_id 进行过滤
- 数据库不容易编写并行查询
- 数据库适合结构化数据,而我的数据不是结构化的
作为概念证明,我尝试了 hadoop:
- 为特定 type_id 为每个数据集创建了一个制表符分隔文件
- 上传到 hdfs
- map:为每个键检索一个值/列
- 减少:计算的平均值和标准差
从我粗略的概念验证中,我可以看到这将很好地扩展,但我可以看到 hadoop/hdfs 有延迟 我读到它通常不用于实时查询(即使我可以返回结果5 秒后返回给用户)。
关于我应该如何处理这个问题的任何建议?我正在考虑接下来尝试 HBase 来感受一下。我应该看看 Hive 吗?卡桑德拉?伏地魔?
谢谢!