ডাটাবেসগুলি এবং কার্যকরী প্রোগ্রামিংগুলি কি কোন মতবিরোধে রয়েছে?


122

আমি এখন কিছু সময়ের জন্য ওয়েব বিকাশকারী হয়েছি এবং সম্প্রতি কিছু কার্যকরী প্রোগ্রামিং শিখতে শুরু করেছি। অন্যদের মতো, আমার পেশাগত কাজের ক্ষেত্রে এই ধারণাগুলির অনেকগুলি প্রয়োগ করতে আমার কিছুটা উল্লেখযোগ্য সমস্যা হয়েছিল। আমার জন্য, এর প্রাথমিক কারণটি আমি দেখতে পাচ্ছি যে এফপির রাষ্ট্রহীন থাকার লক্ষ্যমাত্রার মধ্যে দ্বন্দ্বটি এই সত্যের সাথে মতবিরোধ বলে মনে হচ্ছে যে বেশিরভাগ ওয়েব ডেভলপমেন্ট কাজ আমি করেছি ডেটাবেজে, যা খুব ডেটা কেন্দ্রিক।

একটা জিনিস যা আমাকে ওওপিপিতে আরও বেশি উত্পাদনশীল বিকাশকারী করে তোলে তা হ'ল। নেট, ক্লাস :: পার্লের জন্য ডিবিআই, রুবির জন্য অ্যাক্টিভেকর্ড ইত্যাদির জন্য মাইগেনারেশন d00dads এর মতো অবজেক্ট-রিলেশনাল ম্যাপার্স আবিষ্কার করা এটি আমাকে দূরে থাকতে দেয় This dayোকান লিখুন থেকে এবং সমস্ত দিন বিবৃতি নির্বাচন করুন এবং অবজেক্ট হিসাবে সহজে ডেটা নিয়ে কাজ করার দিকে মনোনিবেশ করুন। অবশ্যই, আমি এখনও তাদের এসকিউএল কোয়েরিগুলি লিখতে পারতাম যখন তাদের পাওয়ারের প্রয়োজন ছিল, তবে অন্যথায় এটি পর্দার আড়ালে দুর্দান্তভাবে বিমূর্ত করা হয়েছিল।

এখন, কার্যকরী-প্রোগ্রামিংয়ের দিকে ঘুরতে, মনে হচ্ছে লিঙ্কগুলির মতো অনেকগুলি এফপি ওয়েব ফ্রেমওয়ার্কের সাথে এই উদাহরণ হিসাবে যেমন প্রচুর বয়লারপ্লেট এসকিএল কোড লেখার প্রয়োজন হয় । ওয়েবলকসটি কিছুটা ভাল বলে মনে হচ্ছে, তবে এটি ডেটা নিয়ে কাজ করার জন্য এক ধরণের ওওপি মডেল ব্যবহার করে বলে মনে হয় এবং এখনও উদাহরণস্বরূপ আপনার ডাটাবেসের প্রতিটি টেবিলের জন্য ম্যানুয়ালি কোড লেখা দরকার । আমি মনে করি আপনি এই ম্যাপিং ফাংশনগুলি লেখার জন্য কিছু কোড জেনারেশন ব্যবহার করেন তবে এটি সিদ্ধান্তহীন-লিসপ-মত মনে হয়।

(দ্রষ্টব্য আমি ওয়েবলকস বা লিঙ্কগুলিকে খুব ঘনিষ্ঠভাবে দেখিনি, সেগুলি কীভাবে ব্যবহার করা হয় সে সম্পর্কে আমি কেবল ভুল বোঝাবুঝি করব)।

সুতরাং প্রশ্নটি হল, ওয়েব অ্যাপ্লিকেশনটির ডেটাবেস অ্যাকসেস অংশগুলির (যা আমি বিশ্বাস করি যে এটি বেশ বড়), বা অন্যান্য বিকাশের জন্য স্কুয়েল ডাটাবেসের সাথে ইন্টারফেসের প্রয়োজন হয় যা আমরা মনে করি যে নিম্নলিখিত পথগুলির মধ্যে একটি জোর করে ফেলেছি:

  1. ফাংশনাল প্রোগ্রামিং ব্যবহার করবেন না
  2. একটি বিরক্তিকর, আন-বিমূর্ত পদ্ধতিতে ডেটা অ্যাক্সেস করুন যা ম্যানুয়ালি অনেকগুলি এসকিউএল বা এসকিউএল-জাতীয় কোড আলা লিঙ্কগুলি জড়িত জড়িত
  3. আমাদের ফাংশনাল ল্যাঙ্গুয়েজকে ছদ্ম-ওওপি দৃষ্টান্তে বাধ্য করুন, এভাবে সত্যিকারের কার্যকরী প্রোগ্রামিংয়ের কিছু কমনীয়তা এবং স্থিতিশীলতা সরিয়ে নেওয়া হয়।

