RE: [castor-dev] PerformanceI have asked to improve the Cache implementation. I think that there are several of us who would be willing to discuss how we can improve the cache. (ie. Changing LRU.java to a more generic Cache.java, allowing the user to create their own cache types....)
Adam ----- Original Message ----- From: Thomas Yip To: [EMAIL PROTECTED] Sent: Friday, September 28, 2001 5:41 PM Subject: Re: [castor-dev] Performance I am not convinced that Castor JDO is ready for distributed cache yet. Having a distributed cache may not solve the problem you want to solve. Well, we're moving to that direction. In fact, Castor's LockEngine have two levels. The lock level keeps all ROWs in action. The access to a ROW in the lock level is guarded by read/write lock, the value should not be changed, even in case of cache invalidation of that particular ROW. Because, the value is used for modification detection in later time. So, eviction should not be done on any locked object. But, it should be flagged instead, so in the commit of rollback time, the LockEngine can decide what to do. Not until the transaction is completed and no other transaction interested in that particular ROW, it is moved to the cache level. On the other hand, the make sure a particular ROW would only exist zero or one time in the lock level and the cache level, the adding/removing/moving of ROW is synchronized between the cache level and lock level. Because of that, the eviction should not be implemented outside the LockEngine. Consider the current architecture, the active cache in JCACHE or distributed cache might not be the best fit. Also, when a ROW is invalidated, in some case, the related ROW should be done too. And, it is not easy in the current implementation. If Castor JDO is a house, we are taking off walls in order to extend the house. At this moment, I rather wait until some extensions to finish first, before starts discussing and planning the next walls to be taken off. However, I am open to discuss building furniture that does not involve taking wall off. Examples of furniture are other passive cache types: weakReference cache, time-count limited cache or speedier implementation etc. Thomas -----Original Message----- From: Adam Esterline [mailto:[EMAIL PROTECTED]] Sent: Friday, September 28, 2001 12:12 PM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance I would. I have offered to clean up the current cache implementation. Adam -----Original Message----- From: Matthew Baird [mailto:[EMAIL PROTECTED]] Sent: Friday, September 28, 2001 2:09 PM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance the solution, imho, is a distributed cache. THere is a JCP in process with oracle for this kinda of technology. A stopgap would be to have an evict function and keep caches in sync with a pubsub jms implementation, but this doesn't solve the issue of updates in a highly distributed transactional system. Setting the caching to NONE is not an issue for those of us using castor in a j2ee environemnt (probably more and more of us every day). And setting the cache countlimited isn't a real solution for obvious reasons. If a distributed cache for castor project was started, who would be interested in helping? -----Original Message----- From: Sudhir Bhojwani [mailto:[EMAIL PROTECTED]] Sent: Friday, September 28, 2001 11:44 AM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance If you don't want Caching you can always select cache-type-mapping as "none"....no more caching overheads at Transaction commit time. Also selecting the default caching option "CountLimited" might not be that bad. I find the implementation quite decent. And the overall performance to be quite linear. Performed the test with quite a few client threads, stress tested the cache for inserts, updates and deletes in various locking modes. May be I will publish my detailed repot on the mailing list in a few days. Thanks ! Sudhir Bhojwani Altoweb, http://www.altoweb.com -----Original Message----- From: Liebster, Dan [mailto:[EMAIL PROTECTED]] Sent: Friday, September 28, 2001 6:19 AM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance I would be happy just to be able to force everything in the Castor cache to expire immediately with a method call on a single application server. Does anyone know if this is possible? Dan -----Original Message----- From: James Higginbotham [mailto:[EMAIL PROTECTED]] Sent: Friday, September 28, 2001 12:40 AM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance I have seen a this problem solved in TopLink by using a multicast approach, where each instance of Toplink sends an event to all other instances with the PK and type (or similiar event data) of the data modified. Whenever a retrieve of the data is requested, the particular record is known to be dirty and a refresh is made. Maybe this is a feature best suited to a "commercial grade" version of castor, or by someone with a lot of time to write and debug this logic. :) Its a nice feature, but one that is rare even in commercial packages outside of TopLink. James ----- Original Message ----- From: Matthew Baird To: [EMAIL PROTECTED] Sent: Thursday, September 27, 2001 3:17 PM Subject: Re: [castor-dev] Performance I imagine this is the same problem as running multiple app servers in a distributed environment with all of them using different VM's with castor banging on the same DB. For adding new objects, there is no problem, but the cache will become inconsistent if there are updates, and castor will not like that. Is there any way to accomplish updates for other sources not messing castor up? -----Original Message----- From: James Higginbotham [mailto:[EMAIL PROTECTED]] Sent: Thursday, September 27, 2001 1:03 PM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance Dan, In my specific instances, the bulk loading was aggregated by a scheduled, background process once and never changed again. The aggregated data is read from castor, so no cache problems occurred. Anyone from the Castor team that could answer this question, I'm interested as well. I have seen TopLink, a very expensive but industrial strength mapper, have problems clearing the cache without a hack or VM restart. How does Castor deal with this, or does it? James ----- Original Message ----- From: Liebster, Dan To: [EMAIL PROTECTED] Sent: Thursday, September 27, 2001 11:57 AM Subject: Re: [castor-dev] Performance When using this approach, I would be interested what techniques you use to deal with reading cached objects in Castor that have had the underlying data changed by a batch update. Is there a clean way to "kick the cache" after running and external process? Dan -----Original Message----- From: James Higginbotham [mailto:[EMAIL PROTECTED]] Sent: Thursday, September 27, 2001 12:13 PM To: [EMAIL PROTECTED] Subject: Re: [castor-dev] Performance Chris, I have used Castor for basic OR/Mapping and straight JDBC when performance is a factor. Speaking from a general perspective rather than from Castor benchmarks, one generally chooses OR Mapping tools such as Castor JDO when you want to save time and redundant JDBC code. If you need to achieve large performance gains when doing complex joins or bulk inserts, you may wish to use JDBC batch updates or optimized queries. I have done this on numerous J2EE projects using a combination of the Data Access pattern, Castor JDO, and JDBC 2.0. In short, use Castor to save time on the common CRUD (create, read, update, delete) and use straight JDBC for performance gains on bulk inserts using batch updates and manually tuned SQL. Hope this helps, James ----- Original Message ----- From: "Chris Cook" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, September 27, 2001 10:42 AM Subject: [castor-dev] Performance > > > I have recently downloaded and started to use Castor for a project. We had > in place a set of code to simulate a piece of our system, and measure the > inserts per second into the database. Using straight JDBC we usually > measure about 175 ins/s into the database. With Castor doing the > persistence, we measure about 40 ins/s. Does this figure seem right to you > all? Does Castor average about 4 or 5 times slower than straight JDBC? > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-dev > > ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev