2016-08-16 2 views
1

현재 ArangoDB POC에서 작업 중입니다. PyArango를 사용하는 ArangoDB에서 문서 작성에 소요되는 시간이 매우 길다는 것을 알게되었습니다. 300 개의 문서를 삽입하는 데 약 5 분이 소요됩니다.대량 데이터를 ArangoDB로 가져 오는 가장 좋은 방법

with open('abc.csv') as fp: 
for line in fp: 
    dataList = line.split(",") 

    aaa = dbObj['aaa'].createDocument() 
    bbb = dbObj['bbb'].createDocument() 
    ccc = dbObj['ccc'].createEdge() 

    bbb['bbb'] = dataList[1] 
    aaa['aaa'] = dataList[0] 
    aaa._key = dataList[0] 

    aaa.save() 
    bbb.save() 

    ccc.links(aaa,bbb) 
    ccc['related_to'] = "gfdgf" 
    ccc['weight'] = 0 

    ccc.save() 

서로 다른 컬렉션은 아래의 코드에 의해 만들어집니다 :

dbObj.createCollection(className='aaa', waitForSync=False) 
+1

당신이 [arangoimp] 생각나요 (https://docs.arangodb.com/3.0/Manual/Administration/Arangoimp.html)? 필요한 경우 소스 데이터를 Python으로 사전 처리 할 수 ​​있지만 가져 오기 자체는 효율성을 위해 ArangoDB의 대량 가져 오기 API를 사용하는 arangoimp에 의해 수행되어야합니다. – CoDEmanX

+0

나는 arangoimp를 살펴 봤는데, 데이터가 JSON, CSV 파일의 형태로 존재해야하고 이미 기본 키가있는 것처럼 보입니다. 여기에서 볼 수있는 문제는 이미 DB에있을 수있는 중복 노드를 처리 할 수 ​​없다는 것입니다. 이러한 조건을 처리 할 수있는 특정 옵션이 있습니까? ArangoImp 문서에서 찾을 수 없습니다. – pjesudhas

+0

pyArango는 현재 HTTP keep-alive에 문제가 있습니다. 연결을 다시 사용하지 않아 결국 DNS 조회를 다시 수행하지 않습니다. Google은 현재이 문제의 원인과 해결 방법을 조사하고 있습니다. – dothebart

답변

4

버텍스의 주요 속성을 알고 있다면 "collectionName"+ "/"+ "documentKey"에 의해 문서 핸들을 생성 할 수 있습니다. 예 :

arangoDriver.startBatchMode(); 

for(String line : lines) 
{ 
    String[] data = line.split(","); 

    BaseDocument device = new BaseDocument(); 
    BaseDocument phyAddress = new BaseDocument(); 
    BaseDocument conn = new BaseDocument(); 

    String keyDevice = data[0]; 
    String handleDevice = "DeviceId/" + keyDevice; 

    device.setDocumentKey(keyDevice); 

    device.addAttribute("device_id",data[0]); 

    String keyPhyAddress = data[1]; 
    String handlePhyAddress = "PhysicalLocation/" + keyPhyAddress; 

    phyAddress.setDocumentKey(keyPhyAddress); 

    phyAddress.addAttribute("address",data[1]); 

    final DocumentEntity<BaseDocument> from = arangoDriver.graphCreateVertex("testGraph", "DeviceId", device, null);  
    final DocumentEntity<BaseDocument> to = arangoDriver.graphCreateVertex("testGraph", "PhysicalLocation", phyAddress, null); 

    arangoDriver.graphCreateEdge("testGraph", "DeviceId_PhysicalLocation", null, handleDevice, handlePhyAddress, null, null); 

} 
arangoDriver.executeBatch(); 
0

내가 만들 것을 나는 아래의 거친 코드를 붙여 넣은이 속도를 더 나은 방법이 있으면 알려 주시기 바랍니다 모든 데이터를 json 형식의 문자열에 삽입하고 createDocumentRaw를 사용하여 한 번에 하나의 저장으로 모든 데이터를 만듭니다. arango java 드라이버의 일괄 처리 모드 문제로 인해

관련 문제