স্পষ্টতই, এই বিকল্পগুলির কোনওটিই আদর্শ বলে মনে হচ্ছে না। এই সমস্যাগুলি রোধ করার উপায় খুঁজে পেয়েছে? সত্যিই এখানে কি একটি সমস্যা আছে?

দ্রষ্টব্য: আমি ব্যক্তিগতভাবে এফপি ফ্রন্টের এলআইএসপি-র সাথে সবচেয়ে বেশি পরিচিত, সুতরাং আপনি যদি কোনও উদাহরণ দিতে চান এবং একাধিক এফপি ভাষা জানতে চান তবে লিস্প সম্ভবত পছন্দের ভাষা হবে

PS: ওয়েব বিকাশের অন্যান্য দিকগুলির সাথে সম্পর্কিত সমস্যাগুলির জন্য এই প্রশ্নটি দেখুন



4
ClojureQL এবং HaskellDB দেখুন। তারা আপেক্ষিক স্তরগুলি সম্পর্কিত সম্পর্কিত বীজগণিত ব্যবহার করে।
সার্বজনীনভাবে

10
আপনি ভুল ভিত্তি দিয়ে শুরু করছেন। কার্যকরী প্রোগ্রামিং হ'ল সুস্পষ্টভাবে এবং বুদ্ধিমানভাবে পরিচালনা করার রাষ্ট্র সম্পর্কে। তারা ডাটাবেসগুলির সাথে খুব ভালভাবে কাজ করে।
লুসিয়ান

3
এসকিউএল হ'ল অন্যতম সফল কার্যকরী-প্রোগ্রামিং কেন্দ্রিক ভাষা, আমি মনে করি না যে কোনও সহজাত অসুবিধা আছে।
ডগলাস

3
আপনার # 2 এবং # 3 একটি মিথ্যা দ্বৈতত্ত্ব। কাঁচা এসকিউএল লেখা এমন কিছু নয় যা অগত্যা এড়ানো উচিত এবং একটি ডাটাবেসের উপর বিমূর্ততা OOP-esque হওয়া উচিত নয়।
ড্যান বার্টন

উত্তর:


45

প্রথমত, আমি বলব না যে সিএলওএস (প্রচলিত লিস্প অবজেক্ট সিস্টেম) "সিউডো-ওও"। এটি প্রথম শ্রেণির ওও।

দ্বিতীয়ত, আমি বিশ্বাস করি যে আপনার প্রয়োজন অনুসারে আপনার দৃষ্টান্ত ব্যবহার করা উচিত।

আপনি রাষ্ট্রহীনভাবে ডেটা সঞ্চয় করতে পারবেন না, যখন কোনও ফাংশন ডেটা প্রবাহ হয় এবং সত্যই রাষ্ট্রের প্রয়োজন হয় না।

আপনার যদি বেশ কয়েকটি আন্তঃসম্পর্কিত প্রয়োজন থাকে তবে আপনার দৃষ্টান্ত মিশ্র করুন। নিজেকে কেবল আপনার সরঞ্জামবাক্সের নীচের ডানদিকে ব্যবহার করতে সীমাবদ্ধ করবেন না।


3
শুধু মজা করার জন্য, আমি ভেবেছিলাম আমি ডেটাগলজ উল্লেখ করব যা আরও বেশি স্টেটলেস ডাটাবেস হওয়ার চেষ্টা করে। এটি সমস্ত ক্রিয়া রেকর্ড করে, যেমন "ব্যবহারকারী 1233 পোস্ট পছন্দ করে।" এই ক্রিয়াগুলি ডাটাবেসের সত্যিকারের অবস্থার সমাধান করে। মূলটি হ'ল ক্যোয়ারীগুলি পরিবর্তনের পরিবর্তে কেবলমাত্র তথ্য ...
চেট

80

