設定画面・仕様

設定画面 : Database(v112.0.0)

設定画面「Database」に関する解説です。

Subsonic系サーバではデフォルトで組み込みのデータベースが使用されているため、特に設定の必要なくそのまま使用できます。この記事には主に外部データデータベースへ切り替えをするため方法が記載されています。

外部データベースの利点には以下のようなものがあります。

  • Airsonic時代にセキュリティ上の理由からブラウザからのクエリ実行という裏機能が除去されました。組み込みのデータベースへアクセスする場合、サーバを停止して接続します。外部DB構成の場合、Jpsonic稼働中に同時アクセス可能です
  • HSQLDBはSQL端末が比較的限定されますが、外部DBの場合普段使い慣れたSQLアプリやSQL文法を自由に使えます
  • DBに並行接続できると、DB接続を行うアプリを作成したりバッチ処理をしたりといった二次利用が行いやすいです
  • データベース固有の機能(バックアップやレプリケ等)を利用可能です。(逆に言えばJpsonicにこれらの機能は不要)

コネクションソース

コネクションソースは、HOST/URL/JNDIの3つが選択可能です。設定は比較的簡単に行えるように改良されています。Jpsonicのインストールができて、何らかのデータベースの構築、またはTomcatの構築ができる方であれば、外部のデータベースと連携できるのではないかと思います。
3つの接続方法の違いは、誤解を恐れずざっくりと図解するとこのようになります。

HOSTはオンメモリで組み込みDBを動作させるため、全ての設定がアプリ内で完結します。URLはJDBC経由で外部のDBに接続しに行くので、赤線で示されるDB接続情報が必要になります。JNDIは主にTomcat等へJpsonicを配備するときに、DB接続情報をTomcat側で管理する場合に使用します。そのため赤線で示されるDB接続情報と、JpsonicがTomcatの設定を読みに行くための名称指定の2か所の設定が必要です。

Tomcatに配備する場合必ずJNDIを使用しなければならないわけではありません。HOSTやURLも使えます。

  • HOSTやURLは詳細な設定は内部で自動で行われるためお手軽という利点があります
  • JNDIは、ユーザがデータベースに関する設定情報を全て決められるという自由度の高さがあります

なんかふくざつw

お仕事の場合こんなめんどくさい仕組みが必要になる場合があります。大抵、図の登場人物が増えます。

  • [URL]の構成で、データベースが複数になったりする。JDBCドライバのオプションでマスターDBとセカンダリDBの接続先を登録して、マスターが死んだらセカンダリを見に行ったりする
  • [JNDI]で、ユーザからはひとつのシステムに見えるけれど、実は裏ではHttpサーバとTomcatとアプリとデータベースがそれぞれたくさん動いている場合がある。そういったときには悪魔のような設定が行われているでしょう

ですので、やろうと思えばそういっためんどくさいことができるリッチな仕組みがあるんだけれども、それをAirsonicやJpsonicでは最小構成で利用しようとしている・・・とご理解ください。

URLを使用した外部DB接続設定

v112.0.0以降、Resource Settings Helperという項目が追加されました。以前のように直接入力も可能ですが、データベースの接続情報さえ把握していればドライバにあわせたURLへ変換できるようになっています。

空のデータベースを作成したあと、そのデータベースの接続情報を入力し、使用するデータベースにあわせてドライバを選択してください。

JNDIを使用した外部DB接続設定

以前のように直接入力も可能ですが、URLと同様にResource Settings Helperが利用可能です。

空のデータベースを作成したあと、そのデータベースの接続情報を入力し、使用するデータベースにあわせてドライバを選択してください。

URLと異なり、JNDIの場合はリソース名という項目が一つ増えます。JpsonicがTomcatにリソースの問い合わせをするための識別名称になります。ネーミングは何でも良いです。

使用するドライバをクリックすると、JNDI Resouceというテキストエリアに設定用のXMLが出力されます。Tomcatの場合、この設定をconfディレクトリにあるcontext.xmlにコピーします。

このリソース設定は、SubsonicやAirsonicが連綿と使用し続けてきたHSQLDBや関連ライブラリのデフォルト値を参考に決めています。後のバージョンで並列処理が組み込まれたときに、このページで生成する設定も変更される場合があります。

JDBCドライバについて

  • JpsonicにはPostgres/MariaDB/MySQLの最新のJDBCドライバが内蔵されています。そのため設定値さえ正しければすぐに接続が可能です
  • 速度はマシンパワーに依存しますが、ほとんどの場合オンメモリで動作するHSQLDBが最速になりやすいかと思います。条件が良ければ外部DBでも近い速度を出すことは可能ですが、CREATE/UPDATE/SELECTとそれぞれに速度の特性があるため、処理によってはHSQLDBより速かったり遅かったりすることがあるかもしれません。御自身の環境で比較するのが速いです。もし特に最速にこだわるのでなければ、あるいは許容できる範囲内であれば、利便性で選んでよいと思います
  • PGJDBC-NGは公式のPostgres JDBCドライバの代替品でやや高速な処理を行える可能性があります。現在非公式ですが、コミュニティに寄贈してメンテナンスする計画もあるようです。幸いv112.0.0以降設定画面で公式ドライバと交換することが簡単になっているため、もしよろしければお試しください。そこそこパワーのあるlibc環境上でPGJDBC-NGでUNIXドメインソケット使用、のような構成がとれる場合ワンチャンあります(ドキュメントを見ながらおそらく試すことは可能です)

他のDBが使いたい

大抵の場合そのデータベース用のJDBCドライバが提供されています。それをダウンロードしてきてTomcatのlibに保存し、ドライバ名を書き換えれば接続が可能です。Jpsonic単体起動の場合は、起動オプションでクラスパスを通してください。

