다음 작업을 수행합니다.
생성 할 데이터의 수인 하나의 매개 변수를 취하는 콘솔 응용 프로그램을 만들어야합니다. 데이터는 사람 주소와 이름입니다. state, city, zip-code
필드가있는 adress
테이블을 만듭니다. 또한 first
및 last name
열이있는 테이블을 만듭니다. 나는 PostgreSQL을 다루기 위해 HugSQL을 사용합니다. 따라서 동적으로 주소와 이름을 섞어서 결과를 콘솔에 출력하려고합니다. 생성 된 값의 수는 응용 프로그램에 전달 된 인수에 따라 다릅니다. 이것은 내 코드입니다.db에서 데이터 가져 오기, 변환 및 콘솔로 인쇄
(ns project.core
(:require
[project.db.get :as get]))
(defn parse-int [s]
(Integer. (re-find #"\d+" s)))
(def usa-data (get/usa))
(defn usa-adress-getter []
(let [data (into {} (shuffle usa-data))
city (get data :city)
state (get data :state)
zip (get data :zip_code)]
(str state " " city " " zip)))
(defn repeater [times]
(dotimes [i times]
(println (usa-adress-getter))))
(defn -main [value]
(repeater (parse-int value)))
여기에서 나는 usa-adress-getter
기능의 결과를 확인합니다. 그러나 기능 평가의 시간이 너무 길어서, 1 분 안에 1 백만 값이라는 제한이 있습니다. 어떻게 평가의 속도를 높이려면? 기능 (get/usa)
은 adress
표에서 모든 데이터를 검색합니다.
'usa-address-getter'가 이상하게 보입니다. 그것은 제대로 작동합니까? 'project.db/get'을 사용하여'clojure.core/get'을 그릴 수 있기 때문에 실제로는 안됩니다. 코드 – leetwinski
또한'(into {} (shuffle usa-data))'의심스러운 것으로 보입니다. 왜냐하면 usa-data는 일련의 레코드를 반환해야하기 때문에 맵에 추가하는 것이 무의미한 것처럼 보입니다. 어쩌면 그것은'({{}으로 (처음으로 (usa-data를 뒤섞다))')'? 아무리해도 낮은 성능의 핵심은 seebs : 모든 반복 작업에서 열심히 백만 개의 항목을 섞어서 ** 정말 느립니다 (내 컴퓨터에서 약 250ms). '(rand-nth usa-data)에''rand-nth' :' – leetwinski
'과 같이 기록을 인쇄해야하는 것이 아니라면 전체를 구성하는 것이 더 나을 수도 있습니다. (반복적으로 (파싱 값이) usa-address-getter))'와 같이'repeater'함수를 던져 버리십시오. – leetwinski