[Mondrian] New configuration parameter: mondrian.rolap.RolapMember.PropertyValueMap.class

Julian Hyde jhyde at pentaho.com
Thu Jul 9 15:46:16 EDT 2009


This is an interesting change. Flat3Map is an implementation of
java.util.Map which is very memory and CPU efficient if the map contains 3
or fewer values. That is, the member has 3 or fewer properties. If members
have more than 3 properties, the map will automatically delegate to a
regular hashmap.

Since mondrian caches large numbers of members, I believe that this change
will make mondrian faster and more efficient in the average case. Let me
know what you find. This may not be the case for levels with large numbers
of member properties, so you may wish to experiment with the
"mondrian.rolap.RolapMember.PropertyValueMap.class" (PropertyValueMapClass)
configuration parameter.

Julian

-----Original Message-----
From: Eric McDermid [mailto:mcdermid at stonecreek.com] 
Sent: Thursday, July 09, 2009 12:32 PM
To: Ajit Joglekar; Aaron Phillips; Andreas Voss; Bart Pappyn; Ezequiel
Cuellar; Julian Hyde; John V. Sichi; Mat Lowery; Matt Campbell; Rushan Chen;
Robin Tharappel; Will Gorman
Subject: Eigenbase perforce change 12921 for review

http://p4web.eigenbase.org/@md=d&c=6PU@//12921?ac=10

Change 12921 by eric at eric.wednesday.mondrian.dev on 2009/07/09 12:30:11

	MONDRIAN: Change RolapMember to use a factorized Map to store member
property values, defaulting to org.apache.commons.collections.map.Flat3Map

Affected files ...

... //open/mondrian/doc/configuration.html#53 edit
... //open/mondrian/src/main/mondrian/olap/MondrianProperties.java#109 edit
... //open/mondrian/src/main/mondrian/rolap/RolapMember.java#85 edit

Differences ...

==== //open/mondrian/doc/configuration.html#53 (ktext) ====

3c3
<   == $Id: //open/mondrian/doc/configuration.html#52 $
---
>   == $Id: //open/mondrian/doc/configuration.html#53 $
1102a1103,1116
>     <tr>
>       <td><code>
>       <a
href="api/mondrian/rolap/RolapMember/MondrianProperties.html#PropertyValueMa
pClass">
>       mondrian.rolap.RolapMember.PropertyValueMap.class
>       </a></code></td>
> 
>       <td>string</td>
>       <td>-</td>
>       <td>
>       If set, the specified class is used to store member property
>       values in mondrian.rolap.RolapMember.  Defaults to
>       org.apache.commons.collections.map.Flat3Map
>       </td>
>     </tr>
1514c1528
<     Version: $Id: //open/mondrian/doc/configuration.html#52 $
---
>     Version: $Id: //open/mondrian/doc/configuration.html#53 $

==== //open/mondrian/src/main/mondrian/olap/MondrianProperties.java#109
(ktext) ====

2c2
< // $Id: //open/mondrian/src/main/mondrian/olap/MondrianProperties.java#108
$
---
> // $Id: //open/mondrian/src/main/mondrian/olap/MondrianProperties.java#109
$
52c52
<  * @version $Id:
//open/mondrian/src/main/mondrian/olap/MondrianProperties.java#108 $
---
>  * @version $Id:
//open/mondrian/src/main/mondrian/olap/MondrianProperties.java#109 $
974a975,987
>      * the name of the class used for mapping member properties
>      * to their respective values.
>      *
>      * <p>If the value is
>      * non-null, it is used by the <code>PropertyValueFactory</code>
>      * to create the implementation.
>      */
>     public transient final StringProperty PropertyValueMapClass =
>         new StringProperty(
>             this, "mondrian.rolap.RolapMember.PropertyValueMap.class",
null);
> 
>     /**
>      * Property that defines

==== //open/mondrian/src/main/mondrian/rolap/RolapMember.java#85 (ktext)
====

2c2
< // $Id: //open/mondrian/src/main/mondrian/rolap/RolapMember.java#84 $
---
> // $Id: //open/mondrian/src/main/mondrian/rolap/RolapMember.java#85 $
16a17,18
> import mondrian.util.ObjectFactory;
> import mondrian.util.CreationException;
18a21,23
> import org.apache.commons.collections.map.Flat3Map;
> import org.eigenbase.util.property.StringProperty;
> 
27c32
<  * @version $Id:
//open/mondrian/src/main/mondrian/rolap/RolapMember.java#84 $
---
>  * @version $Id:
//open/mondrian/src/main/mondrian/rolap/RolapMember.java#85 $
508c513,514
<             mapPropertyNameToValue = new HashMap<String, Object>();
---
>             mapPropertyNameToValue =
>                 PropertyValueMapFactory.getPropertyValueMap();
822a829,871
>     public static final class PropertyValueMapFactory
>     extends ObjectFactory<Map>
>     {
> 
>         /**
>          * Single instance of the <code>PropertyValueMapFactory</code>.
>          */
>         private static final PropertyValueMapFactory factory;
>         static {
>             factory = new PropertyValueMapFactory();
>         }
> 
>         /**
>          * Access the <code>PropertyValueMapFactory</code> instance.
>          *
>          * @return the <code>Map</code>.
>          */
>         public static Map getPropertyValueMap() {
>             return factory.getObject();
>         }
> 
>         /**
>          * The constructor for the <code>PropertyValueMapFactory</code>.
This
>          * passes the <code>Map</code> class to the
<code>ObjectFactory</code>
>          * base class.
>          */
>         private PropertyValueMapFactory() {
>             super(Map.class);
>         }
> 
> 
>         protected StringProperty getStringProperty() {
>             return MondrianProperties.instance().PropertyValueMapClass;
>         }
> 
>         protected Map getDefault(
>             Class[] parameterTypes,
>             Object[] parameterValues)
>             throws CreationException
>         {
>             return new Flat3Map();
>         }
>     }





More information about the Mondrian mailing list