Platform - MySQL Database System

Platform Specifications

We chose MySQL as our database management system. Furthermore, we all have accounts on a Sun, and have set up the database system there. The idea is to make and test the database on the Sun, then port it over to wherever the user would like us to, provided it is somewhere on the research Suns.

For database management software, we use MySQL, a free SQL (Structured Query Language) server/database program. This program has several advantages. One is that it is extraordinarily portable. There are versions that run on NT, Linux, Solaris, *BSD, and others. This is a good thing, as our client uses a Sun as their primary platform, and it would be desired to have the database on the same platform as the program it is designed to run with.

MySQL is also a familiar interface. There is an API for every platform mentioned elsewhere, it is primarily programmable in C/C++, and is not hard to understand. The database software created as part of this project will run on any platform supports MySQL.

MySQL satisfies all our requirements for a database program save one -- it cannot use arrays as data structures in the tables, so far as we have seen. However, it can create tables on the fly, can store arbitrary-sized strings, can be accessed remotely easily, and has reasonably decent data storage size.

Finally, several people in the department have knowledge of MySQL, including our esteemed TA, Ryan Satogata. Thus support for the DBMS is available.

There are other requirements for software on the front end of the system. One module that must be constructed is the script that takes the text output of the invariant program and transforms it into something our database can understand. We use the scripting language Perl.

Hardware specifications are as follows: A Sun machine, running OS 5.0 or greater. Both the development machine and the target machine both have these traits.

UNIX Database Packages

A number of database packages were considered in addition to MySQL. Here is information on MySQL and the alternatives.

These are three open source DB packages we have heard the most about. All of them have C API's (and probably Perl too), and are free for us on UNIX platforms (probably under Windows too). Most likely all would have the capabilities we'd need. We couldn't find info on the max size of a table in PostgreSQL, probably not less than 4GB. (Note that for MySQL and MiniSQL 4GB is the max size for each table, not the entire database.)

MySQL
http://www.tcx.se/
platforms:
      AIX 4.x with native threads 
      BSDI 2.x with the included MIT-pthreads package 
      BSDI 3.0, 3.1 and 4.x with native threads 
      DEC UNIX 4.x with native threads 
      FreeBSD 2.x with the included MIT-pthreads package 
      FreeBSD 3.x with native threads 
      HP-UX 10.20 with the included MIT-pthreads package 
      HP-UX 11.x with the native threads. 
      Linux 2.0+ with LinuxThreads 0.7.1 or glibc 2.0.7 
      NetBSD 1.3 Intel and NetBSD 1.3 Alpha 
      OpenBSD 2.x with the included MIT-pthreads package 
      OS/2 Warp 3, FixPack 29 and OS/2 Warp 4, FixPack 4 
      SGI Irix 6.x with native threads 
      Solaris 2.5, 2.6 and 2.7 with native threads on SPARC and x86 
      SunOS 4.x with the included MIT-pthreads package 
      SCO OpenServer with a recent port of the FSU Pthreads package 
      SCO UnixWare 7.0.1 
      Tru64 Unix 
      Win95, Win98 and NT

How big MySQL tables can be
  MySQL itself has a 4G limit on table size, and operating systems have
  their own file size limits.


MiniSQL
http://www.hughes.com.au/
platforms:
	SQL has been developed under Sun OS 4.1.1 but has been tested under
	Solaris 2.x (release 2.3, 2.4 and 2.5), Ultrix 4.3, Linux, and OSF/1
	(cc not gcc). That said, it should "autoconf" and build on
	most BSD derived systems, SVR4 based systems or POSIX O/S`s (that
	should cover most of them). It has been reported that it works
	out-of-the-box on HP-UX, NeXT, SCO, Sequent, Cray, Tandem, *BSD and a
	few others.
	Both mSQL version 1.x and 2.x have been ported to a few other
	operating systems - namely MS Windows, MS Windows 95, MS Windows NT
	and OS/2. For more details on these ports and any other ports, please
	see the "Contributed Code and Third Party Applications" section of
	this FAQ.

How much data can mSQL address?
  mSQL can theoretically address tables with a maximum size of 4
  gigabytes. In practice you`ll probably run up against operating system
  limitations well before this theoretical limit


