我需要存储原始(而不是聚合)数据,这些数据具有多个分段(聚合)的可能性。例如:一天,一天中的一个小时,设备等。至少有6个分段列,每个列平均有5个唯一值。我需要管理这些数据在各种不同范围内的每一个可能的聚合。
例如:
必须是原始数据。这一要求将导致平均每月1亿条记录。我不能存储任何金额,因为我必须为每个分段列组合存储所有可能的和。
什么样的数据库引擎/设计最适合这样的任务?最初,对于应用程序,我们选择了MySQL数据库,但在选择的时候,我们并不完全了解需要提取的数据结构和统计信息。现在,当我知道它时,我想到了表分区,但我不熟悉它,也不确定它是否真的有帮助,因为范围很广。如果它没有帮助,如果MySQL失败了这个任务,不管是表格设计,怎么办?比如MongoDB之类的非关系引擎?
查询的要求-不超过2-3秒.
被认为是用于数据库处理的公司硬件资源--几个高质量的服务器,但肯定不是几十个或数百个。
发布于 2012-12-04 14:01:07
我发现最有效的方法不是将原始数据存储在任何类型的数据库中,而是在这些系统中存储您想要查询的内容的聚合。这其中的原因是原始数据很笨重,一天内搜索可能出现的1亿行将产生一个巨大的延迟问题,而不管您搜索的是什么,特别是如果您拥有整个原始数据集的话。不过,您需要这些日志文件,以便可以对其进行聚合以生成所需的结果。
我发现,在HTTP请求工作时存储这些日志,或者甚至编写一些东西来存储原始JSON文件,都有助于将其提升到第二层。
例如,我看到你想要做一个设备组。您可以使用Mongo将其聚合成类似于以下结构的内容:
{
"_id": "20121005_siteKey_device",
"hits": 512,
"hours": {
"0": 52,
"1": 31
}
} //mongo structure或者如果你想把时间再延长到几分钟:
{
"_id": "20121005_siteKey_device",
"hits": 512,
"minutes": {
"0": 52,
"1": 31
...
"3600":31
}
}除此之外,如果您有更小的数据集,您可以使用Redis。在此链接处设置一个峰值:
不管是个有趣的问题都要解决。祝好运!
发布于 2012-12-04 14:06:37
您可以存储按Hour, Device, ...分组的聚合。换句话说,按所有有趣的维度聚在一起。如果没有几个不同的组合(您说过有),这个聚合表将很小。然后,您可以查询聚合(当然,再次聚合),而不是扫描庞大的基表。
请注意,NoSQL数据库所做的事情并没有根本上的不同。你在这个任务上也会遇到同样的问题。您需要扫描整个表或存储聚合。这对于Server和NoSQL来说都是一样的。
https://stackoverflow.com/questions/13702732
复制相似问题