【发布时间】:2015-08-21 17:22:12
【问题描述】:
目前我正在使用 SQL Server,但在扩展不相关的 1 亿条记录时遇到问题,每天执行大约 100 万次写入,32 GB 的内存已用完,CPU 大部分时间都在 80%-90%。这让我厌倦了使用 SQL Server,但如果可能的话,我想继续使用它。 我一直在研究 mongoDB。
我有一个新项目,它需要存储大约 1 亿条空间记录,全部为折线,并具有与几何相关的 15 个左右的属性。我知道 SQL Server 和 mongoDB 都支持空间索引,与 R-tree 索引相比,mongoDB 使用劣质(如我所读)Geohash。
我认为它们在 GIS 数据的性能方面取得了平衡,因为我觉得即使 mongoDB 的空间索引较差,但与 SQL Server 相比,它的读取速度的剪切性能将弥补这一点。
我遇到的真正问题是对于每条折线,都会有时间数据与每条折线相关联。这个数字从 20 到 2000 不等,具体取决于它可以扩展的程度。现在是 20 亿,并且有可能增长到 2000 亿。
折线数据不会超过1亿条,每条记录大约1KB(100GB)。如果我们将所有的数据都存储为非规范化的,并且不关心复制 GIS 数据以避免进行 JOIN,那就是 2-200 TB,我基本上无法管理。
因此,我认为需要进行一些非规范化,一个表/集合中的 GIS 数据和另一个表/集合中的关联时间数据。
很快,一个地图请求将进入并请求一个图块,该图块应查询该边界框的所有 GIS 信息(想想空间交叉点),并使用此结果,需要查询时间范围内的 timedata AVERAGE选定的多段线。数据集在到达地图渲染器时必须在一起(JOINED)。在平移地图时,所有这些都会每秒发生 12-20 次,因为地图会根据时间数据为折线着色。
我的问题是,考虑到 mongoDB 空间索引性能,使用 geoIntersects 时从 1 亿条记录到 250,000 条记录是否会成为问题?
然后,一旦找到 250,000 条折线,我将需要查询与某个 WHERE 子句的 250,000 条折线相关的时间的时间数据,很可能是一个时间范围。考虑到该表将包含超过 20 亿条记录,mongoDB 能否做到这一点,并且可以在亚秒内完成?
现在,我可以在 SQL Server 2012 中使用空间索引在大约 4 秒内从 200 万条折线增加到 200,000 条折线。这是可以接受的,但它根本没有考虑到时间数据,而且它的数据比实际数据少 50 倍。
我觉得使用 mongoDB 进行 JOIN 操作会破坏 mongoDB 的目的,并且不会产生比 SQL Server 更好的性能。
完成这项任务的数据库建议是什么?
要点:
支持空间索引,以便正确查询 GIS 数据。
数据只会每年写入一次,基本上是 100% 读取。
大多数关于 timedata 的查询都需要一个时间范围内的 AVERAGE
低负载,任何时候只有 2-10 个用户连接
服务器/服务器的预算约为每月 1000 美元。
编辑:
时间数据包含每 15 分钟在该路段报告的 mph。用户搜索将是“我想查看过去 3 个月内周五这条路的平均速度”
然后,地图引擎会根据平均速度根据图例对其进行渲染。地图引擎需要知道每条道路/多段线的颜色,因此如果在地图上查看 X 条道路,它需要 X 值以及 X 多段线。
【问题讨论】:
-
您的问题有很多属性,例如“100% 读取”和聚合,这表明数据仓库/星型模式可能比引擎选择提供更多好处。如果没有关于您的数据的一些基础知识,特别是时间数据,它的基数与多边形数据,很难提出任何远程具体的建议。你能提供一些时间数据的例子吗?给定多边形是否有多个时间记录,或者每个时间条目都有唯一的多边形?
-
数据仓库设计在这里通常有意义的原因(除其他外)是您最小化事实表行的大小,从而最大化 I/O 吞吐量和可以缓存在内存中的行数。分段时间维度可能有意义且有很大帮助,但这取决于您在聚合期间如何对数据进行分组以及关系的具体情况。
-
更新了时间数据细节
-
值得注意的是,我查看了 amazon redshift ,因为它基于 postgres。但是它不支持postGIS插件,所以它没有任何空间索引能力。
-
我同意@AaronLS 关于维度模式的观点。如果不出意外,它绝对值得一试 - 您已经在使用 SQL Server,假设它可能 让您失败并跳槽到未知的地方是没有意义的。此外,SO 规则禁止询问软件/工具建议的问题,因此您最好编辑此问题以专注于“我可以/我如何在 SQL Server 中执行此操作”以避免它被标记和关闭。如果您发现 SQL Server 无法做到这一点,您总是可以单独提出一个问题,询问 MongoDB 是否适合您的要求。
标签: sql-server mongodb database-design data-warehouse database-performance