কীভাবে একটি সাধারণ ডাটাবেস ইঞ্জিন লিখতে হয় [বন্ধ]


143

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

  • কীভাবে তথ্য অভ্যন্তরীণভাবে সংরক্ষণ করা হয় (যেমন টেবিলগুলি কীভাবে উপস্থাপন করা হয় ইত্যাদি)
  • ইঞ্জিন কীভাবে প্রয়োজনীয় ডেটা সন্ধান করে (যেমন একটি নির্বাচন জিজ্ঞাসা চালান)
  • ডেটা এমনভাবে কীভাবে প্রবেশ করানো হয় যা দ্রুত এবং দক্ষ efficient

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

আপনার সাহায্যের জন্য অনেক ধন্যবাদ.

উত্তর:


55

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

http://sqlite.org/


2
স্ক্লাইটের ডাউনলোডের এলওসি শেল.সি. => 3135, স্ক্লাইট3.সি => 136332, স্ক্লাইট3েক্সট = = 447, স্ক্লাইট3.h => 7097, মোট => 147011
খাজা মিনহাজউদ্দিন

1
আপনি সম্ভবত একটি কোঁকড়া ধনুর্বন্ধনী ভাষা ব্যবহার করে একটি সম্পূর্ণরূপে কার্যকরী ডাটাবেস ইঞ্জিন তৈরি করতে পারেন যতটা প্রায় ছোট। এসকিউএলাইট সি # তেও উপলব্ধ।
রবার্ট হার্ভে

1
@ ইব্রাহিম নাজ্জার গিথুব
রবার্ট হার্ভে

4
আমি এসকিউএলাইট 2.5.0 এর কোড পড়ার পরামর্শ দিই: github.com/davideuler/SQLite-2.5.0- কোড কোডিংয়ের জন্য , এটি এসকিউএলাইটের একটি প্রাথমিক সংস্করণ যা সংকলন এবং আধুনিক জিসিসিতে চালানো যেতে পারে (আমি পরীক্ষা করেছি এটি
ম্যাকোস

1
cstack.github.io/db_tutorial ভাল শুরুর পয়েন্ট।
আশীষ নেগি

25

এই প্রশ্নের উত্তর একটি বিশাল এক। পিএইচডি থিসিসটি এটির 100% উত্তর দেওয়ার প্রত্যাশা করুন)) তবে আমরা একের পর এক সমস্যাগুলি ভাবতে পারি:

  • অভ্যন্তরীণভাবে কীভাবে ডেটা সংরক্ষণ করতে হবে: আপনার ডাটাবেস অবজেক্টযুক্ত একটি ডেটা ফাইল থাকা উচিত এবং ফোকাসে ডেটা লোড করার জন্য একটি ক্যাচিং ব্যবস্থা থাকতে হবে এবং এর চারপাশে কিছু ডেটা র্যামের মধ্যে ধরে নেওয়া উচিত আপনার কাছে একটি টেবিল রয়েছে, কিছু ডেটা সহ আমরা একটি ডেটা ফর্ম্যাট তৈরি করব কলাম ডিলিমিটার এবং একটি সারি ডিলিমিটারের সংজ্ঞায় একমত হয়ে এই টেবিলটিকে বাইনারি ফাইলে রূপান্তর করতে এবং নিশ্চিত করুন যে ডিলিমিটারের যেমন প্যাটার্ন কখনও আপনার ডেটাতে ব্যবহার হয় না। উদাহরণস্বরূপ আপনি যদি কলামগুলি পৃথক করার জন্য <*> নির্বাচন করেছেন তবে এই প্যাটার্নটি না রাখার জন্য আপনি এই টেবিলটিতে রাখছেন এমন ডেটা যাচাই করা উচিত। আপনার সন্ধানকে গতি বাড়ানোর জন্য এবং প্রতিটি কলামের শুরুতে "অ্যাডাম", 1, 11.1, এর মতো এই কলামটির দৈর্ঘ্য পেতে প্রতিটি স্তম্ভের শুরুতে সারিটির আকার এবং কিছু অভ্যন্তরীণ সূচক সংখ্যা নির্দিষ্ট করেও আপনি একটি সারি শিরোনাম এবং একটি কলাম শিরোনাম ব্যবহার করতে পারেন, "

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

  • ওরাকল থেকে আমি কীভাবে তথ্য সন্নিবেশ করবো তা হ'ল এটি যে তারা র‌্যাম এবং ডিস্কে অস্থায়ী স্থানে ডেটা sertোকায় এবং পর্যায়ক্রমিক ভিত্তিতে গৃহকর্তী করে, ডাটাবেস ইঞ্জিনটি তার কাঠামোটি অপ্টিমাইজ করে সমস্ত সময় ব্যস্ত থাকে তবে একই সময়ে আমরা তা করি না এর মতো কিছুতে পাওয়ার ব্যর্থতার ক্ষেত্রে ডেটা হারাতে চাই। সুতরাং কোনও অকারণ ছাড়াই এই অস্থায়ী স্থানে ডেটা রাখার চেষ্টা করুন, আপনার মূল স্টোরেজটি সংযোজন করুন এবং পরবর্তী সময়ে যখন সিস্টেমগুলি আপনার সূচকগুলি নিখরচায় থাকে এবং সম্পন্ন হওয়ার পরে অস্থায়ী অঞ্চলটি সাফ করুন

