我收藏了一亿份几何文献。
我有第二个集合,其中包含与每个其他几何图形相关联的时间数据。这将是365 * 96 *1亿或3.5万亿个文档。
与其存储超过所需的1亿个条目(365*96)倍,我希望将它们保存在单独的集合中,并在MongoDB中执行某种类型的连接/DBRef/。
首先,也是最重要的,我希望使用geoIntersection从几何集合中获取GUID列表。这将把它过滤到1亿到5000。然后,使用这5000个几何guids,我想根据我指定的5000个目标和额外的日期标准来过滤3.5万亿个文档,并聚合数据并求出平均值。对于您指定的日期条件,剩下的是5000个几何图形和5000个平均值。
这基本上是一个连接,因为我知道它在SQL中,这在MongoDB中是可能的吗?它可以在不到10秒的时间内以最佳方式完成吗?
澄清:据我所知,这就是DBrefs的用途,但我读到它根本没有效率,而且对于处理如此多的数据,它并不是很合适。
发布于 2015-06-21 11:09:06
如果您要一起处理几何图形及其时间序列数据,则将它们存储在同一文档中是有意义的。以15分钟为增量的一年的数据并不是致命的-而且您肯定不希望每个时间序列条目都有一个文档!由于您可以将想要操作的所有内容作为一个几何文档进行检索,因此这是一个巨大的胜利。请注意,这还可以让您对缺少的数据进行稀疏。如果数据是稀疏的,那么您可以对数据进行不同的编码,而不是索引到35040槽阵列中。
然而,在一大堆几何数据上的$geoIntersects将是一个性能问题。确保你有一些索引(比如2dsphere)来加快速度。
如果有任何方法可以在查询中构建额外的限定符,从而以较低的成本从更昂贵的搜索中消除成员,那么您可以让事情变得更灵活。比方说搜索会在美国各州展开。您可以首先将搜索与州边界相交,以查找包含地理数据的州,然后使用类似邮政编码的内容来限定文档。这将是对50个文档的快速预搜索。如果一个搜索边界首先被确定为达到两个州,并且地理数据记录包括一个州字段,那么在查询的更昂贵的地理部分之前,您只需要筛选出9600万条记录(所有条件都是相同的)。如果您与较小的网格坐标相交,则可以在考虑地理数据之前对其进行进一步筛选。
当然,走得太远会增加开销。如果您能够正确地将系统调整到1亿个几何图形的密度,您可能能够将时间降低到相当低的水平。但是,如果不实际处理问题的具体细节,就很难知道。如此多的数据可能需要一些特定的实验,而不是依赖于一般的解决方案。
https://stackoverflow.com/questions/30811785
复制相似问题