PostgreSQL
http://postgresql.nextpath.com/
platforms:
OS             Processor     Version  Reported     Remarks
AIX 4.2.1      RS6000        v6.4.2     1998-10-27   (Andreas Zeugswetter)
BSDI           x86           v6.4.2     1998-10-25   (Bruce Momjian
FreeBSD        x86           v6.4.2     1998-10-26   (Tatsuo Ishii, Marc 
2.2.x-3.x                                          Fournier)
DGUX 5.4R4.11  m88k          v6.3     1998-03-01   v6.4.2 probably OK. Needs 
                                                   new maintainer. (Brian E 
                                                   Gallew)
Digital Unix   Alpha         v6.4.2     1998-10-29   Minor patchable problems 
4.0                                                (Pedro J. Lobo)
HPUX           PA-RISC       v6.4.2     1998-10-25   Both 9.0x and 10.20 
                                                   (Tom Lane, Stan Brown)
IRIX 6.x       MIPS          v6.3     1998-03-01   5.x is different (Andrew 
                                                   Martin)
linux 2.0.x    Alpha         v6.3.2   1998-04-16   Mostly successful. Needs 
                                                   work for v6.4.2. (Ryan 
                                                   Kirkpatrick)
linux 2.0.x    x86           v6.4.2     1998-10-27   (Thomas Lockhart)
linux          x86           v6.4.2     1998-10-25   (Oliver Elphick, Taral)
2.0.x/glibc2
linux 2.0.x    Sparc         v6.4.2     1998-10-25   (Tom Szybist)
linuxPPC       PPC603e       v6.4.2     1998-10-26   Powerbook 2400c (Tatsuo 
2.1.24                                             Ishii)
mklinux DR3    PPC750        v6.4.2     1998-09-16   PowerMac 7600 (Tatsuo 
                                                   Ishii)
NetBSD/i386    x86           v6.4.2     1998-10-25   (Brook Milligan)
1.3.2
NetBSD-        NS32532       v6.4.2     1998-10-27   (small problems in 
current                                            date/time math 
                                                   (Jon Buller)
NetBSD/sparc   Sparc         v6.4.2     1998-10-27   (Tom I Helbekkmo)
1.3H
NetBSD 1.3     VAX           v6.3     1998-03-01   (Tom I Helbekkmo)
SCO UnixWare   x86           v6.3     1998-03-01   aka UNIVEL (Billy G. 
2.x                                                Allie)
SCO UnixWare   x86           v6.4.2     1998-10-04   (Billy G. Allie)
7
Solaris        x86           v6.4.2     1998-10-28   (Marc Fournier)
Solaris        Sparc         v6.4.2     1998-10-28   (Tom Szybist, Frank 
2.6-2.7                                            Ridderbusch)
SunOS 4.1.4    Sparc         v6.3     1998-03-01   patches submitted (Tatsuo 
                                                   Ishii)
SVR4           MIPS          v6.4.2     1998-10-28   no 64-bit int support 
                                                   (Frank Ridderbusch)
SVR4 4.4       m88k          v6.2.1   1998-03-01   confirmed with patching 
                                                   (Doug Winterburn)
Windows NT     x86           v6.4.2     1998-10-08   Mostly working with the 
                                                   Cygwin library. No DLLs 
                                                   yet. (Horak Daniel) 

MySQL Installation

MySQL was pretty simple to install, configure, and use. A sample C program was written to test some of the basic features.

MySQL doesn't support arrays of numbers as a datatype that a field can store, it does support arbitrarily large character strings so we could probably easily convert a string to an array of integers by treating it as a bit stream. Although -- we think in the past we've run into problems with the high-order bit being lost in the conversion to char, so it may not be that simple. On the other hand, we can create tables on the fly (we little test program does that) and we think that would be a fairly decent solution to the problem.

MySQL on UNIX was chosen for the following reasons:

  • The Daikon research uses UNIX.
  • MySQL is very portable.
  • MySQL can handle large amounts of data efficiently.
  • MySQL has API's for C, Perl, Java, and... Python!
    Additionally, it is easy for us to access and coordinate under UNIX since it is available anywhere we have access to the Internet, and we have tools like RCS to keep track of revisions and who is modifying what.

An Email from Gabriel

Date: Tue, 20 Apr 1999 19:33:23 -0700
From: Gabriel Deal 
Subject: Re: MySQL

   I ended up installing MySQL on my C&C account -- and I didn't need
supervisor permissions.   I'm pretty sure I would be able to install
it on any UNIX machine with gcc 2.8.x and also on a lot of standard
platforms like Solaris 2.5.1+ and Linux (MySQL has binary
distributions available for these platforms).   I can't install it on
sanjuan or orcas.

   That *was* C I was programming with, MySQL just provides some
header files and libraries that we can use in C to communicate with
it.   In fact, now that I think about it, you ought to be able to
develop under NT with the exact same API if you like, you'd only have
to install those libraries and header files on the NT machine and
then communicate with the UNIX host.   I'm running MySQL server on
dante20.u right now, and I just ran my little C program on dante21.u
(a completely different machine) and it worked fine.   All I had to do
was modify my program to access "dante20.u" instead of "localhost" and
it worked like a charm. 

   If we go with MySQL and UNIX, I'd suggest we try to get accounts on
Michael's machine since then we'd know for sure our code will 
work where it's the most needed. 

gabriel

URL's for MySQL Information

Here are some web pages that are worth looking over.

http://www.tcx.se/
The MySQL home page.

http://www.tcx.se/Manual_chapter/manual_toc.html
A reference manual that probably has more than we care about, and much of what we do care about is not covered in depth. But it would be a good idea to scan the index and check out what looks interesting.

http://www.devshed.com/Server_Side/MySQL/
A really simple tutorial covering the use of MySQL on the command line and the database administration basics.

http://www.turbolift.com/mysql/3.21_C_API/toc.html
A short tutorial covering the C API of the previous MySQL version (so it may be a bit out of date). Don't be put off by the fact that the introduction is pretty much non-existent.

SQL Information

http://www.geocities.com/ResearchTriangle/Node/9672/sqltut.html
is a helpful tutorial on Structure Query Language (SQL)in general.


Webmaster:   

Patrick Snyder
Last modified: 6/8/99
This file: mysql.htm

Back to top