2008-09-19 20 views
34

हास्केल का उपयोग कर डेटाबेस के साथ संवाद करने का सबसे अच्छा तरीका क्या है? मैं कुछ प्रकार के ओआरएम (डीजेगो के ओआरएम, हाइबरनेट, इत्यादि) का उपयोग करने के आदी हूं और HAppS के साथ ऐप्स बनाते समय कुछ अच्छा होगा।क्या हास्केल के लिए कोई ओआरएम उपकरण है?

संपादित करें: मैं पोस्टग्रेस्क्ल MySQL और SQLite से चुनने के लिए स्वतंत्र डेटाबेस तक जाने के लिए स्वतंत्र होना चाहता हूं।

उत्तर

13

मेरे पास दिमाग में लाइब्रेरी एक ओआरएम नहीं है, लेकिन यह अभी भी वही कर सकती है जो आप चाहते हैं।

यदि आप ऐसा कुछ चाहते हैं जो आपके प्रोग्राम को अच्छी तरह से अपने प्रोग्राम में एकीकृत करने के दौरान सुरक्षित बनाता है तो HaskellDB आज़माएं। यह मूल रूप से आपकी स्कीमा को देखता है, कुछ डेटा संरचनाएं उत्पन्न करता है, और फिर आपको क्वेरी करने के लिए सुरक्षित तरीके टाइप करता है। यह काफी समय से आसपास रहा है और समुदाय की राय यह है कि यह अच्छा और स्थिर है।

इसका उपयोग करने के लिए, आपको कुछ अंतर्निहित हास्केल डीबी लाइब्रेरी की आवश्यकता होगी जैसे एचएसक्यूएल।

शुभकामनाएं!

+0

हास्केल डीबी पेपर: www.cs.chalmers.se/~bringert/publ/haskelldb/haskelldb-db-2005.pdf – rcreswick

+1

हास्केलडीबी में समस्या है कि यह वर्तमान में जीएचसी (6.8 या 6.10) के हाल के संस्करणों के साथ नहीं बना है। –

+0

@EricHesselink [HaskellDB] (https://github.com/m4dc4p/haskelldb) (github) में अब जीएचसी 7.10 समर्थन है। –

1

आप http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database

मैं उन्हें इस्तेमाल नहीं किया है पर डेटाबेस मानचित्रण और पहुँच संकुल के माध्यम से देखा है, इसलिए किसी भी विशेष रूप से एक की सिफारिश नहीं कर सकते हैं। मैं यह भी नहीं जानता कि आप किस डेटाबेस का उपयोग करने की योजना बना रहे हैं।

+0

उस डेटाबेस को सूचीबद्ध करने के लिए प्रश्न को अपडेट किया गया जिसमें मुझे रूचि है, लेकिन यह फ़िल्टरिंग मानदंडों में से अधिक नहीं होना चाहिए। मैंने अतीत में हैकेज को थोड़ा सा देखा है, लेकिन मुझे शायद इसे फिर से क्रॉल करना चाहिए। हालांकि मैं व्यक्तिगत अनुभव वाले लोगों से सुनना चाहता हूं। – rcreswick

2

मैं वास्तव में एचएपीएस (HAppS-State) के दृष्टिकोण की तरह बहुत अधिक पसंद करता हूं जो आपको ओआरएम के मार्शलिंग/अनमर्शलिंग क्लज के माध्यम से जाने के बारे में भूलने देता है और चलिए आप बस हास्केल के डेटा प्रकारों का उपयोग करते हैं।

13

ओआरएम पुस्तकालय मौजूद होने का कारण यह है कि सी # या जावा में ऑब्जेक्ट्स के बीच सापेक्ष बड़ा अंतर है और आप डेटाबेस में क्या स्टोर करते हैं।

  1. यह वस्तुओं
  2. दोनों डेटाबेस और हास्केल सूची में गणितीय समुच्चय सिद्धांत उनकी प्रेरणा है नहीं है, तो उन दोनों के बीच घर्षण एक बहुत डाटाबेस के बीच से भी कम है: यह हास्केल में इतना एक मुद्दा वजह से नहीं है और ऑब्जेक्ट्स।
+15

मैं पायथन में स्क्लक्लेमी का उपयोग करता हूं क्योंकि यह सीधे स्ट्रिंग में हेरफेर किए बिना SQL कथन को इकट्ठा/पुन: उपयोग करना आसान बनाता है। क्या हास्केल के लिए ऐसा कुछ है? –

2

मैं व्यक्तिगत रूप से केवल Database.HDBC जो "असली दुनिया हास्केल" द्वारा की सिफारिश की है प्रयोग किया है: http://book.realworldhaskell.org/read/using-databases.html

लेकिन मैं मानता हूँ कि यह निश्चित रूप से समझ में आता है, एक उच्च स्तरीय डीबी पहुँच स्तर का उपयोग करने, और मैं शायद हूँ भविष्य की परियोजनाओं के लिए ऐसे मॉडल में जाने की कोशिश करें। इस विषय पर, मैं 2012 जो एक इतिहास है और इस तरह के समाधान के तुलना हास्केल के लिए प्रदान करता से इस पोस्ट पाया: यह से http://www.yesodweb.com/blog/2012/03/history-of-persistence

, मैं इकट्ठा कि लगातार (documentation) और ग्राउंडहॉग (some documentation, examples) सबसे होनहार पुस्तकालय हैं इस क्षेत्र में। दोनों पुस्तकालय आपके द्वारा उल्लेख किए गए डेटाबेस का समर्थन करते हैं; ग्राउंडहॉग के लिए यह इस पोस्ट में नहीं लिखा है, लेकिन in this announcement आप देख सकते हैं कि यह वास्तव में डीबीएस आप में रुचि रखते हैं।

यह भी ध्यान रखें this thread on Haskell-beginners जिसमें Esqueletto अद्यतन के संचालन के लिए एक बेहतर विकल्प के रूप में उल्लेख किया गया है का समर्थन करता है।

ध्यान दें कि यसोड के साथ लगातार जहाजों और इस तरह के अधिक से अधिक हो सकते हैं।

8

लगातार उपयोग करने के लिए अच्छा है, और आपको अपनी क्वेरी से संबंधित तालिका निर्धारित करने के लिए प्रकार अनुमान पर भरोसा करने देता है। उदाहरण के लिए, अगर मैं है मेरी "मॉडल" फ़ाइल में निम्न:

User 
    name Text 
    age Int 

Login 
    user UserId 
    login Text 
    passwd Text 

तो मैं ऐसा कर सकता है:

Just (Entity uid _)   <- selectFirst [ UserName ==. "Some User ] [] 
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] [] 

और यह पता होगा जो टेबल मैं मतलब है। बेशक, आप शायद इस तरह आंशिक कोड लिखना नहीं चाहते हैं, लेकिन मैं केवल प्रश्नों पर जोर देना चाहता था।

संबंधित मुद्दे