【发布时间】:2018-11-07 03:38:32
【问题描述】:
我有一个带有子(节点)的自定义 LinkedTree,并且节点具有邻接关系,即每个节点都与前一个和下一个链接。这个 LinkedTree 很重很大,它可能包含数百万个节点。
这是一个代码示例:
package tree;
import java.io.Serializable;
public class LinkedTree<E> implements Serializable {
private int size = 0;
private Node<E> first;
private Node<E> last;
private LinkedTree<E> children;
public LinkedTree() {
children = new LinkedTree<>();
}
public LinkedTree(LinkedTree<E> children) {
this.children = children;
}
public void add(E element) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, element, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
}
public void remove(E element) {
...
}
public int size() {
return size;
}
public static class Node<E> implements Serializable {
E item;
Node<E> next;
Node<E> prev;
public Node(Node<E> prev, E item, Node<E> next) {
this.item = item;
this.next = next;
this.prev = prev;
}
public E item() {
return item;
}
public boolean hasPrevious() {
return prev != null;
}
public Node<E> previous() {
return prev;
}
public Node<E> previous(int target) {
Node<E> n = this;
int i = target;
while (i-- > 0 && n != null)
n = n.prev;
return n;
}
public boolean hasNext() {
return next != null;
}
public Node<E> next() {
return next;
}
public E nextItem() {
return next.item;
}
public E nextItem(int target) {
return next(target).item();
}
public Node<E> next(int target) {
Node<E> n = this;
int i = 0;
while (i++ < target && n != null)
n = n.next;
return n;
}
@Override
public int hashCode() {
return item != null ? item.hashCode() : 0;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Node<?> node = (Node<?>) o;
return item != null ? item.equals(node.item) : node.item == null;
}
@Override
public String toString() {
return item.toString();
}
}
}
我想对其进行序列化并将其保存在文件中以使其持久化,但加载和写入一些数据可能成本太高。所以我决定把它保存在 MySQL 中,这样我就可以从任何我想要的地方加载数据。我的意思是从这个层次结构的末端、中间或开始。
我想该行的关系应该同时处于邻接关系和父子关系。但我不知道该怎么做。
【问题讨论】:
-
大约一年前我都使用过它们。您是最适合解决此问题的图形数据库。但是还有一个问题,我已经在 MySQL 中存储了一些原始数据,在两种数据库中存储数据对我来说有点奇怪
-
没有简单的答案 - 选择取决于预期的使用模式。这个关于分层数据的 SQL 模型的精彩演示 slideshare.net/billkarwin/models-for-hierarchical-data 可能会有所帮助。或谷歌
Joe Celko "SQL FOR SMARTIES"。
标签: java mysql database tree data-persistence