Не могу увидеть мою вершину и ребро из моего экземпляра Graph, но могу видеть из другого экземпляра Graph - PullRequest
0 голосов
/ 30 октября 2018

Работа над подтверждением концепции, если я добавляю вершину и ребро, используя экземпляр Graph внутри моего приложения, а затем я запрашиваю их, иногда результат запроса отправляет мне вершину и ребро, а иногда нет, но если я создаю тест JUnit указывая на сервер, я могу видеть, что вершина и ребро сохраняются. То же самое случится, если я урону вершину или ребро

What I'm missing?

============= Class to work with Vertex and Edge =================

public class JanusGraphRepository implements GraphRepository {

    private Graph graph;
    private GraphTraversalSource g;

    public JanusGraphRepository(Graph janusGraph) {
        this.graph = janusGraph;
        this.g = graph.traversal();
    }

    @Override
    public void dropE(Object id) {
        g.E(id).drop().iterate();
        g.tx().commit();
    }

    @Override
    public void dropV(Object id) {
        g.V(id).drop().iterate();
        g.tx().commit();
    }

    @Override
    public Vertex addV(final Object... keyValues) {
        Vertex v = graph.addVertex(keyValues);
        graph.tx().commit();
        return v;
    }

    @Override
    public Edge addE(String edgeLabel, Object fromVertex, Object toVertex,
            Object... keyValues) {
        Edge e = graph.vertices(fromVertex).next().addEdge(edgeLabel,
                graph.vertices(toVertex).next(), keyValues);
        graph.tx().commit();
        return e;
    }
}


======================== Code to get vertices and edges ======================

JanusGraphFactory.Builder config = JanusGraphFactory.build();
        config.set("storage.backend", "cql");
        config.set("storage.hostname", "10.2.1.134");
        config.set("storage.cql.keyspace", "janusgraph");
        config.set("index.search.backend", "elasticsearch");
        config.set("index.search.hostname", "10.2.1.134");
        // config.set("index.search.elasticsearch.client-only", "true");
        // ip address where cassandra is installed
        // config.set("storage.username", "cassandra");
        // config.set("storage.password", "cassandra");
        // config.set("storage.port", "8182");

        // Get the instance of graph
        JanusGraph graph = config.open();

        graph.vertices().forEachRemaining(x -> {
            System.out.println(x.id());
        });
        System.out.println("------ Edges -------");
        graph.edges().forEachRemaining(x -> {
            System.out.println(x.toString());
        });


Thanks

1 Ответ

0 голосов
/ 06 ноября 2018

Мутации в Кассандре не гарантируются, чтобы быть немедленно видимыми.

Я вижу, что вы используете серверную часть хранилища CQL для Janus, которая сообщает мне, что вы используете узел / кластер Cassandra. В Кассандре записи требуются для распространения на каждый узел и могут происходить не сразу. Похоже, что вы можете испытывать это.

Особенно в случае, когда конкретная запись должна быть передана узлу, которому принадлежит его диапазон индекса, и последующие чтения заканчиваются чтением с этого узла, можно попасть в ситуацию, когда за записью следует немедленная read не показывает только что записанные данные.

Время, необходимое для появления записи, зависит от множества факторов, кластер Кассандра; как правило, это не должно занимать более нескольких минут даже в очень высоком масштабе, но это не гарантируется. Кассандра отдает приоритет доступности по последовательности мутаций. Пока кластер остается подключенным и работающим, мутации будут распространяться на все реплики в кластере , в конечном итоге , но не обязательно во время возврата вызова записи. Это поведение известно как конечная согласованность .

Чтобы обойти это, вы должны скорректировать свои ожидания; вы не можете ожидать, что данные, которые были только что записаны в кластер (и, следовательно, JanusGraph при использовании Cassandra в качестве бэкэнда), будут немедленно доступны.

Если ваш вариант использования не может работать с моделью согласованности Cassandra, я бы посоветовал взглянуть на HBase или один из других бэкэндов, перечисленных в разделе Backends хранилища Руководства JanusGraph .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...