Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ArangoDB:通过示例作为查询函数插入

ArangoDB:通过示例作为查询函数插入
EN

Stack Overflow用户
提问于 2016-10-18 15:47:58
回答 1查看 332关注 0票数 6

图的一部分是使用两个大型集合之间的一个巨大连接来构造的,每次向两个集合中添加文档时都会运行它。查询基于older post

代码语言:javascript
运行
AI代码解释
复制
FOR fromItem IN fromCollection
    FOR toItem IN toCollection
        FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
        INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection

这需要大约55,000秒来完成我的数据集。我绝对欢迎大家提出更快的建议。

但我有两个相关的问题:

  1. 我需要一个插销。通常情况下,upsert会很好,但在这种情况下,由于我无法知道前面的密钥,这对我没有帮助。要获得前面的键,我需要通过示例查询,以找到其他相同的、现有边缘的键。这似乎是合理的,只要它不损害我的性能,但我不知道如何在AQL中有条件地构造我的查询,以便如果等效边还不存在,它就插入边,但如果存在等效边,则不执行任何操作。我该怎么做?
  2. 每次数据被添加到这两个集合中时,我都需要运行它。我需要一种只在最新数据上运行这个程序的方法,这样它就不会试图加入整个集合。如何编写允许我只加入新插入的记录的AQL?它们是用Arangoimp添加的,我无法保证它们的更新顺序,所以我不能在创建节点的同时创建边缘。我如何才能加入新的数据?我不想每次添加记录时花费55k秒。
EN

回答 1

Stack Overflow用户

发布于 2016-10-20 00:47:32

如果您在没有任何索引的情况下运行所编写的查询,那么它必须执行两个嵌套的完整集合扫描,通过查看

db._explain(<your query here>);

它显示了如下情况:

代码语言:javascript
运行
AI代码解释
复制
  1   SingletonNode                1   * ROOT
  2   EnumerateCollectionNode      3     - FOR fromItem IN fromCollection   /* full collection scan */
  3   EnumerateCollectionNode      9       - FOR toItem IN toCollection   /* full collection scan */
  4   CalculationNode              9         - LET #3 = (fromItem.`fromAttributeValue` == toItem.`toAttributeValue`)   /* simple expression */   /* collections used: fromItem : fromCollection, toItem : toCollection */
  5   FilterNode                   9         - FILTER #3
  ...

如果你这样做了

