2009-04-01 7 views
7

मैं CouchDB से परिचित हूं और स्केल ऑब्जेक्ट्स के परिणामों को मैप करने का विचार, साथ ही साथ इसके साथ जुड़ने के लिए कुछ प्राकृतिक तरीका ढूंढता हूं, तुरंत आया।क्या कॉच डीबी गतिशील भाषाओं के लिए सबसे उपयुक्त है?

लेकिन मुझे लगता है कि रूबी और जावास्क्रिप्ट जैसी गतिशील भाषाएं कॉच डीबी के जेसन/दस्तावेज़-केंद्रित/शकेमा मुक्त अपमान के साथ बहुत अच्छी चीजें करती हैं।

स्थिर भाषाओं में सोफे के साथ चीजों को करने के लिए कोई अच्छा अपवाद?

+0

आप इस प्रश्न को देख सकते हैं: क्या गतिशील भाषाएं कॉच डीबी के लिए उपयुक्त हैं? – paulosuzart

उत्तर

17

मैं समझता हूं कि कॉच डीबी जेएसओएन वस्तुओं के साथ पूरी तरह से काम करता है। चूंकि JSON untyped है, यह विश्वास करने के लिए प्रलोभन है कि यह गतिशील भाषाओं के लिए अधिक स्वाभाविक रूप से उपयुक्त है। हालांकि, एक्सएमएल आम तौर पर भी untyped है, और स्कैला एक्सएमएल बनाने और manipulating के लिए बहुत अच्छा पुस्तकालय समर्थन है। स्कैला की एक्सएमएल विशेषताओं की खोज के लिए, देखें: http://www.ibm.com/developerworks/library/x-scalaxml/

इसी प्रकार JSON के साथ। उचित लाइब्रेरी समर्थन के साथ, जेएसओएन से निपटने से स्थिर भाषाओं में भी प्राकृतिक महसूस हो सकता है। http://technically.us/code/x/weaving-tweed-with-scala-and-json/

सामान्य रूप में वस्तु डेटाबेस के साथ

, (का उपयोग कर उदाहरण के लिए, भाषा में एक वर्ग) कभी कभी यह एक "मॉडल" को परिभाषित करने के लिए सुविधाजनक है और JSON का उपयोग करें: स्काला में JSON डेटा के साथ काम कर के लिए एक दृष्टिकोण के लिए, यह लेख देखें या एक्सएमएल या कुछ अन्य untyped दस्तावेज़ भाषा कक्षा के क्रमबद्ध प्रतिनिधित्व होने के लिए। उचित लाइब्रेरी समर्थन तब क्रमबद्ध रूप (जैसे JSON) और इन-मेमोरी डेटा संरचनाओं के बीच, स्थिर टाइपिंग और उसके साथ आने वाली सभी उपहारों के बीच अनुवाद कर सकता है। इस दृष्टिकोण के एक उदाहरण के लिए, लिफ्ट के रिकॉर्ड को देखें जिसमें JSON से और उसके लिए रूपांतरण जोड़े गए हैं: http://groups.google.com/group/liftweb/msg/63bb390a820d11ba

+0

धन्यवाद Ortiz!जेएसओएन के साथ क्या करना अच्छा होगा, हम स्कैला में एक्सएमएल के साथ क्या कर सकते हैं, है ना? – paulosuzart

+1

हाँ। मुझे लगता है कि n8han की लाइब्रेरी (ऊपर लिंक) एक शानदार शुरुआत है, लेकिन स्कैला में बेहतर JSON लाइब्रेरी समर्थन के लिए बहुत कुछ किया जा सकता है। –

3

मुझे आश्चर्य है कि आपने सही सवाल पूछा है या नहीं। आप स्कैला का उपयोग क्यों कर रहे हैं, न कि गतिशील भाषाओं? शायद स्काला आपको कुछ भलाई के कारण प्रदान करता है जो आपके लिए महत्वपूर्ण है और, मुझे लगता है, आपकी कोड गुणवत्ता। तो फिर आप "स्थिर रूप से टाइप किए गए" (यानी स्कीमा-आधारित) डेटाबेस का उपयोग क्यों नहीं कर रहे हैं? एक बार फिर मैं बस मान रहा हूं, लेकिन परिवर्तन का जवाब देने की क्षमता दिमाग में आती है। उत्पादन एसक्यूएल डेटाबेस में बदलने और प्रतिक्रिया करने में बहुत मुश्किल होने की एक भयानक प्रवृत्ति है।

तो, अपने डेटा दुर्बलता से लिखा गया है, और अपने कोड दृढ़ता से टाइप किया है। लेकिन कहीं आपको संक्रमण करना होगा। इसका मतलब यह है कि कहीं भी, आपके पास डेटा के लिए "स्कीमा" होगा, भले ही डेटाबेस में कोई भी न हो। इस स्कीमा को उन वर्गों द्वारा परिभाषित किया गया है जिन्हें आप कॉच दस्तावेज़ों पर मैप कर रहे हैं। यह सही समझ में आता है; मैंने देखा है कि सोफे के अधिकांश उपयोगों में "टाइप" जैसी कुंजी होती है और प्रत्येक प्रकार के लिए कम से कम कुछ सामान्य कुंजी सेट होते हैं। क्या इन स्कैला कक्षाओं में जेएसओएन को हाथ से मैप करना है या उदाहरण के लिए फैंसी प्रतिबिंब उपकरण (धीमे लेकिन सुंदर), या यहां तक ​​कि कुछ प्रशंसक स्कैला फीचर जो कि मैं अभी तक नया हूं, एक विस्तार है। आसान-धीमी गति से शुरू करें, फिर देखें कि यह पर्याप्त तेज़ है या नहीं।

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

यदि यह आपके लिए पर्याप्त नहीं है, और आप बिल्कुल कोई स्कीमा नहीं चाहते हैं, तो आप प्रभावी ढंग से कह रहे हैं कि आप कक्षाओं का उपयोग अपने डेटा को परिभाषित करने और कुशल बनाने के लिए नहीं करना चाहते हैं। यह भी ठीक है (हालांकि मैं एक उपयोग की कल्पना नहीं कर सकता), लेकिन फिर सवाल गतिशील बनाम स्थैतिक भाषाओं के बारे में नहीं है, लेकिन कक्षा-आधारित ओओ भाषाओं का उपयोग करना है या नहीं।