Cách tốt nhất để lưu trữ các chuỗi sinh học UniProt trong PostreSQL là gì?
Chi tiết dữ liệu
- Chúng tôi thu hút 12 triệu chuỗi từ UniProt - con số này có thể sẽ tăng gấp đôi sau mỗi 3-10 tháng.
- Độ dài của chuỗi có thể thay đổi từ 10 đến 50 tỷ ký tự
- Ít hơn 1% các chuỗi dài hơn 10 nghìn ký tự
- Nó sẽ cải thiện hiệu suất để lưu trữ các chuỗi dài hơn một cách riêng biệt?
- Một chuỗi có thể là bảng chữ cái Protein hoặc DNA
- Bảng chữ cái DNA có 5 ký tự (A, T, C, G hoặc -).
- Bảng chữ cái Protein sẽ có khoảng 30 ký tự.
- Chúng tôi không ngại lưu trữ các chuỗi của hai bảng chữ cái khác nhau trong các cột khác nhau hoặc thậm chí các bảng khác nhau. Điều đó có giúp được không?
Chi tiết truy cập dữ liệu
Để trả lời bình luận của Jeremiah Peschka:
- Trình tự protein và DNA sẽ được truy cập tại các thời điểm khác nhau
- Không cần tìm kiếm trong chuỗi (điều đó được thực hiện bên ngoài db)
- Ether sẽ truy cập các hàng đơn lẻ tại một thời điểm hoặc kéo ra các bộ hàng bằng ID. Chúng tôi không cần phải quét hàng. Tất cả các chuỗi được tham chiếu bởi các bảng khác - một số phân cấp có ý nghĩa về mặt sinh học và thời gian tồn tại trong cơ sở dữ liệu.
Khả năng tương thích ngược
Thật tuyệt khi có thể tiếp tục áp dụng chức năng băm sau (SEGUID - SEquence Globally Unique IDentifier) cho các chuỗi.
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;