Який найкращий спосіб зберігати біологічні послідовності UniProt в PostreSQL?
Деталі даних
- Ми витягуємо 12 мільйонів послідовностей від UniProt - це число, ймовірно, подвоюється кожні 3-10 місяців.
- Довжина послідовності може варіюватися від 10 до 50 мільярдів символів
- Менш ніж 1% послідовностей є довшими, ніж 10 тис. Символів
- Чи поліпшить це ефективність, щоб зберігати довші послідовності окремо?
- Послідовність може бути алфавітом протеїну або ДНК
- Алфавіт ДНК має 5 символів (A, T, C, G або -).
- Алфавіт білка матиме близько 30 символів.
- Ми не проти зберігати послідовності двох різних алфавітів у різних стовпцях чи навіть різних таблицях. Чи допомогло б це?
Деталі доступу до даних
Щоб відповісти на коментар Єремії Пешка:
- Білкові та ДНК-послідовності отримували б доступ у різний час
- Не потрібно шукати в послідовності (це робиться поза db)
- Був би доступ до ефіру одночасно або витягував набори рядків за ідентифікаторами. Нам не потрібно сканувати рядки. Усі послідовності посилаються на інші таблиці - у базі даних існує декілька біологічно та хронологічно значущих ієрархій.
Зворотна сумісність
Було б непогано мати можливість продовжувати застосовувати наступну функцію хешування (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;