[fpc-pascal]Databases and FPC

James Mills prologic at prologitech.com
Tue May 6 17:38:43 CEST 2003

On Mon, May 05, 2003 at 01:36:03PM +0200, Peter Brooks wrote:
> Use a KSAM/ISAM [Keyed/Indexed Sequential Access Method] file. They are much
> faster than databases, particularly relational ones and very easy to code
> up.
> All you need to do is make the size of the file around 40% bigger than you
> expect it ever to be (and if it gets up to 50% then rebuild an re-populate
> it) then produce a hash number from the names and write to that address. You
> have to have a good hash algorithm (tons about) and a policy for migrating
> secondaries but it is all fairly straightforward. If your records are large
> you might have two files, one for the keys and one for the data, then you
> don't even need a hash key, you just insert the names in batches (say each
> evening or every hour if it is really busy) where you re-sort the whole key
> file and add the items in alphabetical order, a quick sort [maybe literally
> if you like it] will yield the name and you simply add the records to the
> end of the other file.

This particular method you are talking about, KSAM/ISAM. Could you point
me to some usefull tutorials on the web that explain this fairly well in
programming terms (perhaps even in pascal) ?


> Another method sometimes used is to create an alphabetic directory
> hierarchy. Top level directories a,b,c...z and so on so that I would get the
> directory /p/e/t/e/r/ /b/r/o/o/k/s/ then you just put the records into files
> in the bottom directory - if there are duplicates then either ask a question
> to disambiguate them or require somebody to select another name. It is quite
> quick but relies on your having a disc volume that, on an unix system, has
> plenty of inodes and a small blocking factor - otherwise this is rather a
> wasteful option. It is dead simple to code though. The nice thing about this
> is that, if you have a half decent file system, you can allow arbitrary
> lengths of name and take case into account. Just remember that human beings
> are pretty bad at being able to type in even their own name twice without
> making a mistake. You can do some quite clever offering of alternatives with
> this system - if one letter is wrong there may only be a few directories
> that could fit, so, by doing a bit of tree walking you can offer a list of a
> few names that cope with simple spelling errors and transpositions.
> -----Original Message-----
> From: fpc-pascal-admin at lists.freepascal.org
> [mailto:fpc-pascal-admin at lists.freepascal.org] On Behalf Of James Mills
> Sent: 05 May 2003 12:59
> To: fpc-pascal at lists.freepascal.org
> Subject: [fpc-pascal]Databases and FPC
> Hi,
> I dunno if any of you have ever written an entire IRC Services in FPC
> before, but for the past few months I've been porting my 5 year old
> windows (delphi) version to linux.
> I'm wondering about databases however... The old windows version used to
> use a flat-file database to store nickname and channel registrations,
> the port I'm writing also uses the same thing. However this obviously
> will be slow if say an IRC network has 10,000 nicks/channels etc...
> Is there anything anyone would suggest I do ? I have only a couple of
> ideas, perhaps you might have a few more than I...
> cheers
> James
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal

More information about the fpc-pascal mailing list