শুভকামনা, দুর্দান্ত প্রকল্প


11

এসকিউএলাইটের আগে উল্লেখ করা হয়েছিল, তবে আমি কিছু যুক্ত করতে চাই।

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



9

ঠিক আছে, আমি একটি সাইট পেয়েছি যার এসকিউএল এবং বাস্তবায়নের বিষয়ে কিছু তথ্য রয়েছে - যা সমস্ত টিউটোরিয়াল তালিকাভুক্ত করে সেই পৃষ্ঠায় লিঙ্ক করা কিছুটা কঠিন, তাই আমি একে একে তাদের লিঙ্ক করব:


8

আমি www.sqlite.org- এ ফোকাস করার পরামর্শ দেব

এটি সাম্প্রতিক, ছোট (উত্স কোড 1 এমবি), মুক্ত উত্স (যাতে আপনি এটি নিজের জন্য নির্ধারণ করতে পারেন) ...

এটি কীভাবে কার্যকর করা হয় সে সম্পর্কে বই লেখা হয়েছে:

http://www.sqlite.org/books.html

এটি ডেস্কটপ কম্পিউটার এবং মোবাইল ফোন উভয়ের জন্য বিভিন্ন অপারেটিং সিস্টেমে চালিত হয় তাই পরীক্ষা-নিরীক্ষা করা সহজ এবং এ সম্পর্কে শিখতে এখনই এবং ভবিষ্যতে কার্যকর হবে।

এমনকি এটির এখানে একটি শালীন সম্প্রদায় রয়েছে: /programming/tagged/sqlite


1
৩.১০ এর বাইট সাইজটি এখন সোর্স কোডের প্রায় 7.0 এমবি। শুধুমাত্র একটি বেসরকারী কিছু লোক এক বসতে সমস্ত হজম করতে পারে। তবুও, এটি শুরু করার জন্যও ভাল জায়গা।
লরি স্টার্ন

1
প্রকৃতপক্ষে. এসকিউএলসিফারে একটি বাগ খুঁজে পেতে সম্প্রতি এসকিউএলাইটের উত্স কোডের ভিতরে কিছুটা সময় ব্যয় করা, এটি একটি নিখুঁত দুঃস্বপ্ন। জীবনটি 6 বছর আগে সহজ ছিল :-)
মাইকেল 25 ই

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

7

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


3

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


1
আপনার কাছে এখনও কোডটি রয়েছে, আপনি কি কোনও লিঙ্ক ভাগ করতে পারেন
GK1

3

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

আপনি আপনার ডাটাবেস ইঞ্জিনের জন্য একটি নন-এসকিউএল ইন্টারফেসের দিকে তাকিয়ে বিবেচনা করতে পারেন। দয়া করে অ্যাপাচি কাউচডিবি একবার দেখুন । এটি যা আপনি কল করবেন, একটি ডকুমেন্ট ওরিয়েন্টেড ডাটাবেস সিস্টেম।

শুভকামনা!


যদি আপনি অন্য ডিবিতে সন্ধান করতে চান তবে: sqlserverinternals.com তার এসকিউএল সার্ভারের ইন্টার্নালগুলিতে তার বইগুলি শীর্ষস্থানীয় itch
এইচএলজিইএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.