Jackrabbit Content Repository
  1. Jackrabbit Content Repository
  2. JCR-1435

Choose the MySQL engine for database storage (default to MyISAM)

    Details

    • Type: Improvement Improvement
    • Status: Patch Available
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: core 1.4.1
    • Fix Version/s: None
    • Component/s: jackrabbit-core
    • Labels:
      None
    • Environment:
      MySQL with NDB Cluster engine

      Description

      The MySQL scripts embedded into Jackrabbit does not specify the engine to use.
      So by default MyISAM is used and we cannot change this.

      But, depending on the environment we may want to use an alternate engine like
      InnoDB (for transaction support) or in my case NDB Cluster (for high availability).

      We can still manually created the tables and then set the wanted engine, but it would
      be better if there was a parameter for the engine for component in the repository.xml
      for automatic table creation.

      1. jackrabbit-1.4.x-mysql-engine.patch
        16 kB
        Sébastien Launay
      2. jackrabbit-1.4.x-mysql-engine-2008-04-28.patch
        16 kB
        Sébastien Launay
      3. jackrabbit-trunk-mysql-engine.patch
        17 kB
        Sébastien Launay
      4. jackrabbit-trunk-mysql-engine-2008-04-28.patch
        16 kB
        Sébastien Launay

        Activity

        Hide
        Sébastien Launay added a comment -

        The patches for this issue in the 1.4 branch and the trunk:

        • adding the mysqlEngine parameter for every MySQL aware database component
        • rewriting all mysql.ddl with an extra engine=$ {mysqlEngine}
        • add logging in debug level for seeing the SQL executed
        • use MyISAM by default if the parameter is not set for backward compatibility
        Show
        Sébastien Launay added a comment - The patches for this issue in the 1.4 branch and the trunk: adding the mysqlEngine parameter for every MySQL aware database component rewriting all mysql.ddl with an extra engine=$ {mysqlEngine} add logging in debug level for seeing the SQL executed use MyISAM by default if the parameter is not set for backward compatibility
        Hide
        Thomas Mueller added a comment -

        Hi,

        I'm not sure if you are aware of this, but you can change the default engine in my.cnf:

        default-table-type=NDBCLUSTER

        Regards,
        Thomas

        Show
        Thomas Mueller added a comment - Hi, I'm not sure if you are aware of this, but you can change the default engine in my.cnf: default-table-type=NDBCLUSTER Regards, Thomas
        Hide
        Sébastien Launay added a comment -

        Sure, but this setting is global, so we can not have a database with default tables
        to NDB and another with default to InnoDB.

        Moreover it's interesting to not touch the RDBM and having the tables created
        automatically in the wanted engine, especially for developers or for easier deployment.

        Show
        Sébastien Launay added a comment - Sure, but this setting is global, so we can not have a database with default tables to NDB and another with default to InnoDB. Moreover it's interesting to not touch the RDBM and having the tables created automatically in the wanted engine, especially for developers or for easier deployment.
        Hide
        Sébastien Launay added a comment -

        Update of patches with the following modification:

        • move mysqlEngine property from BundleFsPersistenceManager to MySqlPersistenceManager
        Show
        Sébastien Launay added a comment - Update of patches with the following modification: move mysqlEngine property from BundleFsPersistenceManager to MySqlPersistenceManager
        Hide
        Stefan Guggisberg added a comment -

        i'd rather provide a custom ddl on the classpath and refer to it in the configuration,
        e.g.

        <param name="schema" value="mysql-custom" />

        suggested on the user list:
        http://www.mail-archive.com/users@jackrabbit.apache.org/msg12089.html

        Show
        Stefan Guggisberg added a comment - i'd rather provide a custom ddl on the classpath and refer to it in the configuration, e.g. <param name="schema" value="mysql-custom" /> suggested on the user list: http://www.mail-archive.com/users@jackrabbit.apache.org/msg12089.html
        Hide
        Sébastien Launay added a comment -

        This will work but you need to duplicate the mysql.ddl and therefore maintain it on your own, even if there is a small chance it will change over time because it will imply a migration process.

        Another thing is that the default table engine is often MyISAM and this engine is not supported in a cluster config.
        Indeed, there will be no RDBMS locking involved when accessing the journal table and data integrity will not be enforced.

        Show
        Sébastien Launay added a comment - This will work but you need to duplicate the mysql.ddl and therefore maintain it on your own, even if there is a small chance it will change over time because it will imply a migration process. Another thing is that the default table engine is often MyISAM and this engine is not supported in a cluster config. Indeed, there will be no RDBMS locking involved when accessing the journal table and data integrity will not be enforced.
        Hide
        Stefan Guggisberg added a comment -

        > This will work but you need to duplicate the mysql.ddl and therefore maintain it on your own, even if there is a small chance it will change over time because it will imply a migration process.

        OTOH, IIUC with the proposed patch it's not possible anymore to implicitly use the default engine, e.g. overriden in my.cnf.

        > Another thing is that the default table engine is often MyISAM and this engine is not supported in a cluster config.
        > Indeed, there will be no RDBMS locking involved when accessing the journal table and data integrity will not be enforced.

        in which case you'd have to specify a different engine in my.cnf.

        Show
        Stefan Guggisberg added a comment - > This will work but you need to duplicate the mysql.ddl and therefore maintain it on your own, even if there is a small chance it will change over time because it will imply a migration process. OTOH, IIUC with the proposed patch it's not possible anymore to implicitly use the default engine, e.g. overriden in my.cnf. > Another thing is that the default table engine is often MyISAM and this engine is not supported in a cluster config. > Indeed, there will be no RDBMS locking involved when accessing the journal table and data integrity will not be enforced. in which case you'd have to specify a different engine in my.cnf.
        Hide
        Sébastien Launay added a comment -

        > OTOH, IIUC with the proposed patch it's not possible anymore to implicitly use the default engine, e.g. overriden in my.cnf.
        That's right but the patch can be adapted to use the default engine and use "engine=$

        {mysqlEngine}

        " only when engine property is set.

        > in which case you'd have to specify a different engine in my.cnf.
        This is a solution but i prefer to choose the engine when declaring the PersistenceManager (because i may want to use the different default engine everywhere else or i simply do not have the admin privilege to change this setting in my.cnf).

        Show
        Sébastien Launay added a comment - > OTOH, IIUC with the proposed patch it's not possible anymore to implicitly use the default engine, e.g. overriden in my.cnf. That's right but the patch can be adapted to use the default engine and use "engine=$ {mysqlEngine} " only when engine property is set. > in which case you'd have to specify a different engine in my.cnf. This is a solution but i prefer to choose the engine when declaring the PersistenceManager (because i may want to use the different default engine everywhere else or i simply do not have the admin privilege to change this setting in my.cnf).

          People

          • Assignee:
            Unassigned
            Reporter:
            Sébastien Launay
          • Votes:
            3 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:

              Development