我正在开发一个Web应用程序,它将在很大程度上依赖于它能够根据具有类似偏好的用户对项目提出建议.我的一个朋友告诉我,我正在寻找的 - 数学上 - 是一些聚类分析算法.另一方面,在SO上,我被告知Neo4j(或其他一些图形数据库)是我应该为此任务寻求的那种数据库(首选项).
我开始研究这两种工具,我有些疑惑.出于聚类分析的目的,我认为标准SQL DB仍然是完美的选择,而Neo4j更适合神经网络的方法(虽然仍然完全适合任务).
我错过了什么吗?我是否尝试使用错误的工具组合?
我很想听听有关这个问题的一些想法.
感谢分享
我在节点之间有重复的关系,例如:
A ->{weight: 1} B
A ->{weight: 1} B
A ->{weight: 1} B
Run Code Online (Sandbox Code Playgroud)
我希望将这些关系合并为一个形式的关系:A - > {weight:3} B用于我的整个图形.
我尝试过以下内容:
start n = node(*)
match (n)-[r:OCCURENCE]->()
Set r.weight = count(*)
count(*)
Run Code Online (Sandbox Code Playgroud)
但是我的图表非常大,并且对于每个节点A和B,此查询边缘会更新两次.此外,旧关系不会被删除.不知道如何在一个查询中对这两个方面进行建模.希望有人能提供帮助.
编辑:
尝试使用node()和relationship()等其他一些查询
start n = node(*) match ()-[r:OCCURENCE]->() set n.SumEdgeWeight = sum(r.weight)
Run Code Online (Sandbox Code Playgroud)
他们处理的速度很慢.当我需要更新所有节点时,还有其他更快的方法吗?我在Neo4j社区找到了这个主题[1].我的查询是否有可能更快地运行java核心api?
[1] https://groups.google.com/forum/#!topic/neo4j/4SSxvNsuQsY
问候.
是否有任何图形数据库的漏洞(如果具体,特别是Neo4j v2.0),如基于SQL的数据库中的SQL注入以及如何在实现时克服它们?
完全是图形数据库的新手 - 欢迎更正.
如果我想获得标有"用户"标签的节点列表,neo4j(或可能是其他图形数据库)是否需要搜索该标签的所有节点,或者以某种方式按标签自动索引节点?
如果没有索引,(可怕的性能)会查询每个节点,看看它的任何一个标签是否与"User"匹配,如下所示:
List<Node> userNodes = new List<Node>();
for (Node node : all_nodes)
{
for (Label label : node.labels())
{
if (label.name() == "User")
{
userNodes.Add(node);
// no need to look at other labels for this node
break;
}
}
}
return userNodes;
Run Code Online (Sandbox Code Playgroud)
通过索引,系统会抓取一些系统管理的"节点",其中包含所有标签名称(搜索空间为数十而不是数百万)并抓取其子节点:
List<Node> userNodes = new List<Node>();
for (Node labelNode : labels_node) // where labels_node is system-managed
{
if (labelNode.name() == "User")
{
// All children of the "User" node have the label "User"
userNodes = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个文档管理软件,我正在评估存储和搜索数据的noSql数据库.
总结当项目在目录和子目录中组织时,软件就像文件系统一样.
树的每个项目都可以有n个属性用于过滤和排序.
物品也可以最终与某种其他关系(父母除外)相互联系.
项目数量可能相对较大(数百万),并且应用程序的杀手级功能必须在检索数据(使用过滤器和按属性排序)方面具有恒定的性能,而不依赖于数据库增长.
我需要3个关键功能:
获取文件夹的直接子项.结果必须是每个文档属性的可分页,可排序和可过滤的
获取文件夹的所有子项(子树的所有项).结果必须是每个文档属性的可分页,可排序和可过滤的
获取文件夹的所有父母
我是noSql中的新手,实际上我使用的是rdbms(Sql Server),但我遇到了性能问题以及由文档属性的固定架构引起的所有限制.我正在评估OrangoDb或OrientDb,因为我认为它的功能(面向文档和面向图形)可能是我设计需求的最佳解决方案.
你能帮助我,给我一个关于设计数据库和查询这个3任务的建议吗?
铌.我需要查询的结果返回一个数据集,其中包含每个属性的列:
Es. doc1: p1: v1, p2: v2
doc2: p1: v1, p3: v3
result:
name | p1 | p2 | p3
doc1 v1 v2 null
doc2 v1 null v3
Run Code Online (Sandbox Code Playgroud)
我在想设计一个项目:
{
"_id": "_myItemId",
"name`enter code here`" : "Item1",
"itemType": "root / folder / file"
"parentItemId": "",
"properties" : [
{ name: "Property1", formatType: 0, formatMask: "", value: "Value1" },
{ name: "Property2", formatType: 0, formatMask: "", value: "Value2" }, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用BatchGraph在Titan中加载数据.使用TitanGraph作为对象参数.
根据Tinkerpop的Batch Implementation,这是实现应该如何:
TitanGraph g = TitanFactory.open("titan-cassandra.properties");
BatchGraph bgraph = new BatchGraph( g, VertexIDType.STRING, 1000);
Run Code Online (Sandbox Code Playgroud)
但是在BatchGraph构造函数中需要TrasanctionalGraph对象.所以,当我把它投射为:
TitanGraph g = TitanFactory.open("titan-cassandra.properties");
BatchGraph bgraph = new BatchGraph( (TransactionalGraph) g, VertexIDType.STRING, 1000)
Run Code Online (Sandbox Code Playgroud)
这会出现以下错误:
Exception in thread "main" java.lang.ClassCastException:
com.thinkaurelius.titan.graphdb.database.StandardTitanGraph cannot be cast to com.tinkerpop.blueprints.TransactionalGraph
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何使用BatchGraph?如何处理?
我正在使用Titan 1.0.0和Blueprints 2.7.0以及cassandra 2.2.4版.
谢谢.
我正在使用OrientDB studio来创建某种类型的顶点(NodeType1).我使用OrientDB studio创建了29个顶点,当我运行时:
select count(*) from NodeType1
Run Code Online (Sandbox Code Playgroud)
我得到29条记录.
但是,当我跑:
select * from NodeType1
Run Code Online (Sandbox Code Playgroud)
我得到了只有20条记录的清单.
有没有人遇到过这个?
Graph数据库(特别是Neo4j)中搜索查询的时间复杂度是多少?
我和我有关系数据.我很困惑使用Relational数据库或Graph数据库来存储该数据.因此,我希望根据特定数据库的查询的性能和时间复杂性来存储数据.但是,我无法找到Graph数据库查询的性能和时间复杂度.
谁能帮我吗 ?
relational-database time-complexity neo4j graph-databases query-performance
关于Dgraph关于图遍历的功能,我有几个问题.
假设我们有一个由post类型的节点组成的数据集.每个帖子都可以有n个帖子回复此帖子.这棵树的深度不受限制.
是否可以使用Dgraph从一个起始节点开始搜索所有叶节点并返回满足特定条件的所有叶子?
是否可以将深度限制设置为不会以巨大的数据集结束?
是否也可以找到满足特定条件的所有父节点的子节点?
最后:Dgraph中的边缘是否被指示?我可以在查询中包含它吗?
我是gremlin的新手,在访问此网站时,我碰到了take()一步。它具有相同的输出,limit()这使我想知道两者之间的区别是什么。我对此事找不到任何澄清。谢谢!