On Aug 27, 2007, at 11:15 AM, Yang Song wrote:
Hi, Robert,
I am very interested in the database access part, because I am also
considering to add the database access code into my rule. But my
current concern is the performance.
It would be very appreciated if can let me know how many times of
database access is in your whole test suite, which cost 6 seconds?
Is it always validating the same user or randomly picking different
users to validate -- if using the same query, database may get
result cached which will result a better performance? Did you add
any arbitrary object caching in your java code for performance
optimization?
Basically, the test was to validate the configuration for each of 19
sites. The configuration for each site consists of about 1500
records, and the validation is extremely simple -- is the value for
one particular field valid for this particular site. Each site needed
to query a complete set of data; the two queries involved in that are
what took 6 seconds.
Our database is not known for its performance. Apparently it gets the
data back to us pretty quick, but it takes a second or two to set up
the query. And, yes, we're caching database connections. We're
constantly debating with our DBAs over database performance.
In this particular case, a better strategy for querying the data is
to load the configuration for multiple sites at once. The rules
wouldn't be that much more complicated (one or two additional
conditions), and we'd be hitting the database less frequently. I'd
bet I could get this test down to under 30 seconds with this
approach, maybe even down to under 10. Trying to write the procedural
code to handle this would be difficult, and still wouldn't give us
the flexibility the users are asking for.
I've not tried hitting the database during rule evaluation, but may
have to in future phases of the project. Let me know how it goes for
you!