[英]Clojure getting data from db, transform and print into console
我有以下任務。
我需要創建一個使用一個參數的控制台應用程序,該參數是要生成的數據數量。 數據是人的地址和姓名。 我創建一個包含state, city, zip-code
字段的表格adress
。 我還創建一個表first
和last name
列。 我使用HugSQL處理PostgreSQL。 因此,我想動態混合地址,名字和姓氏,並將結果打印到控制台中,生成的值的數量取決於傳遞給應用程序的參數。 這是我的代碼:
(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
fn上進行設置: (defn ^String usa-adress-getter [] ...)
concat
類的SQL函數)。 這樣,您將不需要從哈希中獲取值並自己構建字符串。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.