Re: Confusion about database updates

From: Glacial Spain (glacialspain.NOTTHIS_at_0RTH1Scomcast.net)
Date: 04/13/04

  • Next message: vivienne wykes: "long order_id = ((org.gjt.mm.mysql.PreparedStatement)statement).getLastInsertID();"
    Date: Tue, 13 Apr 2004 15:02:44 GMT
    
    

    Instead of simply auto-generating the new record ID, can you can use a
    client ID as part of the new record ID?

    Jim dJ

    On Mon, 12 Apr 2004 19:22:17 +0300, Burhan Khalid
    <newsgroups@meidomus[dot]com> wrote:

    >David Harper wrote:
    >> Burhan Khalid wrote:
    >>
    >>> Greetings:
    >>>
    >>> I'm developing an application that will be running on many different
    >>> clients, all connecting to the same database server (MySQL).
    >>
    >>
    >> That sounds good. MySQL can easily handle many simultaneous clients. I'm
    >> currently running speed/resilience tests where eight nodes of an HP
    >> AlphaCluster all open multiple connections to a MySQL server running on
    >> a Pentium/Linux box and collectively throw about 2 gigabytes of data at
    >> it. The server barely breaks into a sweat, and even with a somewhat
    >> complicated set of tables, it loads the data in under an hour.
    >>
    >>> I have a few concerns about updating databases. Currently, when a
    >>> new record is inserted, a unique id, which is auto-updated is
    >>> generated in the database. This works well, since there is very little
    >>> possiblity of two or more clients submitting a request at the same
    >>> point in time.
    >>
    >>
    >> I'm assuming that when you say "a unique id, which is auto-updated", you
    >> actually mean that you've defined primary key with the auto_increment
    >> qualifier. In this case, MySQL will allocate each new record an ID that
    >> is unique within the table. Your clients can retrieve the value of the
    >> ID using the getGeneratedKeys method of the java.sql.Statement which
    >> executed the insert operation.
    >>
    >>> The problem occurs when connection to the database server is lost.
    >>> In this situation, the application should still continue to work in
    >>> offline" mode, using either an internal database (hsqldb) or writing
    >>> to a XML file. I have not decided what yet. Now when the connection
    >>> to the database server is restored, how would I update the "main"
    >>> database server with records from each client?
    >>
    >> >
    >>
    >>> Consider the following scenario :
    >>>
    >>> User A and User B are both connected to the database server, and the
    >>> current record id is 200. Now the database connection is lost. Both
    >>> User A and User B create a new record (internally). Both now are on
    >>> record id 201. When the database connection is restored, how would I
    >>> insert the records of both clients into the database? There cannot be
    >>> two records with the same primary key of 201.
    >>
    >>
    >> The answer is *not* to allocate an ID to the records that you are
    >> storing internally. Let the MySQL server do that when your client
    >> application manages to re-establish a connection.
    >
    >I considered this option. The problem here is that the primary key,
    >which is auto incremented, is part of the printed record for each
    >transcation.
    >
    >Consider an invoicing application. The primary key would be the invoice
    >number. So when a customer requests a printed invoice, we have to
    >generate an invoice number. It wouldn't be practical to not print the
    >invoice at the time of purchase, nevermind the state of the connection
    >between the client application and the database server.
    >
    >>
    >> After all, unless I've misunderstood you, User A and User B won't be
    >> aware of one another's records until both client programs are able to
    >> re-connect to the MySQL server and insert the records that they have
    >> been keeping "on hold". The database is the only way for one user to
    >> know *anything* about the data that other users are holding.
    >>
    >> But taking a broader view, you have to ask yourself what scenarios are
    >> likely to lead to your client programs losing their connection to the
    >> database server?
    >>
    >> The MySQL server itself could crash, though this is *very* unlikely.
    >> Speaking from personal experience, I've run MySQL servers for nine
    >> months at a stretch, and only had to shut them down because our sysops
    >> wanted to upgrade the operating system on the host machine.
    >>
    >> The client program could crash, but in that case you don't have time to
    >> write the unsaved records to an XML file or alternate database anyhow!
    >>
    >> You could lose the network connection between the client program and the
    >> MySQL server. Is your application running on a corporate intranet? Or
    >> across the global Internet? [And do you have crazed back-hoe operators
    >> in your neighbourhood? ;-)] In this case, both the MySQL server and the
    >> client program are still running, so you *can* write the unsaved records
    >> to an alternate datastore.
    >
    >The reason I am worried about connectivity is because the database
    >server is located offsite in a datacenter, accessible via the internet
    >only. I would hate to rely on the internet connection to be constantly on.
    >
    >I considered the possibility of having a local database server. The
    >issue here is that there are two separate office locations that will be
    >needing access to the application. In addition, the application will
    >also be used by the sales force when visiting client sites. The
    >solution for the sales force is simple enough -- a web interface that
    >links with the same java "code base". However, the same issue with
    >connectivity remains with the two remote offices.
    >
    >Thank you for your suggestions though, I appreciate your time :)
    >
    >>
    >> David Harper
    >> Cambridge, England
    >>


  • Next message: vivienne wykes: "long order_id = ((org.gjt.mm.mysql.PreparedStatement)statement).getLastInsertID();"

    Relevant Pages

    • Re: .Net Scalability problem
      ... LoadRunner will peak out a server with a few virtual users. ... To get an idea of load, ... Fire off the test client and watch the number of ... > So I think that the MTC generate concurrent connection and per ...
      (microsoft.public.dotnet.framework.adonet)
    • Re: Connection lost at same time every hour (sometimes)
      ... After making the two following alterations on the server the problem seems ... After analyze your ipconfig on SBS and client, ... Then, other connection is good, ...
      (microsoft.public.windows.server.sbs)
    • Re: server disconnection - very often
      ... Reason of permanent popups is VMware server aplication on clients. ... Run CEICW to configure the network of SBS: ... Two network adapters - manual router connection to broadband ... Uninstall VMware on client. ...
      (microsoft.public.windows.server.sbs)
    • Re: Lan setup 2 nic
      ... The external nic only has TCP/IP enabled. ... Ipconfig of the server is looking good, but the client is still missing the ... > connection so we have a 2 nic with router setup now. ...
      (microsoft.public.windows.server.sbs)
    • Re: Regular disconnections from remote web workplace
      ... I can connect to office server and all office clients from home at all times ... be physically working right up until the connection is lost. ... If I enter http://companyip from a client I receive the login screen for the ... Click Services tab and select Hide All Microsoft Services and Disable ...
      (microsoft.public.windows.server.sbs)