এটি একটি ডাটাবেস ব্যক্তির দৃষ্টিকোণ থেকে এসেছি, আমি দেখতে পেয়েছি যে ফ্রন্ট এন্ড বিকাশকারীরা ডাটাবেসগুলিকে তাদের মডেলটির সাথে ফিট করার উপায়গুলি খুঁজতে খুব চেষ্টা করে যা ডাটাবেস ব্যবহারের সর্বাধিক কার্যকর উপায়গুলি বিবেচনা করে যা অবজেক্ট ভিত্তিক বা কার্যকরী নয় বরং সম্পর্কযুক্ত এবং ব্যবহার করে সেটতত্ত্ব. আমি দেখেছি এটির ফলাফলটি খারাপভাবে সম্পাদন করার কোডে আসে। এবং আরও এটি এমন কোড তৈরি করে যা পারফরম্যান্স টিউন করা শক্ত।

ডাটাবেস অ্যাক্সেস বিবেচনা করার সময় তিনটি প্রধান বিবেচনা রয়েছে - ডেটা অখণ্ডতা (কেন সমস্ত ব্যবসায়ের নিয়ম ব্যবহারকারীর ইন্টারফেসের মাধ্যমে নয় ডাটাবেস পর্যায়ে প্রয়োগ করা উচিত), কার্য সম্পাদন এবং সুরক্ষা। এসকিউএলটি প্রথম দুটি বিবেচ্য বিষয়গুলি কোনও সামনের অংশের ভাষার চেয়ে আরও কার্যকরভাবে পরিচালনা করতে লেখা হয়। কারণ এটি বিশেষভাবে এটি করার জন্য ডিজাইন করা হয়েছে। ডাটাবেসের কাজটি ইউজার ইন্টারফেসের টাস্কের চেয়ে অনেক বেশি আলাদা। কাজটি পরিচালনার ক্ষেত্রে সবচেয়ে কার্যকর কোডের ধরণটি ধারণাগতভাবে পৃথক হওয়ার কি অবাক হওয়ার কিছু নেই?

এবং ডাটাবেসগুলি কোনও সংস্থার বেঁচে থাকার জন্য গুরুত্বপূর্ণ তথ্য রাখে। কী আশ্চর্যের বিষয় যে ব্যবসাগুলি যখন তাদের বেঁচে থাকার ঝুঁকিতে রয়েছে তখন তারা নতুন পদ্ধতি নিয়ে পরীক্ষা করতে রাজি নন। অনেকগুলি ব্যবসায় তাদের বিদ্যমান ডাটাবেসের নতুন সংস্করণে আপগ্রেড করতে রাজি নয়। সুতরাং ডাটাবেস ডিজাইনের সহজাত রক্ষণশীলতা রয়েছে। এবং এটি ইচ্ছাকৃতভাবে সেভাবে।

আমি টি-এসকিউএল লেখার চেষ্টা করব না বা আপনার ইউজার-ইন্টারফেস তৈরি করতে ডাটাবেস ডিজাইন ধারণাটি ব্যবহার করব না, আপনি কেন আমার ডাটাবেস অ্যাক্সেস করার জন্য আপনার ইন্টারফেসের ভাষা এবং ডিজাইনের ধারণাগুলি ব্যবহার করার চেষ্টা করবেন? কারণ আপনি ভাবেন যে এসকিউএল যথেষ্ট অভিনব (বা নতুন) নয়? নাকি আপনি এতে স্বাচ্ছন্দ্য বোধ করেন না? যে মডেলটির সাথে আপনি সবচেয়ে স্বাচ্ছন্দ্য বোধ করেন তার কোনও কিছুই ফিট করে না, এর অর্থ এটি খারাপ বা ভুল। এর অর্থ এটি বৈধ কারণে পৃথক এবং সম্ভবত পৃথক। আপনি একটি ভিন্ন কাজের জন্য একটি আলাদা সরঞ্জাম ব্যবহার করেন।


"এসকিউএলটি প্রথম দুটি বিবেচ্য বিষয়গুলি কোনও সামনের দিকের ভাষার চেয়ে আরও কার্যকরভাবে পরিচালনা করতে লেখা হয়।" ওহ সত্যিই? তবে, কেন এটি এসকিউএল সীমাবদ্ধতাগুলি এখনও এই জাতীয় জিনিসগুলি করতে পারে না ?
রবিন গ্রিন

তবে ট্রিগার পারেন, জটিল বাধাগুলি পরিচালনা করতে সক্ষম হবার এটি অন্যতম প্রধান উদ্দেশ্য।
এইচএলজিইএম

