人工知能技術 セマンティックウェブ技術 オントロジー技術 検索技術 データベース技術 デジタルトランスフォーメーション技術 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に入力するデータに関しては一旦変数に代入するものが最もシンプルだ。
次回から、モデリング系の機械学習のアプローチであるベイス推定について述べたいと思う。
コメント
[…] 前回までに作成した、サーバー/DBのプラットフォームに機械学習の結果を組み合わせると人工知能系のアプリケーションができる。今回はそれら機械学習の中でも、モデリング系に分類されるベイズ推定について述べたいと思う。 […]
[…] 教師データの格納と/取り出しに前回に紹介したデータベースを活用すると、リアルタイムに修正する機械学習ツールができることになる。 […]
[…] webサーバーとDBの連携(4) ServerとDBの連携 […]
[…] ClojureでのWebサーバーとDBとの連携 postgresqlとサーバー […]