Re: Using Random Sequence as Key

From: Vasilis Samoladas <vsam(at)cs(dot)utexas(dot)edu>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: Using Random Sequence as Key
Date: 2001-04-24 13:29:51
Message-ID: 9c3v4f$kus$1@crom.cs.utexas.edu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hello Bernardo,

there is a somewhat mathematical solution to your problem.
You can use a unique key, say 0<= k < MAX for each record,
and a second key which is computed from the first, say
f(k), which will give you a unique permutation of the
numbers 0,...,MAX-1. It will not be random, but it will
be hard for someone to figure out the original unique
key k, without knowning your method.

Here is one way to compute f(k): (math follows, beware!)

The Fibonacci numbers are a sequence defined as follows:
F(0) = 0, F(1) = 1, F(n+2) = F(n+1)+F(n) (for n>=0).

Now, for every fixed number N>=2, you can define
a permutation f(k) of the numbers 0,...,F(N)-1
as follows:
f(k) = (k*F(N-1)) mod F(N)

For example, if N=6, we have F(6)=8 and F(5)=5, so
for 0<= k <8, f(k) = 5*k mod 8 is a permutation.
In particular,
k = 0 1 2 3 4 5 6 7
f(k) = 0 5 2 7 4 1 6 3

So, since you need approximately 90000 numbers (10000 to 99999),
you can use N=25, which will give you F(25)=75025 and F(24)=46368.
Thus, you can have 75025 (slightly fewer than 90000) unique values,
by translating k into
f(k) = 46368*k mod 75025

Unless your users know number theory, this should work for you.

Vasilis

Bernardo de Barros Franco <electric_csf(at)hotmail(dot)com> wrote:
: Hello, I was wondering if noone can help me maybe someone could at least
: give me some directions where to look for info or where to ask:
: I wanted to index a table by a random key. Exemplifying, when a insert is
: made, the id value is automatically filled with a random number between
: 10000 and 99999. I'm pretty new in pgsql so I could use a howto or
: something, and I repeat, if you don't know how, directions to where I can
: find info on that or where I can ask someone that might know would be
: enough.

: Thank you

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message J.Fernando Moyano 2001-04-24 16:18:06 Table corrupted and data lost (second time in one month!!)
Previous Message Francis Solomon 2001-04-24 11:54:33 RE: Timezone conversion