PostgreSQL में UniProt का जैविक अनुक्रम


11

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;

आपके पास किस तरह का डेटा एक्सेस पैटर्न होगा? क्या सीक्वेंस के लिए डीएनए और प्रोटीन डेटा को एक ही समय में एक्सेस किया जाएगा? आप अनुक्रम के भीतर खोज करने की आवश्यकता होगी? क्या डेटा पहुंच एक समय में एकल पंक्तियों के लिए होगी या आप डेटा का स्कैन कर रहे होंगे? जिस तरह से आप डेटा एक्सेस कर रहे हैं, वह कई मायनों में डेटा से कहीं अधिक महत्वपूर्ण है।
यिर्मयाह पेशका

1
इस भागती हुई कौम से सलाह लेने से नहीं, बल्कि बायोइनफॉरमैटिक्स के सवाल के लिए, biostar.stackexchange.com के पास वह उत्तर हो सकता है जिसकी आपको तलाश है। उम्मीद है की वो मदद करदे!
गौरव

बायोस्टार के लिए +1 लेकिन मैं इस खोज को सख्ती से डीबी रख रहा हूं।
१०:५० बजे

@jcolebrand, यह ब्लास्ट से संबंधित है। हमारे पास एक एक्सपोर्ट फंक्शन है जो सीक्वेंस को FASTA फॉर्मेट में लिखता है और यह ब्लास्ट के लिए एक वैध इनपुट है। फिर ब्लास्ट अनुक्रमों के खिलाफ या एक बड़े डेटाबेस के खिलाफ उच्च-थ्रूपुट समानता खोज कर सकता है (लेकिन केवल यूनीप्रोट बड़ा हो सकता है तो यूनिपोर्ट)। हम अनुक्रमों के सेट से HMM का निर्माण भी करते हैं और समानता की खोज के लिए HMMER2 का उपयोग करते हैं।
हांग्जो लेवचुक

जवाबों:


7

PostBio में फंक्शन्स की खोज से ऐसा लगता है कि उनके पास एन्कोडिंग के कुछ तरीके हैं। हालांकि, यह देखते हुए कि उन एक्सटेंशन को खोज के लिए अनुकूलित किया गया है, वे केवल textडेटा प्रकार का उपयोग करके कई संदर्भ बनाते हैं ।

प्रलेखन के अनुसार :

लंबे तार स्वचालित रूप से सिस्टम द्वारा संपीड़ित होते हैं, इसलिए डिस्क पर भौतिक आवश्यकता कम हो सकती है। बहुत लंबे मान भी पृष्ठभूमि तालिकाओं में संग्रहीत किए जाते हैं ताकि वे छोटे स्तंभ मानों तक तेजी से पहुंच में हस्तक्षेप न करें। किसी भी मामले में, स्टोर किए जाने वाले सबसे लंबे समय तक संभव चरित्र स्ट्रिंग लगभग 1 जीबी है।

इसलिए, समर्पित हार्डवेयर पर अपने स्वयं के बहुत बड़े तालिकाओं में तालिका डालकर, आपके प्रदर्शन लक्ष्यों के लिए पर्याप्त होना चाहिए। यदि 1 जीबी आपके डेटा के लिए बहुत छोटा है, तो ProtBio से int_interval को उत्कृष्ट प्रदर्शन प्रदान करना चाहिए:

एक अनुक्रम सुविधा एक ट्रिपलेट (आईडी, ओरिएंट, ii) से मेल खाती है जहां आईडी एक अनुक्रम पहचानकर्ता है (संभवतः एक अनुक्रम तालिका के लिए प्राथमिक कुंजी), ओरिएंट एक बूलियन है जो इंगित करता है कि फीचर अनुक्रम के समान या विपरीत अभिविन्यास में है। और ii एक अंतरण के रूप में विशेषता का प्रतिनिधित्व करने वाला int_interval है।

अनुक्रम में संभावित लंबाई को देखते हुए, GU1 बनाने के लिए sha1 में अनुक्रम को एन्कोड करना एक बहुत ही दर्दनाक तरीका लगता है।

यदि अलग-अलग क्रम असंबंधित हैं, तो उन्हें अधिकतम प्रदर्शन के लिए अलग - अलग डिस्क पर अलग - अलग तालिकाओं पर संग्रहीत करें ।


1

मुझे लगता है कि 50 बिलियन कैरेक्टर संभवत: आपके रिकॉर्ड को किसी तरह से विभाजित किए बिना पोस्टग्रेक्यूएल के साथ क्या कर सकते हैं, की सीमा को धक्का देगा। मुझे संदेह है कि आपको किसी तरह से चीजों को तोड़ने का कोई तरीका खोजना होगा। मैं नहीं जानता कि किस तरह की एन्कोडिंग पोस्टबियो अनुमति देता है लेकिन ...।

यहां त्वरित गणना: 5 वर्ण 3 बिट्स को एनकोड करने के लिए पुनर्निर्मित करते हैं, लेकिन 4 बिट आसान खोज करेंगे क्योंकि दो वर्णों को बाइट द्वारा एन्कोड किया जा सकता है। दूसरी ओर 3 पर्याप्त हो सकता है यदि आप 10 या अधिक अक्षरों के समूहों की खोज कर रहे हैं क्योंकि आप प्रति 4 बाइट्स में 10 वर्ण कर सकते हैं। तो शॉर्ट स्ट्रिंग खोजों के लिए अनुकूलित, 50 बिलियन अक्षर लगभग 25 जीबी स्टोरेज लेता है, अच्छी तरह से परे कि आप एक कॉलम में क्या कर सकते हैं। संपीड़न मदद कर सकता है, लेकिन यह न्यूनतम संपीड़न बाइनरी प्रतिनिधित्व से परे एक विशाल संपीड़न पैमाने की आवश्यकता है1GB से नीचे जाने के लिए। लंबी खोजों के लिए अनुकूलित, हमें केवल 20GB मिलता है। इसलिए मुझे लगता है कि भले ही आपके पास आनुवंशिक जानकारी प्रकार हों, आप चीजों को तोड़ देंगे। उस जटिलता पर प्रोटीन एक चुनौती से भी अधिक होगा क्योंकि आप सबसे अच्छी उम्मीद कर सकते हैं 5 बिट संकेतन जिसका अर्थ है कि आपके पास 6 प्रति 32 है, जिसका अर्थ है कि भंडारण के लिए आपका सबसे अच्छा मामला 30 जीबी प्रति कॉलम है। इसलिए जब तक आप संपीड़न प्राप्त कर सकते हैं तब तक मदद मिल सकती है, लेकिन इसके लिए एक बड़ी संपीड़न दर की आवश्यकता होती है। मैंने अच्छी संपीड़न दरों को देखा है, लेकिन ध्यान रखें कि आप इसे आगे बढ़ा सकते हैं।

इसलिए मेरी सिफारिश इस समस्या से अवगत है, और वास्तविक डेटा के साथ कुछ परीक्षण करें। कुछ मामलों में अपने रीडिंग को विघटित करने के लिए तैयार रहें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.