代码语言:javascript
运行
AI代码解释
复制
db.toCollection.ensureIndex({"type":"hash", fields ["toAttributeValue"], unique:false})`

然后,在fromCollection中将有一个完整的表集合扫描,对于找到的每一个项,在toCollection中都有一个哈希查找,这将更快。每件事都会分批发生,所以情况应该已经有所改善了。db._explain()将显示如下:

代码语言:javascript
运行
AI代码解释
复制
  1   SingletonNode                1   * ROOT
  2   EnumerateCollectionNode      3     - FOR fromItem IN fromCollection   /* full collection scan */
  8   IndexNode                    3       - FOR toItem IN toCollection   /* hash index scan */

仅处理fromCollection中最近插入的项相对容易:只需将导入时间的时间戳添加到所有顶点,然后使用:

代码语言:javascript
运行
AI代码解释
复制
FOR fromItem IN fromCollection
    FILTER fromItem.timeStamp > @lastRun
    FOR toItem IN toCollection
        FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
        INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection

当然,在timeStamp属性的fromCollection中放置一个跳过的索引。

这应该能很好地发现fromCollection中的新顶点。它将“忽略”toCollection中链接到fromCollection中旧顶点的新顶点。

您可以通过在查询中互换fromCollectiontoCollection的角色(不要忘记fromCollection中的fromAttributeValue索引)来发现这些问题,并记住只有在from顶点陈旧时才放边,如in:

代码语言:javascript
运行
AI代码解释
复制
FOR toItem IN toCollection
    FILTER toItem.timeStamp > @lastRun
    FOR fromItem IN fromCollection
        FILTER fromItem.fromAttributeValue == toItem.toAttributeValue
        FILTER fromItem.timeStamp <= @lastRun 
        INSERT { _from: fromItem._id, _to: toItem._id, otherAttributes: {}} INTO edgeCollection

这两个人一起应该做你想做的事。请找到充分工作的例子here

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40119839

复制
相关文章
Confluence 6 内容在空间中是如何组织的
你可以将空间考虑为一个容器,在这个容器中保持了有关你项目中所有重要的东西,包括小组,项目或者项目相关的工作。这些东西有很高的自主性,这表示的是每个空间都有自己的的页面,文件,评论以及 RSS 新闻源。
HoneyMoose
2019/01/30
5540
Confluence 6 内容在空间中是如何组织的
实施ERP的最佳方法是什么
也许您已决定加入潮流,并在公司中实施企业资源计划或ERP,或者您要从当前的ERP系统进行升级。令人恐惧的部分可能是进行更改。您应该放弃所有内容并立即启动ERP还是可以分阶段实施?
深圳ERP
2019/12/13
9350
实施ERP的最佳方法是什么
去掉 WordPress 分类目录 URL 中的 category 最佳方法
WordPress 默认的分类目录 URL 中是带 category 的,比如我爱水煮鱼的 WordPress 的分类目录的 URL https://blog.wpjam.com/category/wordpress/ 就带了 category。
Denis
2023/04/13
7220
去掉 WordPress 分类目录 URL 中的 category 最佳方法
class文件中的方法表集合--method方法在class文件中是怎样组织的
        了解JVM虚拟机原理是每一个Java程序员修炼的必经之路。但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的。
亦山
2019/05/25
1.7K0
Code Embed:在WordPress文章和页面中添加Javascript的最佳插件
自从又开始迷上了WordPress,每天都会花不少时间在WordPress相关的网站上闲逛,这感觉竟然有点像分手复合又陷入了热恋的情人,没事就腻歪在一起,要把之前错过的时间都补回来。。。
丘壑
2019/04/19
4.7K0
Code Embed:在WordPress文章和页面中添加Javascript的最佳插件
确保云安全的最佳方法是什么?
随着云计算成为企业开展业务的一种基础技术,云安全已变得至关重要。然而,充分了解云安全的最佳策略是一个真正的挑战。
静一
2020/03/25
7140
确保云安全的最佳方法是什么?
在Windows 10计算机上安装Python的最佳方法是什么?
Python 是一种流行的通用编程语言,广泛用于各种目的,包括 Web 开发、数据分析、人工智能等。因此,对于开发人员和程序员来说,了解如何在Windows 10计算机上安装Python有深入的了解非常重要。在本文中,我们将讨论在Windows 10计算机上安装Python的最佳方法,包括每种方法的分步指南。
很酷的站长
2023/02/18
2.4K0
在Windows 10计算机上安装Python的最佳方法是什么?
WordPress主题中加载jQuery的最佳方法
一般来说,在html页面底部 (也就是</body>之前)引入JavaScript,如jQuery 和 jQuery插件是个不错的做法。原因很简单,HTTP / 1.1规范表明浏览器不能并行下载两个以上的组件。
丘壑
2019/03/13
2.6K0
xwiki功能-内容组织
可以通过把页面嵌在其他页面(即文档)来组织内容。每个页面通常保存关于某个特定主题的内容。
lovelife110
2021/01/14
9690
xwiki功能-内容组织
勒索组织正在攻击整个城市
近日,LockBit 3.0网络犯罪团伙声称对加拿大韦斯特蒙市政服务平台瘫痪和关闭员工电子邮件账户的勒索软件攻击事件负责,并要求该市在12月4日前支付赎金。 根据韦斯特蒙市报道,该市的电子邮件服务因不明原因的计算机故障而无法使用,并且该故障也影响了其他市政服务。后经证实该次故障源于一次有针对性的网络攻击。 韦斯特蒙市长Christina Smith在一份声明中说:"网络攻击在我们的社会中变得越来越普遍和复杂,尽管我们采取了所有的措施,公共管理部门也不能完全避免这种恶意的攻击”。"我向所有韦斯特蒙市民保证,
FB客服
2023/03/29
1980
勒索组织正在攻击整个城市
城市消费券之地理位置攻防
近期,顶象发布了《城市消费券安全调研报告》(以下简称《调研报告》)。《调研报告》从城市消费券的发放规模、核销情况、风险出发,进一步分析除了黑灰产的作弊手段以及作弊工具。
顶象技术
2022/12/15
4410
城市消费券之地理位置攻防
数据中的城市,城市中的数据
点击标题下「大数据文摘」可快捷关注 [今日3篇文章] 1.数据中的城市,城市中的数据 2.解密:“女博士”如何领导美帝神秘机构DARPA 3.2014年可穿戴设备之非官方报告 作者:凯尔·格雷科(Kael Greco) 译者:ilovesnoopy(北京大学光华学院硕士) 校对:EcnMcheDsgn (UCLA本科,MIT机械工程学博士) 独眼一点五 (华东师范大学中文系硕士) 摘自:译言 2007年年初,一群Google Earth的用户在圣地亚哥发现了一件奇怪的事情。在使用最新发布的卫星影像进行俯瞰时
大数据文摘
2018/05/22
1.3K0
WordPress 教程:在 WordPress 中如何使用 Dashicons
Dashicons 是 WordPress 官方出的用于后台的图标字体,可以用于 WordPress 的各个地方,也可以用在 WordPreess 前台,但是你事先要加载相关的 CSS。
Denis
2023/04/13
9180
WordPress 教程:在 WordPress 中如何使用 Dashicons
智慧城市的定义是什么?
为了成功地改善数十亿人的生活条件,城市需要采用新的理念、新的方法和新的技术来管理和交付它们。这就是智慧城市的定义。
用户2605137
2022/04/12
6990
WordPress 网站正文顶端或者末尾插入固定内容的方法
WordPress 网站正文顶端或者末尾插入固定内容的方法。有时候需要WordPress每篇文章正文顶端或者末尾插入固定的内容,比如加个广告、版权声明之类的,你可以直接打开正文模板添加,不过还是利用WordPress函数模板functions.php添加代码比较方便。
主机教程网2bcd.com
2022/10/19
4320
将文本文件的内容存储在DataSet中的方法总结
本文介绍了一种将文本文件的内容存储在DataSet中的方法,包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。该方法包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。
彭泽0902
2018/01/04
3.5K0
如何才能够更好地理解运营中的内容概念呢?
1、互联网上随处可见的文字、图片、视频甚至音频都可以称为内容,但更深一步说,其实所有用户感觉到的事物都叫内容。也就是说,内容是指用户可感知到的一切事物,不仅包括用户所看到的普通内容,也包括UI、ICO(图标)、缓冲界面等内容。 很多人可能并不明白内容是什么,简单地说,一款产品100%都是由内容构成的。不论产品是电商类的还是社交类的,都完全由文字、UI、图片等组成 。
大葡萄
2019/03/15
3030
WordPress 教程:在 WordPress 中如何设置定时作业
我们知道 Linux 服务器有个 Cron 的功能,可以用来设置定时执行的作业,但是并不是每个人都熟悉 Linux 系统,并且也不是所有的主机管理面板都有 Cron 栏目。
Denis
2023/04/13
2.4K0
WordPress 教程:在 WordPress 中如何设置定时作业
在MySQL中处理组织层次(中文路径)
假设有这样的组织层次,“某某局”,“某某局>某某部”,“某某局>某某部>某某下属组织”, “某某局”是一级组织所以他的组织层次就是他自己的组织名字,而类似“某某部”这样的二级组织,他们的组织层次就是“某某局>某某部”,中间用“>”(大于号)分隔,从一级组织一直到他自己的组织名字连接起来。
用户3579639
2018/10/19
1.2K0
Canonical 标签以及在 WordPress 中的应用
Canonical 标签,中文叫做 URL 范式,是 Google,雅虎,微软等搜索引擎在2009年一起推出的一个标签(百度在2013年也终于支持),它主要用来解决由于 URL 形式不同而造成的重复内容的问题。
Denis
2023/04/15
9950

相似问题

使用FormData和AngularJS MVC上传多个文件

10

AngularJS用FormData API上传多个文件

16

使用formData()上传多个文件

1430

没有FormData的AngularJs文件上传

12

如何使用FormData上传AngularJS对象

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文