PostreSQL में UniProt जैविक दृश्यों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?
डेटा विवरण
- हम यूनीप्रोट से 12 मिलियन दृश्यों में खींचते हैं - यह संख्या हर 3-10 महीने में दोगुनी होने की संभावना है।
- एक अनुक्रम की लंबाई 10 से 50 बिलियन अक्षरों से भिन्न हो सकती है
- 1% से कम अनुक्रम 10 हजार वर्णों से अधिक लंबे होते हैं
- क्या यह लंबे अनुक्रमों को अलग से संग्रहीत करने के लिए प्रदर्शन में सुधार करेगा?
- एक अनुक्रम प्रोटीन या डीएनए वर्णमाला का हो सकता है
- डीएनए वर्णमाला में 5 अक्षर (A, T, C, G, या -) हैं।
- प्रोटीन वर्णमाला में लगभग 30 वर्ण होंगे।
- हम दो अलग-अलग स्तंभों या अलग-अलग तालिकाओं में दो अलग-अलग वर्णमाला के क्रमों को संचय करने से भी गुरेज नहीं करते हैं। क्या वह मदद करेगा?
डेटा एक्सेस विवरण
यिर्मयाह पेशाका की टिप्पणी का जवाब देने के लिए:
- प्रोटीन और डीएनए अनुक्रमों को अलग-अलग समय पर एक्सेस किया जाएगा
- अनुक्रम के भीतर खोज करने की आवश्यकता नहीं होगी (यह db के बाहर किया गया है)
- एक बार में एकल पंक्तियों तक पहुँचना या आईडी द्वारा पंक्तियों के सेट को बाहर निकालना होगा। हमें पंक्तियों को स्कैन करने की आवश्यकता नहीं होगी। सभी अनुक्रमों को अन्य तालिकाओं द्वारा संदर्भित किया जाता है - कई जैविक और कालानुक्रमिक अर्थपूर्ण पदानुक्रम डेटाबेस में मौजूद हैं।
पिछेड़ी संगतता
अनुक्रमों के लिए निम्नलिखित हैशिंग फ़ंक्शन (SEGUID - अनुक्रम ग्लोबली यूनिक आइडेंटिफ़ायर) लागू करने में सक्षम होना जारी रखने के लिए अच्छा होगा ।
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;