« 2013年3月 | トップページ | 2013年9月 »

2013年4月

2013年4月14日 (日)

DocumentHistory 選択の保存

DocumentHistory で selectAll した状態(左)で,過去カルテを見ながら新規カルテを編集して保存すると,オリジナルでは右の様に新規に保存したカルテのみが選択された状態になる。

Historya  →  Historyb

      ↓

Historyc

これを,新規カルテを保存した後にも,それまでの選択が保存される様に改造してみた。

  • 選択を維持することで,既にデータベースから読み込んだデータを読み直さなくてもよくなるので,キャッシュ効果がある。
  • カルテ編集保存時のパタパタが減って見やすくなった気がする。
  • selectAll した後にカルテ抽出期間を変更した場合も選択が保存されるので,抽出期間を減らした後に改めて selectAll する操作が不要になった。

2013年4月 4日 (木)

CPU 数割り当て

サーバの CPU を i7 にアップグレードしたが,この CPU は 4コア+HT で,8 個の CPU として認識される。

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 58
model name	: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
 :
processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 58
model name	: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
 :
 :
processor	: 7
vendor_id	: GenuineIntel
cpu family	: 6
model		: 58
model name	: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
 :

このあり余る CPU を dolphin サーバ,orca サーバにどう割り当てたらよいか実験してみた。

CPU数時間
1 11.3秒
2 6.4秒
4 5.1秒
8 5.1秒

dolphin サーバの JBoss 起動時間

JBoss 起動時間は CPU 数を増やす毎に速くなった。
JBoss  の起動プロセスは,複数の CPU を上手に利用するようになっているようだ。

CPU数時間
1 9.1秒
2 8.6秒
4 8.8秒
8 8.9秒

大量カルテ読み込み時間

カルテ読み込み時間は CPU 数には無関係だった。
複数 CPU を生かすようなプログラミングってできるんだろうか。

CPU数時間
1 1分40秒
4 1分41秒
8 1分42秒

orca サーバでレセプト作成

orca のレセプト作成も CPU 数は関係ないようであった。

当院業務では CPU 数による大きな差はないようだった。
とりあえず,dolphin サーバ,orca サーバとも CPU 4個で動かすことにした。

結論:この CPU は当院業務には明らかにオーバースペックである。

2013年4月 1日 (月)

大量カルテの読み込み対策

カルテが段々増えてきて,カルテ(DocumentModel)を selectAll した場合,読み込みに時間がかかることが多くなってきた。クエリの工夫CPU のアップグレード等,サーバ側でできる工夫はほぼ出つくしたと思われ,また,クライアント側でも,カルテのレンダリング時間がかなりかかってしまうようになった。これから DocumentModel はもっと増えると考えられるので対策が必要である。

 そこで, 根本的な対策として,DocumentModel を少しずつ読み込みながら表示していく方式をプログラムしてみた。これまでは,必要な DocumentModel を全部読んでから表示するようにしていたため,サーバからカルテ読み込み→レンダリング→表示の処理中はカルテ操作不能で,表示されるまで待つしか無かった。今回,SwingWorker を使って,DocumentModel を10件ずつ読んできてはレンダリングして,というのを繰り返すようにしてみた。これならいくら DocumentModel が増えても,最初の 10件を読み込んでレンダリングした時点で表示開始するので,カルテ表示まで待たされることが無くなる。

Kartedocumentviewer2

Kartedocumentviewer1

SelectAll で 173件の DocumentModel を全選択したところ。1秒くらいでカルテが表示されて操作可能になる。プログレスバーを見ると,読み込みはまだ始まったばかりであることが分かる。 プログレスバーを見ると,引き続き読み込み中であることが分かるが,少し重いながらスクロールもできるし,カルテを編集したり,文書履歴をクリックして選択を変更することもできる。

scrollerPanel に KarteViewer のパネルを加えると,JViewport が勝手に viewportView を最後までスクロールしてしまう現象でかなり悩んだ。最終的にはスタックトレースを取って,勝手に setViewPosition してくるメソッドを調べ,DefaultCaret#adjustVisibility が犯人であることを突き止めた。これをもとにググったところ,同じく悩んだ人の記事が見つかり,これを参考に workaround して解決した。

« 2013年3月 | トップページ | 2013年9月 »