2009-12-07 4 views
2

이 동작을 이해하려고합니다. 확실히 내가 기대하는 바가 아닙니다. 두 개의 프로그램과 한 명의 리더, 한 명의 작가가 있습니다. 독자는 다음 쿼리 2 초마다rdflib 그래프가 업데이트되지 않았습니다. 왜?

import rdflib 
import random 
from rdflib import store 
import time 

default_graph_uri = "urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52" 

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore') 

config_string = "host=localhost,password=foo,user=foo,db=foo" 
rt = s.open(config_string,create=False) 
if rt != store.VALID_STORE: 
    s.open(config_string,create=True) 


while True: 
    graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef(default_graph_uri)) 
    rows = graph.query("SELECT ?id ?value { ?id <http://localhost#ha> ?value . }") 
    for r in rows: 
     print r[0], r[1] 
    time.sleep(2) 
    print " - - - - - - - - " 

두 번째 프로그램은

import rdflib 
import random 
from rdflib import store 

default_graph_uri = "urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52" 

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore') 

config_string = "host=localhost,password=foo,user=foo,db=foo" 
rt = s.open(config_string,create=False) 
if rt != store.VALID_STORE: 
    s.open(config_string,create=True) 

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef(default_graph_uri)) 

graph.add(( 
      rdflib.URIRef("http://localhost/"+str(random.randint(0,100))), 
      rdflib.URIRef("http://localhost#ha"), 
      rdflib.Literal(str(random.randint(0,100))) 
      ) 
      ) 
graph.commit() 

나는 결과의 수를 볼 것으로 예상 것 triplestore에 물건을 추가하는 작가가되어 수행하는 RDFlib 그래프 출점 작가를 사용하여 물건을 제출할 때 독자의 눈금이 증가하지만 이는 발생하지 않습니다. 독자는 시작했을 때와 동일한 결과를 계속 반환합니다. 그러나 독자를 중지하고 다시 시작하면 새로운 결과가 나타납니다.

내가 뭘 잘못하고 있는지 누가 알 수 있습니까?

답변

3

"graph = rdflib.ConjunctiveGraph (...)"행 바로 뒤에 "graph.commit()"을 삽입하는 것이 간단합니다. 나는 무엇이 원인인지, 그리고 읽기 전에 커밋이 이것을 고쳐야하는지 잘 모르겠습니다.

  • MySQLdb 연결을 열고, 트랜잭션이 자동으로
  • 시작이 거래는 다른, 나중에 거래에서 업데이트를 볼 수 없습니다 : 나는 같은데요.
  • "graph.commit()"은이 트랜잭션을 삭제하고 새 트랜잭션을 시작하는 어딘가의 "connection.commit()"에 버려집니다.
+0

버그 또는 기능이라고 생각하십니까? –

+0

좋아, 나는 출처를 열람했고, 모든 것이 단일 거래로 일어나는 것으로 보인다. 그것은 트랜잭션을 유지하는 저장소이기 때문에 매번 ConjunctiveGraph를 다시 작성하면 커밋을 수행하지 않으며 항상 저장소 인스턴스를 만들 때 그래프를 볼 수 있습니다. –

+0

여전히이 점이 맞습니까? –