I know that Ofbiz is limited in some areas, but as far it's the best place to start. It's better to improve some code than write it all. What I also think: I have software for free, I can put some effort to improve it.
So to keep the problem in mind. What is the way of implementing: 1) How to implement Right/Left joins on DynamicViewEntity 2) How to implement my whereString - > select .... where not in (select ...) And by the way: class:CategoryWorker method:getCategoriesWithNoParent My change do not affect the system I think. It gets some parameters and return a query result. So there is not much to break :) Dnia 2010-08-17, wto o godzinie 10:23 -0600, David E Jones pisze: > I wouldn't say that OFBiz OOTB is a middle of the road compromise, that would > imply consistency in the code which is not the case. The fact is some code is > designed and tested to properly handle millions or even billions of rows in > its target table, and other code can only have a few thousand or perhaps tens > of thousands. There is no general rule or easy way to simplify that down. > Things that are used more by larger organization have tended to be written or > improved over time to handle more data. Things that aren't haven't, it's that > simple. > > -David > > > On Aug 17, 2010, at 10:19 AM, Ruth Hoffman wrote: > > > Hi David: > > Thanks for chiming in! I understand and my experience has been exactly as > > you say: "Each bit of code and each query needs to be designed with a > > certain expected data set size" > > > > What you get with OFBiz out-of-the-box is a middle of the road > > "compromise". The really good news is that OFBiz is flexible enough to > > handle any necessary tweeks. > > > > FYI - I wanted to do more exploration into testing with large data sets and > > try and arrive at some guidelines to help determine just how those "tweeks" > > might work. I had intended to document the same, but then my database went > > away and I turned my attention to other things. > > > > Regards, > > Ruth > > > > David E Jones wrote: > >> One thing to keep in mind is that with database queries and OFBiz there is > >> no inherent nature of how it handles large data sets. Each bit of code and > >> each query needs to be designed with a certain expected data set size, and > >> typically the more data you want to allow for in the data store the more > >> effort and testing it requires. > >> > >> In other words, a query and bit of code that doesn't handle a certain > >> large table means absolutely nothing about how other queries and other > >> code will handle similarly large tables. > >> > >> -David > >> > >> > >> On Aug 17, 2010, at 9:33 AM, Ruth Hoffman wrote: > >> > >> > >>> Hi Micha: > >>> > >>> Could I ask how big are your data sets? The reason I ask is that several > >>> years ago, prior to 9.04 I had an out-of-memory problem that was never > >>> resolved. The database tables that I was querying had between 4 - 12 > >>> million records. My database (and OFBiz usage of the same) went away > >>> before I couldn't do any further investigation into the problem. > >>> > >>> So, I'm still curious about OFBiz support for really large data sets. > >>> > >>> Regards, > >>> Ruth > >>> > >>> Michał Cukierman wrote: > >>> > >>>> Thanks for the quick answer. > >>>> > >>>> I have allocated 2GB of memory, so it's not a case. The problem is that > >>>> I work on huge data sets. Version is 10.4 but 9.04 is has the same code. > >>>> I have ommited those informations 'couse as you see - it's not relevant > >>>> to the topic. > >>>> > >>>> I don't understand your last assumption. Maybe it will someting in my > >>>> understanding? > >>>> > >>>> For now I think the best would be to improve the code I have proposed as > >>>> it fixes: > >>>> 1) My issues > >>>> 2) Coding way of selecting everything to get a couple of categories. > >>>> > >>>> So, thats why I asked about: > >>>> > >>>> > >>>>> 1) How to implement Right/Left joins on DynamicViewEntity > >>>> (I was able to find out how to creat inner join only) > >>>> > >>>>>> 2) How to implement my whereString > >>>> (Haven't found in a code such a use case) > >>>> > >>>> > >>>> Regards, > >>>> MichaÅ‚ > >>>> > >>>> > >>>> > >>>> Dnia 2010-08-17, wto o godzinie 07:54 -0700, BJ Freeman pisze: > >>>> > >>>>> as far as performance how much memory have you allocated to ofbiz? > >>>>> what version of ofbiz are you using? > >>>>> There is a top Category that should be checked for first. > >>>>> have not been in that part of the code for a while. > >>>>> > >>>>> MichaÅ‚ Cukierman sent the following on 8/17/2010 7:41 AM: > >>>>> > >>>>>> Hi, > >>>>>> > >>>>>> I have a problem with performence (and Out of Memmory Issue) with > >>>>>> catalog management module. There is a section invoked after > >>>>>> Choose Top Category > >>>>>> > >>>>>> Collection<GenericValue> allCategories >>>>>> > >>>>>> delegator.findList("ProductCategory", null, null, null, null, false); > >>>>>> for (GenericValue curCat: allCategories) { > >>>>>> Collection<GenericValue> parentCats >>>>>> > >>>>>> curCat.getRelatedCache("CurrentProductCategoryRollup"); > >>>>>> > >>>>>> if (parentCats.isEmpty()) > >>>>>> results.add(curCat); > >>>>>> } > >>>>>> > >>>>>> As we see. To get categories without parents we need to fetch for all > >>>>>> categories and for each of them, find a parent. > >>>>>> > >>>>>> I do not know Ofbiz api very well for now, so I have implemented: > >>>>>> EntityWhereString where >>>>>> > >>>>>> EntityCondition.makeConditionWhere("PRODUCT_CATEGORY.PRODUCT_CATEGORY_ID > >>>>>> not in" + > >>>>>> " (select PRODUCT_CATEGORY_ROLLUP.PRODUCT_CATEGORY_ID from > >>>>>> PRODUCT_CATEGORY_ROLLUP)"); > >>>>>> Set<String> fieldsToSelect = FastSet.newInstance(); > >>>>>> fieldsToSelect.add("productCategoryId"); > >>>>>> > >>>>>> results.addAll(delegator.findList("ProductCategory", where, > >>>>>> fieldsToSelect, null, null, false)); > >>>>>> > >>>>>> > >>>>>> I simply do invoke a SQL query in the database: > >>>>>> > >>>>>> select PRODUCT_CATEGORY.PRODUCT_CATEGORY_ID from PRODUCT_CATEGORY where > >>>>>> PRODUCT_CATEGORY.PRODUCT_CATEGORY_ID not in > >>>>>> (select PRODUCT_CATEGORY_ROLLUP.PRODUCT_CATEGORY_ID from > >>>>>> PRODUCT_CATEGORY_ROLLUP); > >>>>>> > >>>>>> Is there a way ( for sure is ) to implement it in a better manner? For > >>>>>> now it works on my system, but after improving the query it could be > >>>>>> passed to a production. > >>>>>> > >>>>>> So I got two questions in fact: > >>>>>> > >>>>>> 1) How to implement Right/Left joins on DynamicViewEntity > >>>>>> 2) How to implement my whereString > >>>>>> > >>>>>> > >>>>>> Thank you in advance, > >>>>>> > >>>>>> > >>>>>> > >>>> > >> > >> > >> >