Apa cara terbaik untuk menyimpan urutan biologis UniProt di PostreSQL?
Detail Data
- Kami menarik 12 juta sekuens dari UniProt - jumlah ini kemungkinan akan berlipat ganda setiap 3-10 bulan.
- Panjang urutan dapat bervariasi dari 10 hingga 50 miliar karakter
- Kurang dari 1% dari urutan lebih panjang dari 10 ribu karakter
- Apakah akan meningkatkan kinerja untuk menyimpan urutan yang lebih lama secara terpisah?
- Urutan dapat berupa Protein atau alfabet DNA
- Alfabet DNA memiliki 5 karakter (A, T, C, G, atau -).
- Alfabet Protein akan memiliki sekitar 30 karakter.
- Kami tidak keberatan menyimpan urutan dua huruf yang berbeda di kolom yang berbeda atau bahkan tabel yang berbeda. Apakah itu membantu?
Detail Akses Data
Untuk menjawab komentar Jeremiah Peschka:
- Urutan protein dan DNA akan diakses pada waktu yang berbeda
- Tidak perlu mencari dalam urutan (yang dilakukan di luar db)
- Apakah akan mengakses baris tunggal pada satu waktu atau menarik set baris dengan ID. Kami tidak perlu memindai baris. Semua urutan dirujuk oleh tabel lain - beberapa hierarki bermakna secara biologis dan kronologis ada di database.
Kompatibilitas Mundur
Alangkah baiknya untuk dapat terus dapat menerapkan fungsi hashing berikut (SEGUID - SEquence Globally Unique IDentifier) ke urutan.
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;