(Lavoro su Heroku Postgres)
Usiamo gli UUID come chiavi primarie su alcuni sistemi e funziona benissimo.
Ti consiglio di usare uuid-ossp
estensione e persino postgres genera UUID per te:
heroku pg:psql
psql (9.1.4, server 9.1.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
dcvgo3fvfmbl44=> CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
dcvgo3fvfmbl44=> CREATE TABLE test (id uuid primary key default uuid_generate_v4(), name text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
dcvgo3fvfmbl44=> \d test
Table "public.test"
Column | Type | Modifiers
--------+------+-------------------------------------
id | uuid | not null default uuid_generate_v4() name | text |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
dcvgo3fvfmbl44=> insert into test (name) values ('hgmnz');
INSERT 0 1
dcvgo3fvfmbl44=> select * from test;
id | name
--------------------------------------+-------
e535d271-91be-4291-832f-f7883a2d374f | hgmnz
(1 row)
MODIFICA le implicazioni sulle prestazioni
Sarà sempre dipendono dal tuo carico di lavoro.
La chiave primaria intera ha il vantaggio della località in cui i dati simili sono più vicini. Questo può essere utile per es.:query di tipo intervallo come WHERE id between 1 and 10000
anche se la contesa di blocco è peggiore.
Se il tuo carico di lavoro di lettura è totalmente casuale in quanto esegui sempre ricerche di chiavi primarie, non dovrebbe esserci alcun degrado misurabile delle prestazioni:paghi solo per il tipo di dati più grande.
Scrivi molto su questo tavolo e questo tavolo è molto grande? È possibile, anche se non l'ho misurato, che ci siano implicazioni nel mantenere quell'indice. Per molti set di dati, tuttavia, gli UUID vanno bene e l'utilizzo degli UUID come identificatori ha alcune proprietà interessanti.
Infine, potrei non essere la persona più qualificata per discutere o consigliare su questo, poiché non ho mai gestito un tavolo abbastanza grande con un UUID PK in cui è diventato un problema. YMMV. (Detto questo, mi piacerebbe sentire parlare di persone che incontrano problemi con l'approccio!)