Contents
Performance must be designed into an application. It is not realistic to expect performance to be tested in at the end of the development cycle. A common sense approach is provided to design StreamBase® applications that perform. The key metrics and trade-offs that impact application performance are:
- 
                           
Scaling versus path length
 - 
                           
Horizontal versus vertical scaling
 - 
                           
Contention
 - 
                           
Latency versus through-put
 
StreamBase® features make high-performance applications possible. However, these features must be used where appropriate. Each of these StreamBase® features can have an impact on application performance. They must be used when appropriate.
- 
                           
Managed versus non-managed objects.
 - 
                           
Transactional versus non-transactional code.
 - 
                           
Keys and indexes.
 - 
                           
Transactions versus Java monitors for concurrency control.
 - 
                           
High-availability (partitioned) managed objects versus non-partitioned managed objects.
 - 
                           
High-availability versus distribution.
 
Tuning a StreamBase® application involves both application architecture decisions and appropriate configuration of system parameters. The types of questions that must be answered are:
- 
                           
How should the JVM heap sizes be configured?
 - 
                           
How to ensure that the garbage collector does not impact the latency of running applications?
 - 
                           
What size of shared memory should be configured?
 - 
                           
Should System V or file-mapped shared memory be used?
 - 
                           
How much disk space is needed?
 - 
                           
Should the application run on single or multiple nodes?
 - 
                           
How should the application be deployed within a node?
 - 
                           
Should application data be partitioned across multiple nodes?
 - 
                           
When should distribution be used?
 
