【问题标题】:Efficient retrieval of large data sets in Mongo mapper?Mongo mapper中大数据集的高效检索?
【发布时间】:2011-06-17 02:42:28
【问题描述】:

我正在存储大量 Twitter 数据,并且希望一次检索大约 50 万条记录以进行数据处理。我有一个包含基本推文数据的 TwitterTweet mongo 文档,并尝试按如下方式检索它:

weekly_tweets = TwitterTweet.all(:created_at.gt => 1.week.ago, :fields => [:created_at, :text, :from_user])

问题是,这会占用大量时间和内存 - 有什么方法可以使其更具可扩展性和效率。我曾想过使用 map reduce,但对于我想做的事情来说,它看起来非常复杂 - 推文上的文本处理和正则表达式。

【问题讨论】:

  • 为什么不做更多、更小的电话?使用跳过和限制,一次取 1000 个。

标签: regex mongodb mongomapper large-data-volumes


【解决方案1】:

不要调用 all,因为这会在 mongo 中创建所有 500k 条目的对象,并且会像您注意到的那样使用大量内存和时间。改用 find_each 并迭代。 Find 返回一个更高效的游标。

【讨论】:

  • 我似乎找不到描述此操作的文档。您能帮我将问题中的 .all() 代码转换为 .find() 迭代吗?
  • 在原始的 mongo 驱动程序中你可以只做 find,但是使用 mongomapper 似乎你必须做一个 where 查询加上 find_each。或者您可以执行 skip(x),然后对 10000 个批次进行限制等。总的来说,我不喜欢 mongomapper,因为它不一致且不适合大数据。检查该文档,即使他们不知道他们的代码做了什么,因为在它已经发布了一段时间后会记录它。你可以做所有的跳过和限制或在哪里找到每个。或者您可以只使用 10gen mongo lib 并调用 find ,效果会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多