2
আমি আপনার শেষ অনুচ্ছেদটি সরিয়ে ফেলব যাতে এটি শীর্ষস্থানীয় অনুচ্ছেদ। খুব ভাল পয়েন্ট, যা অন্যরাও যা আহ্বান জানায় তা প্রতিধ্বনিত করে, যা একটি বহু-দৃষ্টিকোণ পদ্ধতির (এক-আকারের-ফিট নয়)।
পেস্টোফাগৌস

31

আপনার এখানে বেন মোসলে এবং পিটার মার্কসের "আউট অফ দ্য টার পিট" কাগজটি দেখে নেওয়া উচিত: "টার পিট আউট" (Feb ফেব্রুয়ারি, ২০০))

এটি একটি আধুনিক ক্লাসিক যা ফাংশনাল-রিলেশনাল প্রোগ্রামিং নামক একটি প্রোগ্রামিং দৃষ্টান্ত / সিস্টেমের বিবরণ দেয়। ডাটাবেসগুলির সাথে সরাসরি সম্পর্কিত না হয়ে, এটি কোনও সিস্টেমের কার্যক্ষম কোর থেকে বাইরের বিশ্বের (উদাহরণস্বরূপ, ডাটাবেসগুলি) কীভাবে পৃথক হওয়া যায় তা আলোচনা করে।

কাগজটিতে এমন একটি সিস্টেম কীভাবে প্রয়োগ করা যায় সে সম্পর্কেও আলোচনা করা হয়েছে যেখানে আবেদনের অভ্যন্তরীণ অবস্থার একটি সম্পর্কিত সম্পর্কিত বীজগণিত ব্যবহার করে সংজ্ঞায়িত ও সংশোধন করা হয় যা স্পষ্টতই সম্পর্কিত সম্পর্কিত ডাটাবেসের সাথে সম্পর্কিত।

এই কাগজটি কীভাবে ডাটাবেসগুলি এবং কার্যকরী প্রোগ্রামিংকে সংহত করতে পারে তার সঠিক উত্তর দেবে না, তবে সমস্যাটি কমাতে আপনাকে একটি সিস্টেম ডিজাইন করতে সহায়তা করবে।


4
কি দুর্দান্ত কাগজ। আপনার দেওয়া লিঙ্কটি ভাঙ্গা হয়েছে (অস্থায়ীভাবে?), তবে আমি কাগজটি শেফনার.ইউএসসিএস
পেপারস /

2
@queque মূল লিঙ্কটি এখনও মারা গেছে। আমি কেভিনের উত্তরে নতুন লিঙ্কটি রেখেছি।
ডেভিড টোনহোফার 21:34

25
  1. কার্যনির্বাহী ভাষাগুলির রাষ্ট্রহীন থাকার লক্ষ্য নেই, তাদের রাষ্ট্রের পরিচালনাকে সুস্পষ্ট করার লক্ষ্য রয়েছে। উদাহরণস্বরূপ, হাস্কেল-এ, আপনি রাজ্য মনডকে "সাধারণ" রাষ্ট্রের কেন্দ্রস্থল হিসাবে বিবেচনা করতে পারেন এবং আইও মোনাডকে রাষ্ট্রের প্রতিনিধিত্ব করতে পারেন যা প্রোগ্রামের বাইরে থাকতে হবে। এই উভয় মন্ডদই আপনাকে (ক) সুস্পষ্টভাবে রাষ্ট্রীয় পদক্ষেপের প্রতিনিধিত্ব করতে এবং (খ) প্রাসঙ্গিকভাবে স্বচ্ছ সরঞ্জাম ব্যবহার করে তাদের রচনা করে রাষ্ট্রীয় ক্রিয়াকলাপ গঠনের অনুমতি দেয়।

  2. আপনি বেশ কয়েকটি ওআরএম উল্লেখ করেন, যা তাদের নাম অনুসারে বস্তুর সেট হিসাবে বিমূর্ত ডাটাবেস। সত্যই, এটি একটি সম্পর্কিত ডেটাবেসের তথ্য প্রতিনিধিত্ব করে না! এর নাম অনুসারে, এটি সম্পর্কিত তথ্য উপস্থাপন করে। এসকিউএল হ'ল একটি রিলেশনাল ডেটা সেটে সম্পর্ক পরিচালনা করার জন্য একটি বীজগণিত (ভাষা) এবং আসলে এটি বেশ "কার্যকরী"। আমি এটিকে সামনে এনে এনেছি যে (ক) ওআরএমগুলি ডাটাবেস তথ্য মানচিত্রের একমাত্র উপায় নয়, (খ) যে এসকিউএল আসলে কিছু ডাটাবেস ডিজাইনের জন্য খুব সুন্দর ভাষা এবং (গ) যে কার্যকরী ভাষায় প্রায়শই সম্পর্কযুক্ত বীজগণিত থাকে ম্যাপিং যা এসকিউএল এর শক্তিটিকে একটি প্রতিমা (এবং হাস্কেলের ক্ষেত্রে টাইপচেডযুক্ত) ফ্যাশনে প্রকাশ করে।

