PostreSQL에 UniProt 생물학적 서열을 저장하는 가장 좋은 방법은 무엇입니까?
데이터 세부 사항
- UniProt 에서 1200 만 개의 시퀀스를 가져옵니다. 이 숫자는 3-10 개월마다 두 배가 될 것입니다.
- 시퀀스의 길이는 100 ~ 500 억 자로 다양
- 시퀀스의 1 % 미만이 1 만자를 초과합니다.
- 더 긴 시퀀스를 별도로 저장하는 성능이 향상됩니까?
- 서열은 단백질 또는 DNA 알파벳 일 수있다
- DNA 알파벳에는 5 자 (A, T, C, G 또는-)가 있습니다.
- 단백질 알파벳은 약 30 자입니다.
- 우리는 두 개의 다른 알파벳 순서를 다른 열이나 다른 테이블에 저장하는 것을 신경 쓰지 않습니다. 도움이 되겠습니까?
데이터 액세스 세부 사항
예레미야 페 쉬카의 의견에 대답하려면 :
- 단백질과 DNA 서열은 다른 시간에 접근
- 시퀀스 내에서 검색 할 필요가 없습니다 (db 외부에서 수행됨)
- ether가 한 번에 하나의 행에 액세스하거나 ID로 행 세트를 가져옵니다. 행을 스캔 할 필요는 없습니다. 모든 서열은 다른 표에 의해 참조된다-생물학적으로 그리고 시간적으로 의미있는 여러 계층이 데이터베이스에 존재한다.
이전 버전과의 호환성
시퀀스에 다음 해싱 함수 (SEGUID-SEquence Globally Unique IDentifier)를 계속 적용 할 수 있으면 좋을 것 입니다.
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;