Arangodb 在大型AQL查询中内存不足|尝试将集合拆分为两个

Arangodb 在大型AQL查询中内存不足|尝试将集合拆分为两个,arangodb,Arangodb,为了解决我的问题,我使用ArangoDb的AQL语言将一个集合一分为二。因为创建图形只能在“规范化”集合上完成。但是我的查询占用了我所有的RAM(16gb) 有没有一种方法可以直接将结果转储到磁盘,而无需将其拉入RAM?或者我可以不使用查询直接拆分它?这里的问题是,COLLECT语句在内存中工作。由于您的收藏有4000万份文档,您希望使用所有这些文档,而他们提供72.424.492个uniq项目来收集这些文档,所以这是行不通的 要创建希望创建的子集集合 可以使用创建此子集 由于您的作者-字段可能

为了解决我的问题,我使用ArangoDb的AQL语言将一个集合一分为二。因为创建图形只能在“规范化”集合上完成。但是我的查询占用了我所有的RAM(16gb)


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

这里的问题是,
COLLECT
语句在内存中工作。由于您的收藏有4000万份文档,您希望使用所有这些文档,而他们提供72.424.492个uniq项目来收集这些文档,所以这是行不通的

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

可以使用创建此子集

由于您的
作者
-字段可能包含
\u键
字段中不允许的字符串(我们需要使用
ignoreErrors
-选项来识别和跳过重复项),因此您可以使用该字段为每个作者创建一个
\u键
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上可以提供更多信息。

这可能是一个与此相关的错误:在运行查询之前,您有多少数据?
 db._query(`
   FOR onesubred IN RawSubReddits
     INSERT {
       _from: CONCAT('authors/', MD5(onesubred.author)),
       _to: CONCAT('RawSubReddits/', onesubred._key)
     } INTO  authorsToSubreddits")