【问题标题】:MongoDB multiple scalable collectionsMongoDB 多个可扩展集合
【发布时间】:2015-04-08 22:13:45
【问题描述】:

我正在使用 morphia 连接到 mongoDB。我正在收集汽车的每日里程。目前,所有汽车的所有每日里程都存储在具有以下属性的 1 个集合中: 车牌号、日期、里程

我们想要存储从 1990 年开始的每日里程数。目前,我们已经在维护大约 4500 多辆汽车(每年大约有 130 万辆的记录)。我们正在尝试使用一年的数据,而性能已经非常糟糕。我正在考虑根据车牌号将存储拆分为多个集合。所以每个车牌号都会有自己的以车牌号命名的集合。我需要一些想法。有没有其他方法可以解决这个问题?

添加细节: 我们将如何使用数据:我们想要查询任意给定日期范围内多辆汽车的里程数(有时是每个部门、或每个地理区域、每个品牌/型号等)。 因此,假设我们要监控郊区的里程,我们将获取 2014 年 1 月 1 日至 2014 年 6 月 23 日期间在该郊区运营的所有车牌号的里程,并对数据进行计算。

谢谢。

【问题讨论】:

  • 您可能希望对旧数据使用批量插入,这比顺序插入要快得多。
  • 好的,但是您希望多久运行一次这些查询?我的意思是个别车主是否能够运行它们或在任何给定时间运行它们,或者你会在一夜之间完成它以提供一周左右的一些统计数据。此外,130 万条记录似乎并不算多,所以我很惊讶你的表现很糟糕。您对集合有哪些索引?
  • 索引在车牌号和日期(复合索引)上。插入不会有问题,因为它每年只在年底进行一次。检索将非常密集。出于监控目的,将经常进行查询。那只是一年。 10 年后,将达到 1300 万以上,以此类推。
  • 你能测试一下仅使用车牌号+日期与包含其他参数相比有多快吗?如何构造查询也很重要,因为这决定了是否使用您的索引。也许以另一种方式扩展复合索引/定义查询就足够了。
  • 也许您可以向我们展示getIndexes() 的结果以及一两个示例查询以及集合中的一些示例documents

标签: mongodb morphia


【解决方案1】:

根据您的配置,您可以尝试Sharding 或者您可以尝试Partition 您的数据库——尽管这种方法是hybrid,这意味着您将模拟从 sql 数据库系统(Oracle、Sql Server等)。

还请注意,如果您将insert(基本上附加)大量条目到单个文件,它将逐渐变慢,因为 mongo 需要更新需要唯一的primary keymongoID)+ 如果您在collection 上定义了其他索引,这些索引也需要更新。

如果您可以提供更多信息,说明您打算如何使用收集的数据以及在什么时间间隔内进行这些操作是在线还是离线,我会更新我的答案。

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2019-11-11
    • 2014-10-01
    • 2018-02-22
    • 2015-06-02
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多