Nosql 实时查询/聚合数百万条记录-hadoop?hbase?卡桑德拉?
我有一个可以并行化的解决方案,但我(还)没有hadoop/nosql的经验,我不确定哪种解决方案最适合我的需要。理论上,如果我有无限的CPU,我的结果应该立即返回。因此,任何帮助都将不胜感激。谢谢 以下是我所拥有的:Nosql 实时查询/聚合数百万条记录-hadoop?hbase?卡桑德拉?,nosql,hadoop,cassandra,hbase,hive,Nosql,Hadoop,Cassandra,Hbase,Hive,我有一个可以并行化的解决方案,但我(还)没有hadoop/nosql的经验,我不确定哪种解决方案最适合我的需要。理论上,如果我有无限的CPU,我的结果应该立即返回。因此,任何帮助都将不胜感激。谢谢 以下是我所拥有的: 1000个数据集 数据集键: 所有数据集都有相同的键 100万把钥匙(以后可能是1000万或2000万把) 数据集列: 每个数据集都有相同的列 10至20列 大多数列都是我们需要对其进行聚合的数值(avg、stddev,并使用R计算统计数据) 一些列是“type_id”列,
- 1000个数据集
- 数据集键:
- 所有数据集都有相同的键
- 100万把钥匙(以后可能是1000万或2000万把)
- 数据集列:
- 每个数据集都有相同的列
- 10至20列
- 大多数列都是我们需要对其进行聚合的数值(avg、stddev,并使用R计算统计数据)
- 一些列是“type_id”列,因为在特定查询中我们可能 只想包括某些类型的ID
- web应用程序
- 用户可以选择他们感兴趣的数据集(15到1000)
- 应用程序需要显示:键和每个列的聚合结果(平均值、stddev)
- 数据更新:
- 可以添加、删除或替换/更新整个数据集
- 能够添加列会很酷。但是,如果需要,可以替换整个数据集
- 永远不要向数据集添加行/键-因此不需要具有大量快速写入的系统
- 基础设施:
- 目前有两台机器,每台24芯
- 最终,我们希望能够在amazon上运行此功能
- 分区很好,因为可以轻松地添加/删除/替换分区
- 数据库很适合基于类型\ id进行过滤
- 数据库不容易编写并行查询
- 数据库适用于结构化数据,而我的数据不是结构化的
- 为特定类型的id为每个数据集创建了一个选项卡分隔的文件
- 上传至hdfs
- 映射:检索每个键的值/列
- 减少:计算的平均值和标准偏差
谢谢 蜂巢或猪似乎不会帮你。基本上,它们中的每一个都编译成一个或多个map/reduce作业,因此响应不能在5秒内完成 HBase可能会工作,尽管您的基础架构对于最佳性能来说有点小。我不明白为什么你不能预先计算每一列的汇总统计数据。你应该查一下计算跑步平均值,这样你就不必做大量的减肥了 退房 stddev(X)=sqrt(E[X^2]-(E[X])^2) 这意味着您可以通过
sqrt(E[AB^2]-(E[AB])^2)。E[AB^2]是(sum(A^2)+sum(B^2))/(|A |+|B |)如果在开源空间中没有很好的解决方案,这是一个严重的问题。在商业空间中,像greenplum/netezza这样的MPP数据库应该这样做。 理想情况下,您需要谷歌的Dremel(BigQuery背后的引擎)。我们正在开发开源克隆,但这需要一些时间。。。
不管使用哪种引擎,我认为解决方案应该包括将整个数据集保存在内存中——它应该给出您需要的集群大小 如果我理解正确,您一次只需要在单个列上进行聚合 您可以以不同的方式存储数据以获得更好的结果 在HBase中,它看起来像 在今天的设置中,每个数据列有一个表,另一个表用于筛选字段(键入\u id) 在今天的设置中,每个键对应一行-您可能需要考虑如何将筛选字段合并到键中以实现高效筛选-否则您必须进行两阶段读取( 当前设置中每个表的列(即数千列) HBase不介意您添加新列,而且它是稀疏的,因为它不存储不存在的列的数据。
当你读一行的时候,你会得到所有相关的值,你可以很容易地做平均值等等。因为你的数据似乎是非常同质的,我肯定会看一看-你可以摄取和分析数据,而不需要MapReduce步骤(就你而言),RESTful API将帮助您根据查询创建web应用程序。事实上,根据您希望如何设计应用程序,您可以创建一个相当“实时”的应用程序。您可能希望使用一个普通的旧数据库来实现此目的。听起来您没有事务系统。因此,您可能只需要使用一个或两个大表。当您需要连接大数据时,SQL会出现问题。但是,由于您的数据集听起来不需要连接,您应该会很好。您可以设置索引来查找数据集,并在SQL或应用程序数学中查找。谢谢您的帮助。我可能不清楚为什么不能进行预计算。我很抱歉king表示一组数据集上特定键和特定列的平均值。例如,一个用户可以选择500个数据集,但不同的用户可以选择不同的500个数据集。即使我们正在计算所有相同键和所有相同列的统计数据,数据集(hadoop中的文件,或我数据库中的分区)就是varries。谢谢。@anish的stddev和您可以预先计算的平均值