У меня есть приложение clojure. Он принимает запрос POST со следующей полезной нагрузкой.
[
{
"key1": value1,
"key2": value2,
"key3": value3,
"key4": value4
},
{
"key1": value1,
"key2": value2,
"key3": value3,
"key4": value4
}
]
Для каждого элемента массива мы делаем вызов SELECT для БД, используя jdb c, например,
(defn my-definition [db payload]
(->> payload
(map (fn [p]
(if-let [da (my-db-call-method db)]
(assoc da :key1 (:key1 p))
{:key2 (:key2 p)
:key3 (:key3 p)
})))))
* 1007. *
вызов БД (defn my-db-call-method [db json-params]
(with-sql-handling "my-db-call-method"
(jdbc/query db [my-query
(to long (:key1 json-params))
(to long (:key2 json-params))
)))
my-query.txt будет выглядеть примерно так:
Select * from my_table where col_name1 = ? and col_name2 =?
Теперь, если 1 вызов БД займет 100 мс, тогда размер пакета 100 займет 10 сек c. Это слишком долго. Есть ли способ пакетной обработки запроса в Clojure? Обратите внимание, что код находится в рабочем состоянии, но занимает много времени из-за последовательной обработки. Как мы можем параллельно обрабатывать это? Можем ли мы использовать любую стороннюю библиотеку для достижения этой цели?