আমি বলব যে বেশিরভাগ লিপস একটি দরিদ্র মানুষের কার্যকরী ভাষা। এটি আধুনিক ক্রিয়ামূলক অনুশীলন অনুসারে ব্যবহারে সম্পূর্ণ সক্ষম, তবে যেহেতু এটির প্রয়োজন হয় না সম্প্রদায় সেগুলি ব্যবহারের সম্ভাবনা কম less এটি এমন পদ্ধতির মিশ্রণের দিকে নিয়ে যায় যা অত্যন্ত কার্যকর হতে পারে তবে খাঁটি কার্যকরী ইন্টারফেসগুলি কীভাবে এখনও ডেটাবেসগুলি অর্থবহভাবে ব্যবহার করতে পারে তা অবশ্যই অস্পষ্ট করে।


15

আমি মনে করি না এফপি ভাষার স্টেটলেস প্রকৃতি ডাটাবেসের সাথে সংযোগ স্থাপনে সমস্যা। লিস্প একটি খাঁটি ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজ তাই এটি রাষ্ট্রের সাথে কাজ করতে কোনও সমস্যা না হওয়া উচিত। এবং হাস্কেলের মতো খাঁটি ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজে ইনপুট এবং আউটপুট ব্যবহারের উপায় রয়েছে যা ডাটাবেসগুলি ব্যবহারের ক্ষেত্রে প্রয়োগ করা যেতে পারে।

আপনার প্রশ্ন থেকে মনে হচ্ছে আপনার মূল সমস্যাটি রেকর্ড-ভিত্তিক ডেটাটি বিমূর্ত করার ভাল উপায় খুঁজে বের করার মধ্যে রয়েছে যা আপনি আপনার ডাটাবেস থেকে এমন কিছুতে ফিরিয়ে আনেন যা লিস্প-ওয়াই (লিস্প-ইশ?) অনেকগুলি এসকিউএল না লিখেই ফেলে থাকে lis কোড। এটি ভাষা দৃষ্টান্তের সমস্যাটির চেয়ে টুলিং / লাইব্রেরিগুলিতে সমস্যার মতো মনে হয়। আপনি যদি খাঁটি এফপি করতে চান তবে লিস্প আপনার পক্ষে সঠিক ভাষা নয়। সাধারণ লিসপ খাঁটি এফপি-র তুলনায় oo, fp এবং অন্যান্য দৃষ্টান্তের থেকে ভাল ধারণাগুলি সংহত করার বিষয়ে আরও বেশি মনে হয়। আপনি যদি খাঁটি এফপি রুট যেতে চান তবে সম্ভবত আপনার ইরং বা হাস্কেল ব্যবহার করা উচিত।

আমার মনে হয় লিসপে থাকা 'সিউডো-ও' ধারণাগুলিরও তাদের যোগ্যতা রয়েছে। আপনি তাদের চেষ্টা করে দেখতে চাইতে পারেন। আপনার ডেটা দিয়ে আপনি যেভাবে কাজ করতে চান সেগুলি যদি সেগুলি ফিট না করে তবে আপনি ওয়েবলকসের শীর্ষে একটি স্তর তৈরি করার চেষ্টা করতে পারেন যা আপনাকে আপনার ডেটা দিয়ে যেভাবে চান তার সাথে কাজ করতে দেয়। এটি নিজের লেখার চেয়ে সহজ হতে পারে।

দাবি অস্বীকার: আমি কোনও লিস্প বিশেষজ্ঞ নই। আমি বেশিরভাগ প্রোগ্রামিং ভাষাতে আগ্রহী এবং লিস্প / সিএলএস, স্কিম, এরলং, পাইথন এবং কিছুটা রুবির সাথে খেলছি। প্রতিদিনের প্রোগ্রামিং জীবনে আমি এখনও সি # ব্যবহার করতে বাধ্য হই।


