to address your basic concern the solution would be to load only the ID's instead of the complete data for each row. this is a minor change to the find call. give that a try. List<GenericValue> org.ofbiz.entity.Delegator.findList(String entityName, EntityCondition entityCondition, Set<String> fieldsToSelect, List<String> orderBy, EntityFindOptions findOptions, boolean useCache)
========================= BJ Freeman http://bjfreeman.elance.com Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> Specialtymarket.com <http://www.specialtymarket.com/> Systems Integrator-- Glad to Assist Chat Y! messenger: bjfr33man Linkedin <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> Michal Cukierman sent the following on 4/29/2010 12:30 PM: > I am a PLM consultant interested in Open source projects. I am interested in > Ofbiz as a application framework, as well as the Fully flaged ERP system. I > have to say that it has a lot of great solutions (i.e. modularity and small > amount of code). > Please forgive me if my question will be stupid as I have downloaded the > Ofbiz sources today and I am quite new to the subject. > > So lets go to the point: > > In the line 96 (around, depending on svn version) of the class > CategoryWorker of the products component there is a line: > > .. > Collection<GenericValue> allCategories = > delegator.findList("ProductCategory", null, null, null, null, false); > .. > > Before I started to implement my solution using ofbiz I wanted to make some > test, especialy on large amounts of data. > So far I have got 1 000 000 categories in my database and after > selecing: Choose > Top Category <https://localhost:8443/catalog/control/ChooseTopCategory>action > from the catalog management I run out of memory (4 GB of Xmx). > > I was considering why do we have to select all ( one milion!) records from > the database if we want to choose only several of them? > > I have seen that you use PRODUCT_CATEGORY_ROLLUP table to keep the > parent-child relations between categories. I understand that there is a need > of having many to many relation. > But besides we also have Many to one relation: primary parent category - > child categories, shouldn't we consider those as well while selecting the > ROOT objects? > > > My solution was preaty trivial I have changed the line 96 in the mentioned > class to: > > Collection<GenericValue> allCategories = delegator.findList > ("ProductCategory", > EntityCondition.makeCondition("PRIMARY_PARENT_CATEGORY_ID", null), null, > null, null, false); > > Is it a good solution? If it's not - I will find another way (some join > etc.), because from my point of view - selecting one milion objects if we > need a couple of them can be done by RDMS in almost realtime. > > Please correct me if I am wrong. I can be wrong. > > > Best Regards, > MichaĆ Cukierman >
