Re: Talking to multiple database types with Cayenne.

From: Michael Shea (mik..itido.com)
Date: Tue Oct 21 2008 - 11:07:41 EDT

  • Next message: Michael Gentry: "Re: Talking to multiple database types with Cayenne."

    Does getting the primary keys via the Statement.getGeneratedKeys()
    require an extra round-trip to the database? If not, I would think it
    wouldn't generate very much overhead, since I'm already sending a
    statement to the database, and receiving a response. Otherwise, yes, I
    can definitely see how it would be more efficient to batch primary keys.

    Questions about Cayenne's primary key batching: Is this done globally,
    across contexts? Or would each DataContext instance manage its own batch
    of keys to use?

    Thanks,

    Shea.

    > Interestingly, using autoincrement in mysql is probably a /hit/ in
    > performance, compared to the default strategy. Cayenne has to ask
    > mysql what the id was after every insert.
    > In the default PK generation scheme, cayenne manages the ids. Hence,
    > cayenne can batch ids and not have to talk to the db about every pk
    > for every object.
    >
    > Robert
    >
    > On Oct 21, 2008, at 10/219:12 AM , Michael Shea wrote:
    >
    >> Hi Andrus,
    >>
    >> Thanks for your reply... Of course, this is almost exactly what
    >> Cayenne is for. I erred in the question I was asking, unfortunately,
    >> so I will ask it properly this time... =). I really just have a minor
    >> question to ask:
    >>
    >> My two database schemas are *almost* identical, but not quite. The
    >> MySQL database creates primary keys on certain tables by using an
    >> AUTOINCREMENT column. The Oracle database creates primary keys on the
    >> equivalent tables by using a custom sequence. Is there any way for me
    >> to change the primary key generation strategy depending on which DBMS
    >> is in use? Or will I have to choose a strategy that works equally on
    >> both Oracle and on MySQL (ie, switch to using the default strategy?).
    >>
    >> I would ideally like to continue using the auto-increment columns on
    >> MySQL, since that intuitively seems like the most efficient method to
    >> me. I have experimented with customizing the mapping.xml file at
    >> runtime based on which type of database I'll be using, before making
    >> any calls to cayenne, that seems to work. But it's also pretty hacky,
    >> and will make maintenance more painful.
    >>
    >> Thanks,
    >>
    >>
    >> Mike Shea.
    >>
    >>
    >>> Hi Michael,
    >>>
    >>> Cayenne will detect the database type automatically on startup and
    >>> use the right adapter. So yes, use JNDI to abstract connection
    >>> information, beyond that no need for any extra tricks. You generic
    >>> Cayenne mapping will just work regardless of the db type.
    >>>
    >>> Andrus
    >>>
    >>>
    >>>
    >>> On Oct 20, 2008, at 11:42 AM, Michael Shea wrote:
    >>>
    >>>> Hi guys,
    >>>>
    >>>> I am working on a project in which I have to support multiple
    >>>> database types. They do not have to be supported simultaneously - I
    >>>> need my program to be able to run whether I am using an Oracle
    >>>> database or a MySQL database (the databases will have the same
    >>>> schema), but the database type does not change at runtime.
    >>>>
    >>>> I am wondering if there are any best practices or recommendations
    >>>> for how to approach this problem. Currently, I am planning on
    >>>> simply creating two sets of cayenne configuration files in
    >>>> different directories (ie, a map.xml and a cayenne.xml file), and
    >>>> just adding one or the other of these directories to the classpath,
    >>>> depending on some initial configuration parameters that tell me
    >>>> what type of database I'm accessing. The datasource is defined via
    >>>> JNDI.
    >>>>
    >>>> Does anyone think that this is a good idea or a bad idea, or have a
    >>>> better way of doing this? =) I am using Cayenne 2.0.4.
    >>>>
    >>>> Thanks!
    >>>>
    >>>>
    >>>> Mike Shea.
    >>>>
    >>>
    >>
    >



    This archive was generated by hypermail 2.0.0 : Tue Oct 21 2008 - 11:08:09 EDT