WebサーバーとDBとの連携(4)WEbサーバーとDBを繋げる

人工知能技術 セマンティックウェブ技術 オントロジー技術 検索技術    データベース技術  デジタルトランスフォーメーション技術  Visualization & UX   ワークフロー&サービスプログラミング Clojure  データベース技術

前回少し寄り道をしてデータベースについて述べたが、今回はその前に述べていたWebサーバーとDBとの連携について書いてみたい。最終的なゴールとしては、クライアントでUIを構築(別途記載)、そこからHTTP経由でサーバーにアクセスし、さらにそのサーバーがリクエストを受けた情報に関してデータベースとやりとりするというイメージになる。さらに以前記述した機械学習結果をDBに入れることで人工知能系の検証実験を組める。

前回まで行ったのが、sever立ち上げ、DB立ち上げとそれらへの接続だった。今回はそれらを組み合わせたものになる。

まずDBの利用法として、Web上でのやり取りのデータを保管し、取り出す関数を定義する。

;;db設定(前回)
(def db-spec {:dbtype "postgresql" :dbname "my-db" :host "localhost" :port 5432})

;;データベースにtableを設定
(defn migrate []
  (jdbc/db-do-commands
   db-spec
   (ddl/create-table :my-data
                     [:id :serial]
                     [:title :varchar])))
;;データベースにデータをsave
(defn save-data [title]
  (jdbc/insert! db-spec :my-data {:title title}))
;;データベースからデータを抽出
(defn find-data-all []
  (jdbc/query db-spec "select * from my-data"))   ;;(1)

次にサーバーの立ち上げからクライアントからのデータ取得を行う関数を定義すると以下のようになる。

(defonce server (atom nil))

;;requestからquer
(defn param-pick [msg] (:text (:params msg))) ;;requestのデータによる

(defn ans-text [msg] (find-data-all (param-pick msg))) ;;dbへqueryをかけて出力

(defn response-data [n] 
     {:output [{:type "text" :value (str  n)}]}) ;;responseのデータによる

;;handler
(defn my-db-data [req] 
 (r/response (response-data (str (ans-text req)))))

;;route
(defroutes app-routes
  (GET "/my-db-data" [] my-db-data)
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      wrap-json-body
      wrap-json-response
     (wrap-defaults site-defaults)
     (wrap-cors :access-control-allow-origin [#".*"] :access-control-allow-methods [:get])))

;;servef
(defn start-server []
  (when-not @server
    (reset! server (server/run-jetty app {:port 3000 :join? false}))))

(defn stop-server []
  (when @server
    (.stop @server)
    (reset! server nil)))

(defn restart-server []
  (when @server
    (stop-server)
    (start-server)))

(defn -main []
  (start-server))

クライアントに出力するデータに関しては(1)の関数を調整すれば良い。DBに入力するデータに関しては一旦変数に代入するものが最もシンプルだ。

次回から、モデリング系の機械学習のアプローチであるベイス推定について述べたいと思う。

コメント

  1. […] 前回までに作成した、サーバー/DBのプラットフォームに機械学習の結果を組み合わせると人工知能系のアプリケーションができる。今回はそれら機械学習の中でも、モデリング系に分類されるベイズ推定について述べたいと思う。 […]

  2. […] 教師データの格納と/取り出しに前回に紹介したデータベースを活用すると、リアルタイムに修正する機械学習ツールができることになる。 […]

  3. […] webサーバーとDBの連携(4) ServerとDBの連携 […]

  4. […] ClojureでのWebサーバーとDBとの連携 postgresqlとサーバー […]

タイトルとURLをコピーしました