2013-01-18 56 views
0

还有一个类似的问题Large data - storage and query 但我认为我的问题更加困难。大数据:存储和查询

我有一个巨大的数据集,简化问题,假设每条记录都有3场,

日期,地点,对象

意味着这一天,对象访问哪个地方。

每天可以有5000万条新记录。我需要保留100天的数据。

和查询这样的:

  1. 给定一个日期范围,列出谁访问过特定位置X的所有对象;
  2. 给定日期范围,列出特定对象访问过的所有位置。

我该如何设计?有没有可能提供解决方案?任何工具,我应该尝试吗?我可以使用mongodb或hadoop吗?

而且,查询不需要很长时间,因为它将从前端查询。

谢谢。

回答

0

这个问题并不像听起来那么难。您需要两个索引:

(Location, Date, Object) 
(Object, Date, Location) 

这两个索引最适合您的查询。没有固有的可扩展性限制,您需要担心。

您可能会考虑在Date上进行分区,以便您可以高效地删除旧分区。

1

您描述的查询非常适合关系数据库。虽然你会有大量的数据,但查询很适合一个相当简单的索引方案。

一些商业数据库具有地理空间扩展,它可以让你扩展查询“给出的日期范围,告诉我对象已在该位置x 20公里之内”。

它似乎同时你有大量的行,实际的数据大小是相当有限的;期望它能够适应高端机器的内存并不是不合理的。

大多数数据库系统可以处理非常大的表 - 有没有逻辑限制的RDBMS持有的记录数量,但也有明显的实际限制。甲骨文在大型数据集的性能方面拥有良好的声誉,但绝对值得让有经验的Oracle DBA提供帮助。处理大量数据时的常用策略是“sharding” - 将不同的记录放在不同的表和/或服务器中。例如,如果所有查询都是基于日期的,则可以将每个月的数据放在不同的物理服务器上。

我与RDBMS开始,创建一个测试数据集的工作,如果它运行和调整样本查询符合您的可扩展性的需求。调整硬件,并添加更多,如果你能负担得起。

我不认为你会从Hadoop中获得很多好处 - 你没有做太多的处理,你只是在搜索一个大的数据集。

MongoDB旨在处理文档样式的数据;你的数据本质上似乎是关系型的,而不是一个文档。你可以在MongoDB中构建它,但我不确定你会得到多少好处。

+0

如果使用关系数据库,我的问题是像sybase,db2这样的典型数据库,它们是否对表中的记录有限制?对于我的问题,我最终会有数十亿条记录。 – taox

+0

是的,RDBMS应该能够处理这些记录 - 我已经更新了答案。不过,您可能需要获得DBA来帮助您调整数据库。 –

+0

谢谢,我会试一试! – taox