Hi Derby Developers, I'm evaluating derby for use in the backend of a internet (web+http direct) based service. We have a bunch of mid-tier app server type boxes that all access data mounted on a bunch of nfs filers (so any mid-tier can handle a user request) and so the current thinking is for usage pattern (mimicing what is done in other places in this 5+ year old live system) would be to: 1) lock db directory for user (using symlinks -- atomic nfs op) ... would be done external to derby. 2) open database for the user 3) do operation to satisfy caller's request 4) close db then remove lock.
Unfortunately with this usage model the perf benefits of prepared statements go away (parameters still nicer then encoding for string sql stmts). I've done a bit of performance testing and as expected a ton of time is spent preparing a simple primary key lookup query (primarily due to opening/reading the many system tables and few indexes on the table), while the execution goes quite fast. In digging around the code I saw that the statements used for trigger actions are stored to remove this cost on each action invocation, would it be possible to expose this end user statements. In our case a mode that just keeps a persistent cache of the last N statements would be fine, no need to expose at all at the jdbc/sql level. I'm comfortable making the code change but would like to know before embarking on this the thoughts/advice of experienced derby developers. -Nick
