Qual è il modo migliore per archiviare sequenze biologiche UniProt in PostreSQL?
Dettagli dei dati
- Prendiamo 12 milioni di sequenze da UniProt - questo numero probabilmente raddoppierà ogni 3-10 mesi.
- La lunghezza di una sequenza può variare da 10 a 50 miliardi di caratteri
- Meno dell'1% delle sequenze sono più lunghe di 10 mila caratteri
- Migliorerebbe le prestazioni per memorizzare separatamente le sequenze più lunghe?
- Una sequenza può essere di alfabeto proteico o DNA
- L'alfabeto DNA ha 5 caratteri (A, T, C, G o -).
- L'alfabeto proteico avrà circa 30 caratteri.
- Non ci importa di memorizzare le sequenze dei due diversi alfabeti in colonne diverse o persino in tabelle diverse. Sarebbe d'aiuto?
Dettagli di accesso ai dati
Per rispondere al commento di Geremia Peschka:
- Le sequenze di proteine e DNA sarebbero accessibili in momenti diversi
- Non sarebbe necessario effettuare una ricerca all'interno della sequenza (eseguita al di fuori di db)
- Eterebbe l'accesso a singole file alla volta o estrarrebbe gruppi di righe per ID. Non avremmo bisogno di scansionare le righe. Tutte le sequenze sono referenziate da altre tabelle - esistono diverse gerarchie biologicamente e cronologicamente significative nel database.
Compatibilità con le versioni precedenti
Sarebbe bello poter continuare ad applicare le seguenti funzioni di hashing (SEGUID - SEquence Globally Unique IDentifier) alle sequenze.
CREATE OR REPLACE FUNCTION gfam.get_seguid(p_sequence character varying)
RETURNS character varying AS
$BODY$
declare
result varchar := null;
x integer;
begin
select encode(gfam.digest(p_sequence, 'sha1'), 'base64')
into result;
x := length(result);
if substring(result from x for 1) = '=' then
result := substring( result from 1 for x-1 );
end if;
return result;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;