You are too quick with your assumptions. For instance did you test your change with the OOTB values and without? If you had done so you would have found that they don't give the same result. I suggest to have a look at the p.71-75 of the data model reference book https://cwiki.apache.org/confluence/display/OFBADMIN/OFBiz+Related+Books
And at large to read this book before making any new assumptions.

This does not mean that your use case should not be more thought about...
But one million categories, is this modeling something real in our world?

Jacques

Michal Cukierman wrote:
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


Reply via email to