<html><body>Use a KSAM/ISAM [Keyed/Indexed Sequential Access Method] file. They are much<br>faster than databases, particularly relational ones and very easy to code<br>up.<br><br>All you need to do is make the size of the file around 40% bigger than you<br>expect it ever to be (and if it gets up to 50% then rebuild an re-populate<br>it) then produce a hash number from the names and write to that address. You<br>have to have a good hash algorithm (tons about) and a policy for migrating<br>secondaries but it is all fairly straightforward. If your records are large<br>you might have two files, one for the keys and one for the data, then you<br>don't even need a hash key, you just insert the names in batches (say each<br>evening or every hour if it is really busy) where you re-sort the whole key<br>file and add the items in alphabetical order, a quick sort [maybe literally<br>if you like it] will yield the name and you simply add the records to the<br>end of the other file.<br><br>Another method sometimes used is to create an alphabetic directory<br>hierarchy. Top level directories a,b,c...z and so on so that I would get the<br>directory /p/e/t/e/r/ /b/r/o/o/k/s/ then you just put the records into files<br>in the bottom directory - if there are duplicates then either ask a question<br>to disambiguate them or require somebody to select another name. It is quite<br>quick but relies on your having a disc volume that, on an unix system, has<br>plenty of inodes and a small blocking factor - otherwise this is rather a<br>wasteful option. It is dead simple to code though. The nice thing about this<br>is that, if you have a half decent file system, you can allow arbitrary<br>lengths of name and take case into account. Just remember that human beings<br>are pretty bad at being able to type in even their own name twice without<br>making a mistake. You can do some quite clever offering of alternatives with<br>this system - if one letter is wrong there may only be a few directories<br>that could fit, so, by doing a bit of tree walking you can offer a list of a<br>few names that cope with simple spelling errors and transpositions.<br><br>-----Original Message-----<br>From: fpc-pascal-admin@lists.freepascal.org<br>[mailto:fpc-pascal-admin@lists.freepascal.org] On Behalf Of James Mills<br>Sent: 05 May 2003 12:59<br>To: fpc-pascal@lists.freepascal.org<br>Subject: [fpc-pascal]Databases and FPC<br><br>Hi,<br><br>I dunno if any of you have ever written an entire IRC Services in FPC<br>before, but for the past few months I've been porting my 5 year old<br>windows (delphi) version to linux.<br><br>I'm wondering about databases however... The old windows version used to<br>use a flat-file database to store nickname and channel registrations,<br>the port I'm writing also uses the same thing. However this obviously<br>will be slow if say an IRC network has 10,000 nicks/channels etc...<br><br>Is there anything anyone would suggest I do ? I have only a couple of<br>ideas, perhaps you might have a few more than I...<br><br>cheers<br>James<br>_______________________________________________<br>fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org<br>http://lists.freepascal.org/mailman/listinfo/fpc-pascal</body></html>