Articles of arangodb

ArangoDB – 用自定义函数在aql中sorting结果

我想根据用户input有sorting的结果。 比方说,我有sort对象,可能看起来像这样: var sort = {createdAt: -1} 或者像这样: var sort = {createdAt: 1, name: 1} 我有这样的查询: FOR f in [{createdAt: 123, name: 'BBB'},{createdAt: 2000, name: 'ZZZ'}, {createdAt: 2000, name: 'BBB'}] SORT f.createdAt DESC RETURN f 它工作正常。 但是我想按字段sorting结果由用户在sorting对象中传递。 我添加了自定义arangofunction: db.createFunction( 'CUSTOM::FILTERING::SORT_STRING', String(function (sort, it) { return sort && Object.keys(sort).length !== 0 && sort.constructor === Object ? […]

如何在arangodb中使用Sharding?

我对arangodb的分片特性很陌生,我学到了与此相关的各种文档,但仍然找不到configuration它的方式。 任何人请提供一步一步的程序来设置分割或对我有用的任何参考 。 我在linux mint上使用了node.js和angularJS的arangodb。 我经常访问https://docs.arangodb.com ,这些都没有用 https://docs.arangodb.com/2.5/Installing/Cluster.html以及如何在ArangoDB中设置集群和分片?

如何提高负载下的ArangoDB性能(多个并发查询)?

我们使用ArangoDB和PostgreSQL来存储几乎相同的数据。 PostgreSQL用于执行关系数据库可以很好地执行的一般types的查询。 selectArangoDB来执行graphics遍历等查询,find最短path等。 目前,我们有一个在PostgreSQL中有160000条logging的表,在ArangoDB中有一个与文档数量相同的集合。 我们正在使用的API将被多个用户同时使用,所以我首先要检查的是ArangoDB和PostgreSQL在负载下如何执行。 我创build了一个简单的负载testing,作为一个工作负载执行一个简单的select查询与filter既ArangoDB和PostgreSQL。 查询使用按date过滤字段select前N个logging/文档。 当我运行负载testing时,对PostgreSQL的所有查询都在0.5秒内执行,我将用户数量从10增加到100,并且完全不影响执行时间。 对于ArangoDB来说,同样的查询需要花费大约2秒钟的时间,然而,响应时间与并发用户的数量成正比。 有30个并发用户,等待60秒后,所有查询都会超时。 我试图debuggingarangojs连接器,发现这一点: var maxTasks = typeof agent.maxSockets === 'number' ? agent.maxSockets * 2 : Infinity; 和这个: Connection.agentDefaults = { maxSockets: 3, keepAlive: true, keepAliveMsecs: 1000 }; 这意味着默认的arangojs行为是同时向ArangoDB发送不超过6个并发查询,这导致所有其余查询在Node.js端排队。 我试图增加数量,但它没有帮助,现在看起来像所有的查询排队在ArandoDB一侧。 现在,如果我运行加载并尝试使用ArangoDB Web Interface执行一些查询,则查询将提交不可预测的时间量(取决于当前用户的数量),然后返回结果并显示它已被执行在大约4秒内这是不正确的。 对我来说,看起来像ArangoDB一次只能执行一个查询,而所有其他查询排队… 我错过了什么吗? 有没有什么设置来调整ArangoDB并提高它在负载下的性能? 更新: 我们使用ArangoDB 3.0,并将其作为Docker容器(来自官方图片)与1.5 GB的RAM一起运行。 样本文件(我们有大约16000个): { "type": "start", "from_date": "2016-07-28T10:22:16.000Z", "to_date": "9999-06-19T18:40:00.000Z", […]

NodeJS自定义会话存储,清除过期的会话

我目前正在为ArangoDB(connect-arango)开发一个会话存储。 它几乎与MongoDB会话存储(connect-mongo,因此'connect-arango')的工作方式相同,但是问题是,ArangoDB没有内置TTL的条目。 MongoDB有这个,这不是一个问题。 但在ArangoDB中,我必须在会话存储区中执行此操作。 每60秒(使用setTimeout)检查过期的会话是否足够,或者我应该使用其他的东西,比如每次调用“get”函数时检查? 我将使用AQL查询来清除它们,类似这样: FOR s IN sessions FILTER s.expires < DATE_NOW() REMOVE s IN sessions 如果用户要清除他的cookies,那么会话永远不会被使用“get”函数访问,这意味着我无法检查它是否已经到期。 但是我能做的是在每次调用“get”函数的时候运行上面的查询,但是我觉得这样做是不必要的,并且会增加服务器的负担。 编辑:只要没有人误解,我知道如何清除过期的会话,我只是不知道如何经常运行清除function(在这种情况下,这是上面的AQL查询)。

使用Node-GYP完成ArangoDB的哪些部分

我正在搞清楚ArangoDB的结构,以确定它是否可以成为我的长期解决scheme。 我的一个重要问题是,node–gyp(或Node-Addon)生成哪些部分,以及查询生成器如何将JavaScript生成的AQL查询转换为原生快速? 我知道自己也可以更深入地了解代码,但是如果一些核心开发人员能够回答这个问题(或者解释他们如何向JavaScript和AQL公开function),我认为这样做会快得多。 我觉得很多人都有责任去分析ArangoDB。 (我们的工作不是相信营销短语和基准…我们必须了解它是如何工作的)。 我的主要目标是将ArangoDB视为JavaScript开发人员。

如何从AQL查询中获取所有数据 – NodeJS&ArangoDB

我传递一个查询结果到这样的数组: var someArray = []; arangodb.query('somequery') .then( cursor => cursor.all()).then( keys => someArray = keys, err => console.error('Failed to execute query:', err) ).then(function () { // do stuff with someArray }); 这种方法很有效,但感觉不对。 我正在使用三次。 这段代码是否可以以更高效和更短的方式重写? 我GOOGLE了,但我找不到一个好例子。 提前致谢。

简单的查询与arangodb和nodejs

我想执行一个简单的查询在我的数据库arangodb与nodejs的login页面。 var arango = require('arangojs'); /*—*/ Database = arango.Database; db = new Database('http://127.0.0.1:8529'); db.useDatabase('MyDB'); db.useBasicAuth('root', 'root'); /*—*/ //Post Methods var username; var passworddb; //Login method app.post('/', function (request, response) { username = request.body.user.name; db.query('FOR u IN User FILTER u.firstname == "'+username+'" RETURN u.password').then( cursor => cursor.all() ).then( key => console.log('key:', key), //key => passworddb = […]

ArangoDB插入非常缓慢

我刚刚从版本1.4到2.1.1并注意到改进,但插入速度仍然非常慢,插入更多的文档会变慢。 我正在从旧数据库迁移到新的并一次插入1000。 这里有一些日志供你阅读: ========= [26.28s] BATCH #1 [0s] ========= [0s] CREATED: 1000 [0s] UPDATED: 0 [0s] SUBTOTAL: 1000 [0s] BATCH TIME: 26.279s [0s] TOTAL BATCH TIME: 26.279s [0s] AVG TIME PER BATCH: 26.279s [0s] TOTAL TIME: 29.277s [0s] ========= [29.919s] BATCH #2 [0.001s] ========= [0s] CREATED: 2000 [0s] UPDATED: 0 [0s] SUBTOTAL: 2000 [0s] BATCH […]

使用arangojs和sync的NodeJS:忽略.sync()后的所有内容?

我想使用NodeJS从MySQL数据库读取60klogging,并将它们写入到ArangoDB数据库。 我会稍后使用ArangoDB的聚合function来处理我的数据集。 来自PHP,脚本通常运行同步,因为我相信这是有道理的,我最初(天真)的尝试是让我的NodeJS脚本也运行同步。 但是,它不能按预期工作: 我打印到控制台,通过.sync()调用函数连接到ArangoDB服务器,并打印所有现有的数据库,然后打印到控制台再次。 但是,对我的ArangoDB函数的同步调用之下的所有内容都被完全忽略(不会再打印到控制台,也不会在这里执行任何其他操作)。 我忽略了什么? 在.sync()调用的函数中, .done()是否会造成麻烦? var mysql = require('node-mysql'); var arango = require('arangojs'); //var sync = require('node-sync'); // Wrong one! var sync = require('sync'); function test_arango_query() { var db = arango.Connection("http://localhost:8529"); db.database.list().done(function(res) { console.log("Databases: %j", res); }); return "something?"; } sync(function() { console.log("sync?"); var result = test_arango_query.sync(); console.log("done."); // DOES NOT […]

ArangoDB FOXX节点扩展

我试图将一个应用程序从sails移到FOXX。 我期待着我可以在FOXX中使用node.js模块,但是我遇到了一个问题。 我需要在服务器上创build一个“工作”目录,以对SCM存储库执行操作。 我安装了“删除”和“mkdirp”模块。 mkdirp模块调用在FOXX下报告缺less的fs.lstatSync。 安装fs的本地节点副本不能解决问题。 如果这是一个问题,那么我的一些其他任务,如产卵外部命令行程序可能是不可能的。 在这种情况下,我可能需要重新考虑将所有任务移至FOXX,但这意味着需要在帆和FOXX中复制大量的function,这可能是部署的噩梦。