나는 monger를 사용하고 find-maps를 사용하여 mongo nosql 데이터베이스에서 일괄 처리를 가져옵니다. 그것은 내 함수 호출 체인에서 datastore 인수 (참조) 다운 스트림으로 사용할 계획 인 배열을 반환합니다. 향후 함수 호출 내에서 해당 ID에 액세스 할 수 있습니다. 이 ID를 내 데이터 저장소에서 가져 오기위한 조회로 사용하여 다른 호출자를 호출 할 필요가 없기를 바랍니다. 배열 형식의 데이터 저장소는 ID로 개체에 액세스하는 가장 빠른 방법처럼 보이지 않지만 .... 확실하지 않습니다.이 더 빠릅니까? 조건 fn 또는 get-in으로 맵핑하거나 축소합니까?
나는이 데이터 저장소 배열에서 개체를 도출하기 위해 필요한 경우, 그때 후 경우,
(defn fetchObjFromArray [fetch_id inputarray]
(reduce (fn [reduced_obj element_obj]
(if (= fetch_id (get-in element_obj [:_id]))
element_obj ;; ignoring duplicates for conversation
reduced_obj
)
)
{}
inputarray
)
)
대신 (모든 요소를 통해 그 N (로그인 할 수 있습니다))이 같은 기능을 사용할 필요가 거라고
(defn createReportFromObjArray [inputarray]
(reduce (fn [returnobj elementobj]
(let [_id (get-in elementobj [:_id])
keyword (keyword _id)]
(assoc returnobj keyword elementobj)
) ;; ignoring duplicates for conversation
)
{}
inputarray)
)
은 아마도 내 후속 호출 대신 얻을-에서 사용할 수와 내가 키를 가져 오는 것 때문이 훨씬 빠른 것 : 내 초기 상인의 호출은,이 같은 기능을 가진 키/발 해시 객체를 생성 ?
나는 때문에 혼란 :
(let [report (createReportFromObjArray inputarray)
target_val (get-in report [(keyword fetch_id)])]
: 그것은 키와 fetch_id 사이의 일치를 찾을 때까지/발 객체를 내가 얻을-에서 사용하는 경우는 키의 각 키를 반복 할 필요가 없습니다있다
get-in이 모든 키에 대해 로그를 남기지 않는 이유는 무엇입니까? Map/Reduction이 log (n)을 통해 전체적으로 진행되어야하는 첫 번째 "일치"를 발견했을 때 멈출 수 있기 때문에 빠를 수도 있습니까? 이 방법은 배열의 각 요소를 반복하고 id가 fetch_id와 일치 하는지를 확인하는 것보다 더 빠릅니까?
제공 할 수있는 도움에 대해 매우 감사드립니다.
그래서 (get-in ...)을 사용하면 관련 값을 찾기 위해 각 키를 넘겨야하는 것보다 (O (log32 (N))을 더 잘 수행하는 알고리즘이 내장되어 있습니까? –
두 번째 및 세 번째 예제에서는 해시 맵을 작성하는 방법과 get-in을 통해 키를 찾는 방법을 보여줍니다 (get을 사용할 수도 있음). 그것은 성능을 말했다. 두 번째 예제에서 해시 맵을 작성했기 때문에 해시 맵에서 키를 찾는 성능은 무언가를 찾을 때까지 모든 요소를 반복하는 첫 번째 예제보다 훨씬 낫습니다. https://en.wikipedia.org/wiki/Hash_table을 이해하고 싶거나 질문에 오해 한 것 같습니다. –