UniProt biyolojik dizilerini PostreSQL'de depolamanın en iyi yolu nedir?
Veri Detayları
- UniProt'tan 12 milyon dizi çekiyoruz - bu sayı her 3-10 ayda bir ikiye katlanıyor .
- Bir dizinin uzunluğu 10 ila 50 milyar karakter arasında değişebilir
- Dizilerin% 1'inden azı 10 bin karakterden uzun
- Uzun dizileri ayrı ayrı saklamak performansı artırabilir mi?
- Bir dizi, Protein veya DNA alfabesinden olabilir
- DNA alfabesinin 5 karakteri vardır (A, T, C, G veya -).
- Protein alfabesinde yaklaşık 30 karakter olacaktır.
- İki farklı alfabenin dizilerini farklı sütunlarda ve hatta farklı tablolarda saklamak önemli değildir. Bu yardımcı olur mu?
Veri Erişim Ayrıntıları
Jeremiah Peschka'nın yorumuna cevap vermek için:
- Protein ve DNA dizilerine farklı zamanlarda erişilecekti
- Dizi içinde arama yapmanıza gerek yoktur (db dışında yapılır)
- Eter her seferinde tek sıralara erişir veya kimlik gruplarına göre satır kümelerini çıkarır. Satırları taramamız gerekmeyecekti. Tüm sekanslara diğer tablolar tarafından atıfta bulunulur - veritabanında biyolojik ve kronolojik olarak anlamlı birkaç hiyerarşi bulunur.
Geriye Dönük Uyumluluk
Dizilere aşağıdaki karma işlevini (SEGUID - SEquence Globally Unique IDentifier) uygulayabilmeye devam etmek güzel olurdu .
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;