以下是我们正在解决的现实问题。我们有一些相当大的数据集需要实时汇总和汇总,并应用了大量的过滤器和公式。当数据集小于50,000条记录时,它可以实时地将这些应用于每条记录,但是当我们接近100,000,然后是100多万时,对所有记录进行实时数学计算的开销变得太大了。我们花了很多时间在SQL中进行优化,然后假设在ram中抛出整个数据集,我们仍然得出结论,我们需要从数据中“缩小”并总结组。我们需要一种方法将记录组合在一起,然后将数学应用于一组“类似记录”。这些记录的结合使我们能够非常快速地进行实时报告。我们当前的解决方案组记录集完全相同。
这是一个示例记录
ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,
因此,如果我们有两个具有完全相同的数据
ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,
ID77969 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,3,14,79,
这是我们需要做的。 (简单示例,单列)
假设我们有以下数字20个数字
106
0
8
0
1
0
4
0
3474
0
204个
0
75个
0
128个
0
617个
0
20个
0
在上面的集合中,我们有很多0,所以这些很容易组合在一起。但我如何形成让我们再说3组。我认为在外部界限上我们有3474但是如果加权低于该数字,则出站组可能类似于2000,然后将值3474和617组合成一个组。我们的团队会议认为这是一个引力问题或更为人所知的cheerio吸引力。理想情况下,我们会找到一个方程式或方法,让我们看一下整个记录集,然后在X个组中表达。这将允许我们改变数据的分组/聚集。因此,假设我们使用上面的示例20个数字,并希望在15个组中表达这个,而我们能够做到这一点的8个组。现在请记住,在上面的例子中,这只是一个列,但我试图将整个记录分组,如
ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,
ID77969 1,43:19.4,43:19.7,TRUE,1.2,3.2,0,3,2,1,1,1,0,0,0,3,0,0,0,0,14,14 ,179,
感谢您的帮助
我们当前对每条记录进行哈希处理,然后如果记录具有相同的哈希值,我们将其分组。这里哈希的问题是,如果它完全相同,那么它就不会被分组。这对我们来说已经有一段时间了,因为我们在每一栏中的价值观都是相对有限的。我们现在已经介绍了一些具有更大范围的值,这些值使得我们的哈希分组无效。在我们能够获取100mm记录并将它们散列到超过100k组之前,我们现在看到的集合中的neew数据只有70k,所有70k都是唯一的。这里有详细标识的数据:Copy of rv.zip (3,58 MB)
答案 0 :(得分:1)
我同意我们需要更多信息才能为您提供最佳建议。
如果您需要对大量传入数据进行实时分析,您可能需要查看流式传输算法。许多流式算法实际上并不试图存储所有传入的数据,而是使用每个新的数据点来更新您关心的实时模型。这种算法在网络流量分析等情况下非常有用,其中高级别趋势比每个单独的数据包更重要。
一个例子是在线k-means,它实际上不存储每个新数据点,然后在整个数据集上运行k-means,而是使用新数据点更新当前的均值集,然后丢弃它。
另一件需要考虑的事情是相关记录的某种类型的有损压缩,如矢量量化(VQ)(有许多不同风格的VQ,有监督(LVQ)和无监督)。这将允许您用代表该组的原型记录替换“类似”记录。
答案 1 :(得分:0)
我们需要更多地了解您应用于数据的算法,因为可以通过不断地对新数据求和来计算某些东西(这可能只是Eric D.评论的重写)
否则,请考虑在最近n天或几个月的记录中运行算法,然后在一段时间内绘制结果图表。
答案 2 :(得分:0)
每行基本上是n空间中的向量,“相似”行是 距离低于给定阈值的矢量。我解决的一种方法 过去类似的东西,但规模要小得多,已经到了 使用递归哈希算法。
您首先使用表示整个矢量范围的哈希表。您可以一次向表中添加一个向量,一旦达到每个表的给定限制L个向量,该表将自身划分为跨越向量范围的P个不相交子集。添加到顶级表的新向量将路由到正确的子表,算法将进行递归。在指定范围内,哈希表将停止分割并将其所有子向量分组为单个向量。
当您处理完整个数据库时,最终结果是一个哈希表树,其数据集的密集区域的深度增加。您可以根据密集区域的数量来决定需要哪些组,为自己的组提供异常值并将密集组放入同一组中。
我不确定你处理的行数有多可行,但似乎任何解决方案都需要大量的计算。