Ale*_*x S 2 php linux hierarchy
我正在寻找[免费]服务器软件来有效地存储分层数据.我的主要挑战是一个物体或一组物体几乎总是有2个"父母",而父母中的一个或两个可以与其他父母有不同的联系,这些后代必须与普通父母的其他后代保持不同.
例:
A and B
C
D
E and F
G
H
E and I
J
K
L and M
...
Run Code Online (Sandbox Code Playgroud)
我想这可能是因为我非常喜欢在PHP中使用它,但我愿意学习一门新语言,因为这是一个没有任何截止日期的个人项目.(我正在使用Linux服务器;我不愿意改变它)
编辑:为了澄清我的例子 - C,D和E都是A和B的直接后代,F和I是其他东西的后代,可能是相同的东西,可能不是,G和K都是E和E的直接后代F等
我不确定这是否正是您正在寻找的,但您可以使用Graphviz点来建模/图形关系.这是.dot文件的更新内容,更像是您的说明:
digraph G {
compound = true // allow edges between clusters
subgraph cluster_ab {
rank = same;
A -> B -> A
}
A -> C [ltail=cluster_ab]
A -> D [ltail=cluster_ab]
A -> E [ltail=cluster_ab]
subgraph cluster_ef {
rank = same;
E -> F -> E
}
E -> G [ltail=cluster_ef]
E -> H [ltail=cluster_ef]
subgraph cluster_ei {
E -> I -> E
}
I -> J [ltail=cluster_ei]
I -> K [ltail=cluster_ei]
}
Run Code Online (Sandbox Code Playgroud)
样本点输出http://img21.imageshack.us/img21/6177/64094067.png
这个有点不同,因为你不能创建重叠的簇(E-> I和E-> F).但我认为这更像是你澄清的方式,即使E和我是兄弟姐妹并不是非常明显 - 我也必须确保从我到J,K的链接,否则会有警告和看起来有点丑陋.
有很多与Graphviz/dot接口的库可以让你动态生成这些类型的图形,而不是像我一样手工生成.然后,如果您已经有一个库来存储/检索有向图,那么您就可以存储分层数据了.至于它是否有效,正如你在问题中提到的那样......当然取决于你存储的数据量.
digraph G {
"A,B" -> C
"A,B" -> D
"A,B" -> E
"E,F" -> G
"E,F" -> H
"E,I" -> J
"E,I" -> K
}
Run Code Online (Sandbox Code Playgroud)
这是一个明显而优雅的解决方案,我完全忽略了,尽管在重叠发生时,兄弟关系仍然有点含糊不清(E再次).
更简单的图表http://img35.imageshack.us/img35/8969/so2b.png