3
শব্দের কোনও সংজ্ঞা অনুসারে এরলং খাঁটি এফপি নয়। আপনি অনেকগুলি প্রক্রিয়া তৈরি করে ইরং লিখেছেন (সমস্তই সমান্তরালভাবে চলছে) যা প্রত্যেকের কাছে বার্তা প্রেরণ করে, অনেকটা বস্তুর মতো বলে, ছোট্ট টাল্ক। সুতরাং একটি উচ্চ-স্তরের দৃষ্টিকোণ থেকে, এটি কিছুটা OO-ish মনে হতে পারে এবং অবশ্যই এর রাজ্য রয়েছে। আপনি যদি জুম বাড়ান (কোনও প্রক্রিয়াটির অভ্যন্তরে চলমান কোডে) এটি আরও কার্যকরী দেখায় তবে এখনও নিখুঁতভাবে কার্যকরী হয় না, কারণ আপনি যে কোনও জায়গা থেকে বার্তা (এবং তাই আমি / ও ইত্যাদি করতে পারেন) পাশাপাশি সঞ্চয় করতে পারেন " গ্লোবাল ভেরিয়েবল "(প্রক্রিয়াতে বৈশ্বিক, কিছুতে" প্রসেস ডিক "নামে পরিচিত))
আমাদিরো

@ আমাদিরোর "অবশ্যই রাজ্য আছে"। অবশ্যই আছে। আমাদের সর্বদা রাষ্ট্র থাকে। সমস্যাটি রাষ্ট্র নয়, এটি পরিবর্তনীয় রাষ্ট্র । "ফাংশনাল প্রোগ্রামিং" এর একটি ভাল অংশ হ'ল ভঙ্গুর রাষ্ট্রীয় উপস্থাপনাগুলি থেকে মুক্তি পাওয়ার (উদাহরণস্বরূপ বস্তুর উদাহরণগুলি যা অন্য প্রক্রিয়াগুলির দ্বারা পরিবর্তিত হয় যখন আমরা তাদের কাছে একটি রেফারেন্স রাখি, আঘাতের অপমানকে যুক্ত করার জন্য একটি অ-লেনদেনিক পদ্ধতিতে)। এরলংয়ের অ-পরিবর্তনীয় অবস্থা রয়েছে এবং তাই এটি কার্যকরী প্রোগ্রামিংয়ের এই মানদণ্ডকে আঘাত করে। এবং এইভাবে: যে কোনও ধরণের ডেটাবেসগুলি কখনই সমস্যা হয় না। ডাটাবেজ আপডেট করার সময় একটি সমস্যা হয় (এছাড়াও কদর্য দেখতে জাহির Prolog মধ্যে)।
ডেভিড টনহোফার 21:44 এ 15

15

যদি আপনার ডাটাবেস তথ্য নষ্ট না করে, তবে আপনি এটির সাথে পুরো বিশিষ্ট ডাটাবেসের ফাংশনগুলিতে একটি মান হিসাবে কাজ করে "খাঁটি ফাংশনাল" প্রোগ্রামিং মানগুলির সাথে সামঞ্জস্য রেখে কার্যকরী পদ্ধতিতে কাজ করতে পারেন।

যদি সেই সময়ে টি ডাটাবেসটিতে বলা হয় যে "বব সুজি পছন্দ করে", এবং আপনার একটি ফাংশন লাইক ছিল যা একটি ডাটাবেস এবং একটি পছন্দকারীকে গ্রহণ করে, তবে আপনি যতক্ষণ সময় ডাটাবেস পুনরুদ্ধার করতে পারেন টি আপনার কাছে একটি খাঁটি কার্যকরী প্রোগ্রাম রয়েছে যাতে একটি ডাটাবেস জড়িত । যেমন

# Start: Time T
likes(db, "Bob")
=> "Suzie"
# Change who bob likes
...
likes(db "Bob")
=> "Alice"
# Recover the database from T
db = getDb(T)
likes(db, "Bob")
=> "Suzie"

