Titan Cassandra - 幽灵顶点和不一致的读取行为直到重启
Titan Cassandra - Ghost Vertices and Inconsistent Read Behavior Until Restart
从 Titan 中删除顶点会导致读取行为不一致。我正在一台机器上测试这个 运行ning Cassandra,这是我的 conf.properties:
storage.backend=cassandra
storage.hostname=localhost
storage.cassandra.keyspace=test
以下方法删除适当的顶点:
public void deleteProfile(String uuid, String puuid) {
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : this.graph.getVertices("uuid", puuid, Profile.class)) {
person.removeProfile(profile);
graph.removeVertex(profile.asVertex());
}
}
}
this.graph.getBaseGraph().commit();
}
调用以下方法时 returns 两组不同的结果:
public Iterable<ProfileImpl> getProfiles(String uuid) {
List<ProfileImpl> profiles = new ArrayList<>();
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : person.getProfiles()) {
profiles.add(profile.toImpl());
}
}
}
return profiles;
}
一个结果将符合预期 - 它不会包含已删除的配置文件。然而,当我 运行 它足够多次时 - 它有时会包含一个额外的配置文件 - 被删除的那个。
尝试再次删除同一个顶点表明不存在与该顶点相同的顶点 'uuid',迭代器的 hasNext() returns false。
程序重新启动后,但是,它永远不会 returns 删除的顶点。我该如何解决这种不一致的行为?
根据http://s3.thinkaurelius.com/docs/titan/0.9.0-M2/tx.html#tx-config你应该设置checkInternalVertexExistence
问题是在某些线程上,已经为图形打开了事务。从图中读取会打开一个事务,即使没有任何更改。需要关闭这些事务以确保行为一致。
从 Titan 中删除顶点会导致读取行为不一致。我正在一台机器上测试这个 运行ning Cassandra,这是我的 conf.properties:
storage.backend=cassandra
storage.hostname=localhost
storage.cassandra.keyspace=test
以下方法删除适当的顶点:
public void deleteProfile(String uuid, String puuid) {
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : this.graph.getVertices("uuid", puuid, Profile.class)) {
person.removeProfile(profile);
graph.removeVertex(profile.asVertex());
}
}
}
this.graph.getBaseGraph().commit();
}
调用以下方法时 returns 两组不同的结果:
public Iterable<ProfileImpl> getProfiles(String uuid) {
List<ProfileImpl> profiles = new ArrayList<>();
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : person.getProfiles()) {
profiles.add(profile.toImpl());
}
}
}
return profiles;
}
一个结果将符合预期 - 它不会包含已删除的配置文件。然而,当我 运行 它足够多次时 - 它有时会包含一个额外的配置文件 - 被删除的那个。
尝试再次删除同一个顶点表明不存在与该顶点相同的顶点 'uuid',迭代器的 hasNext() returns false。
程序重新启动后,但是,它永远不会 returns 删除的顶点。我该如何解决这种不一致的行为?
根据http://s3.thinkaurelius.com/docs/titan/0.9.0-M2/tx.html#tx-config你应该设置checkInternalVertexExistence
问题是在某些线程上,已经为图形打开了事务。从图中读取会打开一个事务,即使没有任何更改。需要关闭这些事务以确保行为一致。