Я создаю приложение и мне нужна структура данных взаимосвязанных объектов, которые можно запрашивать и просматривать. Связи между объектами могут быть произвольными и не обязательно известны заранее. Мне нужно, чтобы эта структура данных была запрашиваемой (что обеспечивает обычный SQL), а также проходной (что предоставляет новая графовая база данных, такая как neo4j). Я пытаюсь получить что-то, что делает оба и эффективно работает с очень большими наборами данных. Давайте назовем эту структуру данных дао. Мне понадобятся следующие примитивные методы:
// dealing with the objects
dao.save(s);
Something s = dao.load(Something.class, 5);
dao.update(s);
dao.delete(s);
// dealing with the relations
dao.relate(s, t);
dao.unrelate(s, t);
// the tricky methods
dao.querier(Something.class).filter(...).sort(...).values();
dao.traverser(Something.class).start(s).path(...).filter(...).sort(...).values();
Фильтр будет выглядеть как предложение sql where, sort будет выглядеть как предложение sql order, start будет начальным узлом для обхода, а путь будет определять такие вещи, как обход BFS и DFS, а также когда прекратить поиск.
Я пытался смоделировать это как вершины со списком смежности, но должен быть лучший способ. Есть идеи?