内部DBへ直接アクセスする際の情報

おそらくここから先はHSQLDBの使い方講座になってしまいます。HSQLDBの使い方は比較的簡単なので、プログラミング初心者でもネットで情報を探せばお役立ち情報へリーチしやすいのではないかと思います。簡単にスクリプトファイルと代表的なターミナルアプリの使い方について記載します。

スクリプトファイルについて

Jpsonicの稼働中にHSQLDBへ割り込みでアクセスすることはできません。DBに接続する際にはJpsonicを停止し、データディレクトリにあるスクリプトファイルへ対してJDBC接続します。

 データディレクトリ/db/jpsonic.script 

例えばWindowsの場合は、デフォルトでは C:\jpsonic\db\jpsonic.script にスクリプトファイルがあります。

このファイルの正体はSQLそのもので、スキーマからデータ全てを含むいわばダンプデータに相当するものです。標準的なSQLで記述されているため他のDBプロダクトでもこれを読み込める可能性は比較的高いです。Jpsonicに限らず、LinuxでDerbyを使っているようなサービスではDB移行にこのような手順が取られることがあります。

DBによってはPostgresのようにnullの扱いが異なるという場合もあり、タグデータ次第では簡単にいかないかもしれません。(利がないので実用している方はほとんどいないと思いますが、ID3v2.4でnull区切りを使用しているような場合等)Jpsonicでデータベース移行をサポートする予定は特にありません。

Windowsでお手軽接続する方法

DBeaverというSQLクライアントを使用するのがお手軽です。

インストール方法
DBeaverのサイトからインストーラをダウンロードします。
DownloadをクリックするとWindowsのインストーラが。
LinuxもMacもEclipse Pluginもあり、このSQLクライアントはどこでも使えます。

楽曲管理のクロスプラットフォーム化が加速します。
JpsonicはWindowsが滅んだ未来でも生き続けることができます。


Windowsのインストーラを起動。日本語を選択すると日本語で表示されます。
あとはお決まりの、同意をして、全部のアカウントで使うかどうかを指定して、インストールするコンポーネントを指定して、インストール先を指定するだけです。
簡単。

接続方法
メニューバーから「ファイル」「新規作成」を選択しウィザードを起動。

ここから「データベース接続」を選択し「次へ」をクリックします。


膨大なテンプレートの量ですが、「SQL」の項目に「HSQL Embedded」という項目があるので選択し、「次へ」をクリックします。

  • 「パス」にスクリプトファイルへのパスを拡張子無しで指定
  • 「ユーザー名に」「sa」を入力
  • 「終了」をクリックします

例えばWindowsの場合は、デフォルトでは C:\jpsonic\db\jpsonic.script にスクリプトファイルがあります。
この場合DBeaverのパス入力欄には

 C:\jpsonic\db\jpsonic 

と指定します。
(ファイルパスでもディレクトリパスでもなくDBパス)


「ウィンドウ」「データベースナビゲータ」を開くと、Jpsonicのスクリプトファイルに接続できます。
ここから先は普通のDBと扱いは同じです。

メニューの「SQLエディタ」からSQLが入力できます。

DB設計はさほど難しくないので、スキャンしたファイルに関するパス情報や格納されているタグ情報を見たいという場合は「MEDIA_FILE」というテーブルを覗いてみるとよいです。


DB設計へのポリシー

AirsonicのDB定義に対して「追加」はしていますが「削除や変更」は行っていません。必要性が明確であれば設計変更も辞さないのですが、データベースのレイヤーでむやみやたらにちゃぶ台返しをするのは好みません。

  • Sonic系サーバは歴史が長いため、直接DB操作する方も多くDB設計は暗黙知になっています。個人的にはスキーマもエコシステムの一部に近いのでは、と考えています。ユーザがDBに直繋ぎして何かに転用、という使い方を尊重します
  • たとえば他のSonic系サーバで使用していたバッチや、API経由でなくDBに直繋ぎするタイプのプログラムをJpsonicで使用する場合そのまま使えることが望ましいです。ユーザが作ったSQLがある日いきなり動かなくなることは避けるべきでしょう
  • 設計変更により性能改良も可能ですが、ボトルネックはそこではない場合がほとんどです。得られるわずかな速度より失われる設計互換性に注視します

一般的なWebアプリでは速度改善というと通信やDB周りがボトルネックになることが多いです。Subsonicの場合それ以外の要素が大きいです。そのため頭ごなしにDB変更という路線にはネガティブです。再現性のある検証と効果測定がないと話は回りますし、下手すると致命的な不具合を併発します。変化を恐れているわけではなく、バグの原因をチャレンジとすり替えるコミュニティを敬遠しているだけです。

ですのでなにか改善案がございましたら、ユーザにはどのような恩恵があるかの説明や検証等も併せてご提案頂ければ幸いです。私の方針というよりも、ジョブチューン風に日本の技術者7人くらい集めて「Yes」の札が4つ以上になるような立案を目指して頂ければ、かなりの確率で「アリ」なのではないかと思います。

更新履歴

この記事を書き換えたときに以下に追記します。

v112.0.0
Webページの仕様変更により接続方法に関する記載を全体的に書き換え
v111.0.0
「Jpsonicの内部DBに接続しよう(v109.1.0)」と「Jpsonic を外部DBで使ってみよう (v105.2.1)」を併合し、記事内容を圧縮
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

設定画面・仕様
起動オプション(v111.6.0)

Jpsonicの起動オプションに関する注意点です。

設定画面・仕様
Web画面の概要(v111.0.0)

Web画面を使用したブラウジングの概要です。

設定画面・仕様
設定画面の概要 (v112.0.0)

SubsonicとJpsonicの設定方法はほぼ同じですが、画面構成が少し異なります。