Was ist der beste Weg, um biologische UniProt-Sequenzen in PostreSQL zu speichern?
Datendetails
- Wir ziehen 12 Millionen Sequenzen von UniProt ein - diese Zahl wird sich wahrscheinlich alle 3-10 Monate verdoppeln.
- Die Länge einer Sequenz kann zwischen 10 und 50 Milliarden Zeichen variieren
- Weniger als 1% der Sequenzen sind länger als 10.000 Zeichen
- Würde es die Leistung verbessern, die längeren Sequenzen separat zu speichern?
- Eine Sequenz kann entweder ein Protein- oder ein DNA-Alphabet sein
- Das DNA-Alphabet besteht aus 5 Zeichen (A, T, C, G oder -).
- Das Protein-Alphabet hat ungefähr 30 Zeichen.
- Es macht uns nichts aus, die Sequenzen der beiden verschiedenen Alphabete in verschiedenen Spalten oder sogar verschiedenen Tabellen zu speichern. Würde das helfen?
Datenzugriffsdetails
Um den Kommentar von Jeremiah Peschka zu beantworten:
- Auf Protein- und DNA-Sequenzen würde zu unterschiedlichen Zeiten zugegriffen
- Müsste nicht innerhalb der Sequenz suchen (dies erfolgt außerhalb von db)
- Würde Äther auf einzelne Zeilen gleichzeitig zugreifen oder Sätze von Zeilen nach IDs herausziehen. Wir müssten keine Zeilen scannen. Alle Sequenzen werden von anderen Tabellen referenziert - in der Datenbank sind mehrere biologisch und chronologisch bedeutsame Hierarchien vorhanden.
Abwärtskompatibilität
Es wäre schön, weiterhin die folgende Hashing-Funktion (SEGUID - SEquence Globally Unique IDentifier) auf die Sequenzen anwenden zu können .
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;