2013-02-27 239 views
10

मैं लेनदेन समर्थन के साथ php का उपयोग कर फाइल सिस्टम ऑपरेशंस को कार्यान्वित करने के तरीकों की तलाश में हूं। जैसे कि मैं एक लेनदेन के अंदर कदम, प्रतिलिपि बनाने और हटाने जैसे संचालन कर रहा हूं, यदि उनमें से कोई विफल रहता है, तो स्क्रिप्ट को पहले से किए गए सभी कार्यों को वापस करने की आवश्यकता होती है। मैं अनजान हूं और मार्गदर्शन प्राप्त कर रहा हूं कि इसे कैसे प्राप्त किया जा सकता है। और यदि उपलब्ध पुस्तकालय या समाधान मौजूद हैं? अगर प्रश्न अस्पष्ट लगता है तो मैं क्षमा चाहता हूं।PHP के साथ लेनदेन में फाइल सिस्टम संचालन कैसे करें?

+0

शायद किसी ऑब्जेक्ट का उदाहरण बनाने के लिए सिंगलटन डिज़ाइन पैटर्न का उपयोग करें जो संसाधित और पूर्ण घटनाओं की एक सूची बनाता है और एक एल्गोरिदम जो इनमें से प्रत्येक का उलटा होगा (उदाहरण के लिए <-> से स्थिति में स्विच करें)। यदि यह किसी भी कारण से विफल रहता है तो उस उदाहरण को निष्पादित करें जो सभी परिवर्तनों को उलट देगा। – MaxSan

उत्तर

2

फाइल सिस्टम - डेटाबेस प्रबंधन प्रणालियों के विपरीत - लेनदेन का समर्थन नहीं करते हैं। हालांकि कुछ लेनदेन को लागू करने के लिए आपको आवश्यक चीजें प्रदान करते हैं; वह लॉकिंग और लॉगिंग है। लॉगिंग आपकी समस्या नहीं होगी क्योंकि आप इसे php में भी कर सकते हैं, लेकिन आपको फाइल सिस्टम की आवश्यकता होगी जो फाइल लॉक प्रदान करता है।

मैं आपको सलाह देता हूं कि आप इस तरह कुछ भी लागू न करें - आपको कई समस्याएं आ सकती हैं। डेटाबेस लोग यहां दशकों के शोध इतिहास पर वापस देख रहे हैं।

लेकिन यदि आपको करना है, तो आप Two-phase locking जैसे php में कुछ लागू कर सकते हैं। इसके अलावा, आप command pattern का उपयोग करने पर विचार कर सकते हैं, जो आपके रोलबैक के लिए पूर्ववत कार्यक्षमता में मदद करता है।

3

एक विकल्प फाइलों के बजाए डेटाबेस में बीएलओबी के रूप में अपनी फ़ाइलों को संग्रहीत करने पर विचार करना है। ये लेनदेन, और आपके डेटाबेस की सभी अन्य सुविधाओं का समर्थन करेंगे।

उन्नत फाइल सिस्टम जैसे ZFS पर लेनदेन का समर्थन करना संभव है, लेकिन सीधे PHP के साथ नहीं, और जेएफएस डिफ़ॉल्ट रूप से लिनक्स पर स्थापित नहीं है।

3

इसके लिए सबसे आम पैटर्न कहीं और सब कुछ कॉपी कर रहा है, प्रतिलिपि पर काम करें और अगर सब ठीक हो जाए तो मूल को प्रतिस्थापित करें।

कुछ मुझे बताता है कि PHP स्ट्रीम रैपर भी इसके लिए उपयोगी हो सकते हैं। 'फ़ाइल: //' प्रोटोकॉल को ओवरराइड करना और वर्चुअल फाइल सिस्टम (अवधारणा का सबूत: https://github.com/Respect/Test#streamwrapper) में काम करना संभव है।