এটি করার জন্য আপনি যে তথ্য ব্যবহার করতে পারেন তা কখনই ফেলে দিতে পারবেন না (যা সমস্ত বাস্তবতার অর্থ আপনি তথ্য ফেলে দিতে পারবেন না), তাই আপনার স্টোরেজের প্রয়োজনীয়তা একঘেয়েভাবে বাড়বে। তবে আপনি আপনার ডাটাবেসের সাথে বিচ্ছিন্ন মানগুলির রৈখিক সিরিজ হিসাবে কাজ শুরু করতে পারেন, যেখানে পরবর্তী মানগুলি লেনদেনের মাধ্যমে পূর্বের মানগুলির সাথে সম্পর্কিত।

এটি উদাহরণস্বরূপ, ডেটামিকের পিছনে প্রধান ধারণা ।


খুশী হলাম। আমি ডেটামিক সম্পর্কেও জানতাম না। আরও দেখুন: ডেটামিকের পক্ষে যুক্তি
ডেভিড টনহোফার

12

একেবারেই না. 'ফাংশনাল ডেটাবেসস' নামে পরিচিত একটি ডাটাবেস রয়েছে, যার মধ্যে মেনেসিয়া সম্ভবত সবচেয়ে অ্যাক্সেসযোগ্য উদাহরণ। মূল নীতিটি হ'ল ফাংশনাল প্রোগ্রামিং হ'ল ঘোষণামূলক, তাই এটি অনুকূলিত করা যায়। আপনি তালিকা সংবিধান ব্যবহার করে একটি যোগদান প্রয়োগ করতে পারেন অবিচ্ছিন্ন সংগ্রহে এবং কোয়েরি অপটিমাইজার কীভাবে ডিস্ক অ্যাক্সেস বাস্তবায়ন করতে পারে তা স্বয়ংক্রিয়ভাবে কাজ করতে পারে।

Mnesia লেখা আছে Erlang এবং সেখানে অন্তত একটি ওয়েব ফ্রেমওয়ার্ক (হয় Erlyweb ) যে প্ল্যাটফর্মের জন্য উপলব্ধ। এরলং সহজাত কিছুই ভাগ করে নেওয়া থ্রেডিং মডেলের সাথে সমান্তরাল, তাই নির্দিষ্ট উপায়ে এটি স্কেলযোগ্য আর্কিটেকচারকে নিজেকে ধার দেয়।


1
আমি মনে করি না এটি অনেকটা সমাধান। অবজেক্ট-ভিত্তিক ডাটাবেসগুলিও রয়েছে, তবে সাধারণত, আপনি একটি সাধারণ পুরানো রিলেশনাল এসকিউএল ডাটাবেসের সাথে সংযোগ স্থাপন করতে চান।
জাল্ফ

4
আপনার এখনও ফাংশনাল-এসকিউএল প্রতিবন্ধিতা মিল নেই ঠিক একইভাবে OO ভাষা এবং ডাটাবেসগুলির সাথে একটি প্রতিবন্ধক মিল নেই।
ConcernedOfTunbridgeWells

1
@ কনসার্নডঅফটুনব্রিজওয়েলস আমি নির্বিচারে বলব যে এই প্রতিবন্ধকতা মেলে না এমন হ্যামারযুক্ত লোকদের কল্পনার চিত্র, যা নখ হওয়ার জন্য সমস্ত কিছু প্রয়োজন need খুব কম পাতলা স্তর এবং এসকিউএল সম্পর্কে জ্ঞান মার্জিতভাবে দীর্ঘ পথ যেতে পারে, তাই jOOQ এবং অনুরূপ শিম
ডেভিড টনহোফার 21:54

6

স্টেটলেস এপিআই-তে রাষ্ট্রের ট্র্যাক রাখার সঠিক উপায় হ'ল ডেটাবেস। যদি আপনি আরআরএসটি সাবস্ক্রাইব করেন তবে আপনার লক্ষ্য হ'ল স্টেটলেস কোড লিখুন যা কোনও ডেটাস্টোর (বা অন্য কোনও ব্যাকএন্ড) এর সাথে ইন্টারেক্ট করে যা আপনার তথ্যকে স্বচ্ছ উপায়ে যাতে রাজ্য সম্পর্কিত তথ্য ট্র্যাক করে রাখে।

