Пакетная обработка запроса на выборку в ближайшем будущем - PullRequest
0 голосов
/ 02 марта 2020

У меня есть приложение 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? Обратите внимание, что код находится в рабочем состоянии, но занимает много времени из-за последовательной обработки. Как мы можем параллельно обрабатывать это? Можем ли мы использовать любую стороннюю библиотеку для достижения этой цели?

...