UniProtの生物学的シーケンスをPostreSQLに保存する最良の方法は何ですか?
データ詳細
- UniProtから1200万のシーケンスを取得します。この数は3〜10か月ごとに倍増する可能性があります。
- シーケンスの長さは100から500億文字までさまざまです
- シーケンスの1%未満が1万文字を超える
- 長いシーケンスを個別に保存するとパフォーマンスが向上しますか?
- シーケンスは、タンパク質またはDNAアルファベットのいずれかです。
- DNAアルファベットは5文字(A、T、C、G、または-)です。
- プロテインアルファベットは約30文字です。
- 2つの異なるアルファベットのシーケンスを別の列または別のテーブルに格納してもかまいません。それは役に立ちますか?
データアクセスの詳細
エレミヤ・ペシュカのコメントに答えるには:
- タンパク質とDNAシーケンスは異なる時間にアクセスされます
- シーケンス内を検索する必要はありません(それはdbの外で行われます)
- 一度に1つの行にアクセスするか、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;