Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB和DBRef与空间数据的结合使用_Mongodb_Join_Dbref - Fatal编程技术网

MongoDB和DBRef与空间数据的结合使用

MongoDB和DBRef与空间数据的结合使用,mongodb,join,dbref,Mongodb,Join,Dbref,我收集了1亿份几何文档 我有第二个集合,其中包含与其他每个几何体关联的时间数据。这将是365*96*1亿或3.5万亿个文档 我希望将它们保存在单独的集合中,并在MongoDB中执行一种JOIN/DBRef/我能做的任何操作,而不是将1亿个条目(365*96)存储到所需的数量上 首先也是最重要的一点,我想通过使用GeoCrossion从geometry集合中获取GUI列表。这将把它过滤到1亿到5000万。然后,使用这5000个几何图形guid,我想根据5000个goemetries和我指定的其他日

我收集了1亿份几何文档

我有第二个集合,其中包含与其他每个几何体关联的时间数据。这将是365*96*1亿或3.5万亿个文档

我希望将它们保存在单独的集合中,并在MongoDB中执行一种JOIN/DBRef/我能做的任何操作,而不是将1亿个条目(365*96)存储到所需的数量上

首先也是最重要的一点,我想通过使用GeoCrossion从geometry集合中获取GUI列表。这将把它过滤到1亿到5000万。然后,使用这5000个几何图形guid,我想根据5000个goemetries和我指定的其他日期标准过滤3.5万亿个文档,并汇总数据,找到平均值。对于指定的日期标准,您将得到5000个几何图形和5000个平均值

这基本上是一个连接,正如我在SQL中所知道的,在MongoDB中这是可能的,并且可以在不到10秒的时间内以最佳方式完成


澄清:据我所知,这就是DBrefs的用途,但据我所知,它根本没有效率,而且处理这么多的数据也不是很合适。

如果要同时处理几何体及其时间序列数据,将它们存储在同一个文档中是有意义的。以15分钟为增量存储一年的数据并不是致命的——而且你肯定不希望每个时间序列条目都有一个文档!由于您可以将想要操作的所有内容作为单个几何体文档检索,这是一个巨大的成功。请注意,这还可以让您稀疏缺少的数据。如果数据是稀疏的,而不是索引到35040插槽阵列中,则可以对其进行不同的编码

但是,一大堆几何数据上的$geoIntersects将是一个性能问题。确保你有一些索引(比如2dsphere)来加快速度

如果有任何方法可以在查询中构建额外的限定符,从而可以廉价地从更昂贵的搜索中删除成员,那么您可能会让事情变得更简洁。比如说,搜索将袭击美国各州。您可以首先将搜索与州边界相交,以查找包含地理数据的州,并使用类似邮政编码的内容来限定文档。这将是对50个文档的快速预搜索。如果一个搜索边界首先被确定为命中两个州,并且地理数据记录包含一个州字段,那么在查询的更昂贵的地理部分之前,您只需筛选掉9600万条记录(所有条件都相同)。如果与较小的栅格坐标相交,则可以在考虑地理数据之前将其进一步筛选


当然,走得太远会增加开销。如果你能正确地将系统调整到1亿个几何体的密度,你就可以把时间降到很低的水平。但如果不实际处理问题的细节,就很难知道。这么多的数据可能需要一些特定的实验,而不是依赖于一个通用的解决方案。

DBRefs基本上是不受欢迎的-在应用程序中进行连接是一个坏主意,这正是您在这里所做的。这些几何体有多大?每个几何体大约100字节,因此以非规范化方式复制它们是不可行的。几何体集合总共运行10GB,因此如果没有连接,则需要350400GB的额外空间。