我正在构建一个基于d3强制导向图的应用程序,后端使用ArangoDB,我希望能够尽可能高效地从Arango动态加载节点和链接数据.
我不是d3的专家,但总的来说,强制布局似乎希望将其数据作为节点数组和一组链接,这些链接将实际节点对象作为其源和目标,如下所示:
var nodes = [
{id: 0, reflexive: false},
{id: 1, reflexive: true },
{id: 2, reflexive: false}
],
links = [
{source: nodes[0], target: nodes[1], left: false, right: true },
{source: nodes[1], target: nodes[2], left: false, right: true }
];
Run Code Online (Sandbox Code Playgroud)
目前我正在使用以下AQL查询来获取相邻节点,但这非常麻烦.部分困难在于我希望包括节点的边缘信息,即使没有遍历这些边缘(为了显示节点在从数据库加载这些链接之前具有的链接数).
LET docId = "ExampleDocClass/1234567"
// get data for all the edges
LET es = GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1,includeData:true})
// create an array of all the neighbor nodes
LET vArray = (
FOR v IN GRAPH_TRAVERSAL('EdgeClass',docId[0],'any',{ maxDepth:1})
FOR v1 IN v …Run Code Online (Sandbox Code Playgroud) 这可能有一个非常简单的答案,但我没有看到它。
我想使用 Sequelize 进行原始查询:
var sequelize = require('sequelize');
sequelize
.query("LOAD DATA LOCAL INFILE :file
INTO TABLE :table
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';",
null,
{raw:true},
{file: datasetPath, table: "dataset_" + datasetName})
Run Code Online (Sandbox Code Playgroud)
问题在于,替换字符串包含用于:file替换(这很好,因为它是路径)和:table替换(这很糟糕,因为它只是应该是一个未经修饰的表名,并且会破坏查询)的单引号。在表名替换的情况下如何避免这些引号?
谢谢。
我找到了一些关于在关系数据库和文档数据库中设置标记系统的建议,但对于图形/多模型数据库没有任何建议。
我正在尝试为 ArangoDB 中的文档(我们称它们为“文章”)设置一个标记系统。我可以想到两种在 Arango 等多模型(图形+文档)数据库中存储标签的明显方法:
这些实际上是实现此目的的两种主要方法吗?两者都不理想。例如:
这让我提出了一个明确的问题:关于后一个选项,是否有任何简单的方法可以自动使连接的“标签”文档显示在文章文档中?例如,有一个数组属性以某种方式“镜像”tag.name了连接的标签文档的属性?
也欢迎一般性建议。
我确信有一种简单快捷的方法可以做到这一点,但它正在逃避我.我有一个大型数据集,有一些重复的记录,我想摆脱重复.(重复项由一个属性唯一标识,但文档的其余部分也应相同).
我试图创建一个只有几种不同方式的唯一值的新集合,但它们都很慢.例如:
FOR doc IN Documents
COLLECT docId = doc.myId, doc2 = doc
INSERT doc2 IN Documents2
Run Code Online (Sandbox Code Playgroud)
要么
FOR doc IN Documents
LET existing = (FOR doc2 IN Documents2
FILTER doc.myId == doc2.myId
RETURN doc2)
UPDATE existing WITH doc IN Documents2
Run Code Online (Sandbox Code Playgroud)
或(这给了我一个"违反的唯一约束"错误)
FOR doc IN Documents
UPSERT {myId: doc.myId}}]}
INSERT doc
UPDATE doc IN Documents2
Run Code Online (Sandbox Code Playgroud) 我有一个以下格式的数据集:
person surveyDate value
a 2006 35
a 2009 44
b 2005 24
b 2007 38
c 2006 51
c 2007 52
c 2009 49
Run Code Online (Sandbox Code Playgroud)
...我希望将其重塑为以下内容:
person dateDiff valueDiff
a 3 9
b 2 14
c 3 -2
Run Code Online (Sandbox Code Playgroud)
...其中dateDiff是每个人的最早和最新调查日期之间的差异,而valueDiff是每个人的最早和最新值之间的差异.请注意,有些人的调查比其他人更多,调查之间的时间也各不相同.
我一直试图用data.table(和melt/ dcast)来做这个,但是尝试使用:=in 来分配新的列值j让我完全陷入困境.其他方法是受欢迎的.速度不是一个大问题,因为数据集不是很大.
不太复杂:我想计算每个文档的边缘并将数字保存在文档中。我提出了两个有效的查询;不幸的是,因为我有数百万条边,所以两者都非常慢。是否有一种更快的方法来使用存储边数的属性来更新文档?(只是某个时间点的计数)
功能正常但速度缓慢的 AQL 查询:
FOR doc IN Documents
LET inEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'inbound', maxDepth:1})
LET outEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'outbound', maxDepth:1})
UPDATE doc WITH {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents
Run Code Online (Sandbox Code Playgroud)
或者:
FOR e IN Edges
COLLECT docId = e._to WITH COUNT INTO counter
UPDATE SPLIT(docId,'/')[1] WITH {inEdgeCount: counter}
Run Code Online (Sandbox Code Playgroud)
(然后对出站边缘重复)
顺便说一句,有什么方法可以查看查询速度(例如每秒执行 FOR 的次数)或完成百分比吗?我一直试图通过使用有限的查询来判断速度,但所需的时间似乎并不是线性扩展的。
arangodb ×4
javascript ×3
aql ×1
d3.js ×1
data.table ×1
mysql ×1
node.js ×1
r ×1
sequelize.js ×1
sql ×1