在大型AQL查询上耗尽RAM |试图将一个集合分成两个

时间:2017-11-25 00:28:03

标签: arangodb

在努力解决我的问题here时,我正在使用ArangoDb的AQL语言将一个集合拆分为两个。由于创建图表只能在“规范化”集合上完成。但我的查询占用了我所有的RAM(16gb)。

FOR comment IN collection_name
    COLLECT author = comment.author
    , subreddit = comment.subreddit
    WITH COUNT INTO counter
    RETURN {author, counter, subreddit}

有没有办法可以将结果直接转储到磁盘而不将其拉入RAM?或者我可以直接拆分它而不使用查询?

1 个答案:

答案 0 :(得分:2)

问题在于,COLLECT语句在内存中有效。由于你的收藏有4000万份文件,你想要与他们一起工作,他们提供了72.424.492个uniq项目来收集这个没有成功的。

要创建您希望创建的子集集合,

可以使用OPTIONS { ignoreErrors: true }创建此子集。

由于您的author字段可能包含_key字段中不允许的字符串(我们需要识别并跳过ignoreErrors选项的重复字符串),您可以使用{ {3}}为每位作​​者创建_key uniq。为每个uniq作者创建一个作者条目的结果查询可能如下所示:

db._query(`
  FOR item IN RawSubReddits
    INSERT {
      _key: MD5(item.author),
      author: item.author
      } INTO authors
        OPTIONS { ignoreErrors: true }`);

一旦有了这些,您可以更新边集合中的计数:

 db._query(`
   FOR onesubred IN RawSubReddits
     INSERT {
       _from: CONCAT('authors/', MD5(onesubred.author)),
       _to: CONCAT('RawSubReddits/', onesubred._key)
     } INTO  authorsToSubreddits")
github上的

MD5()可以提供更多信息。

相关问题