অবজেক্ট-রিলেশনাল ম্যাপারের ধারণা, যেখানে আপনি কোনও অজানা হিসাবে একটি ডাটাবেস রেকর্ডটি আমদানি করেন এবং তারপরে এটি সংশোধন করেন, এটি যেমন ওরিয়েন্টেড প্রোগ্রামিংয়ের উদ্দেশ্যে যেমন কার্যকরী প্রোগ্রামিংয়ের ক্ষেত্রে কার্যকর তেমনি কার্যকর এবং কার্যকর। একটি সতর্কতা হ'ল ফাংশনাল প্রোগ্রামিং সেই স্থানে বস্তুটি সংশোধন করে না , তবে ডাটাবেস এপিআই আপনাকে সেই জায়গায় রেকর্ডটি সংশোধন করতে দেয় । আপনার ক্লায়েন্টের নিয়ন্ত্রণ প্রবাহটি দেখতে এরকম কিছু দেখবে:

  • কোনও বস্তু হিসাবে রেকর্ডটি আমদানি করুন (ডাটাবেস এপিআই এই সময়ে রেকর্ডটি লক করতে পারে),
  • আপনার পছন্দসই বিষয়গুলির উপর ভিত্তি করে অবজেক্ট এবং শাখা পড়ুন,
  • আপনার পছন্দসই পরিবর্তনগুলি সহ একটি নতুন অবজেক্টটি প্যাকেজ করুন,
  • নতুন আইটেমটি যথাযথ এপিআই কলটিতে পাস করুন যা ডাটাবেসে রেকর্ড আপডেট করে।

ডাটাবেস আপনার পরিবর্তনগুলি সহ রেকর্ড আপডেট করবে। খাঁটি ফাংশনাল প্রোগ্রামিং আপনার প্রোগ্রামের ক্ষেত্রের মধ্যে পুনরায় নিয়োগের ভেরিয়েবলগুলি বঞ্চিত করতে পারে তবে আপনার ডাটাবেস এপিআই এখনও ইন-প্লেস আপডেটের অনুমতি দিতে পারে।


5

আমি হাস্কেলের সাথে সবচেয়ে আরামদায়ক সর্বাধিক বিশিষ্ট হাস্কেল ওয়েব কাঠামো (রেল এবং জ্যাঙ্গোর সাথে তুলনীয়) বলা হয় ইয়েসড। দেখে মনে হচ্ছে এটি বেশ সুন্দর, টাইপ-নিরাপদ, মাল্টি-ব্যাকএন্ড ওআরএম। তাদের বইয়ের পার্সেরেন্স অধ্যায়টি দেখুন ।


0

ডাটাবেস এবং ফাংশনাল প্রোগ্রামিং ফিউজ করা যেতে পারে।

উদাহরণ স্বরূপ:

ক্লোজার হল রিলেশনাল ডাটাবেস তত্ত্বের ভিত্তিতে একটি কার্যকরী প্রোগ্রামিং ভাষা।

               Clojure -> DBMS, Super Foxpro
                   STM -> TransactionMVCC
Persistent Collections -> db, table, col
              hash-map -> indexed data
                 Watch -> trigger, log
                  Spec -> constraint
              Core API -> SQL, Built-in function
              function -> Stored Procedure
             Meta Data -> System Table

দ্রষ্টব্য: সর্বশেষ স্পেস 2-তে স্পেকটি আরএমডিবি-র মতো। দেখুন: spec-alpha2 উইকি: স্কিমা এবং নির্বাচন করুন

আমি উকিল করছি: নোএসকিউএল এবং আরএমডিবি সুবিধার সংমিশ্রণ অর্জনের জন্য হ্যাশ-ম্যাপের শীর্ষে একটি সম্পর্কিত সম্পর্কিত মডেল তৈরি করা। এটি প্রকৃতপক্ষে posgtresql এর বিপরীত বাস্তবায়ন।

হাঁসের টাইপিং: এটি যদি হাঁসের মতো দেখায় এবং হাঁসের মতো কোঁক দেয় তবে এটি অবশ্যই হাঁস হতে হবে।

যদি ক্লোজারের ডেটা মডেলটি আরএমডিবি-র মতো, ক্লোজারের আরএমডিবি-র মতো সুবিধা এবং ক্লোজারের ডেটা ম্যানিপুলেশন আরএমডিবির মতো, ক্লোজার অবশ্যই একটি আরএমডিবি হতে হবে।

ক্লোজার হল রিলেশনাল ডাটাবেস তত্ত্বের ভিত্তিতে একটি কার্যকরী প্রোগ্রামিং ভাষা

সবই আরএমডিবি

হ্যাশ-ম্যাপের উপর ভিত্তি করে সম্পর্কিত ডেটা মডেল এবং প্রোগ্রামিং প্রয়োগ করুন (NoSQL)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.