ইউনিক্সের জন্য স্ট্যান্ডার্ড কী / মান ডেটাস্টোর


16

আমি জানি কী / মান UNIX জন্য লাইব্রেরি ( berkeleydb , gdbm , redis ...)। তবে আমি কোডিং শুরু করার আগে আমি অবাক হয়েছি ইউনিক্সের জন্য যদি এমন কোনও মানক সরঞ্জাম রয়েছে যা আমাকে নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করতে দেয়:

$ tool -f datastore.db put "KEY" "VALUE"
$ tool -f datastore.db put -f file_key_values.txt
$ tool -f datastore.db get "KEY"
$ tool -f datastore.db get -f file_keys.txt
$ tool -f datastore.db remove "KEY"
$ etc...

ধন্যবাদ

উত্তর:


10

আমি মনে করি না যে এর জন্য কোনও মানক সরঞ্জাম আছে। grep/ awk/ sedইত্যাদি ব্যতীত তবে এটি ব্যবহার করার জন্য আপনাকে লকিং, ফর্ম্যাট, বিশেষ অক্ষর ইত্যাদির মতো আরও অনেক সমস্যার যত্ন নিতে হবে etc.

আমি ব্যবহার করার পরামর্শ দিচ্ছি sqlite। একটি সাধারণ টেবিল সংজ্ঞায়িত করুন এবং তারপরে তৈরি করুন tool_get()এবং tool_put()শেল ফাংশনগুলি। sqliteদ্রুত বহনযোগ্য, দ্রুত।

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


ধন্যবাদ . আমি স্ক্লাইট এপিআই দিয়ে দ্রুত একটি সরঞ্জাম লিখেছিলাম। এটা ঠিক কাজ করে।
পিয়ের 21

9

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

put () { key=$1; value=$2; printf %s "$value" >"datastore.db/$key"; }
get () { key=$1; cat "datastore.db/$key"; }
remove () { key=$1; rm "datastore.db/$key"; }

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

put () {
  key=$1; value=$2; set $(printf %s "$key" | sha1sum); sum=$1
  printf %s "$key" >"datastore.db/$sum.key"
  printf %s "$value" >"datastore.db/$sum.value"
}
get () {
  key=$1; set $(printf %s "$key" | sha1sum); sum=$1
  cat "datastore.db/$1.value"
}
remove () {
  key=$1; set $(printf %s "$key" | sha1sum); sum=$1
  rm "datastore.db/$1.key" "datastore.db/$1.value"
}

নোট করুন যে উপরের খেলনা বাস্তবায়নগুলি পুরো গল্প নয়: পারমাণবিকতার মতো কোনও কার্যকর লেনদেনের সম্পত্তি তাদের নেই । ফাইল তৈরি এবং নামকরণের মতো প্রাথমিক ফাইল সিস্টেম অপারেশনগুলি তবে পারমাণবিক, এবং উপরের ফাংশনগুলির পারমাণবিক সংস্করণ তৈরি করা সম্ভব।

এই ডাইরেক্ট-টু-ফাইল-সিস্টেম প্রয়োগগুলি কেবলমাত্র কয়েক হাজার ফাইল পর্যন্ত ছোট ছোট ডাটাবেসের জন্য আদর্শ ফাইল সিস্টেমগুলির সাথে উপযুক্ত। এই বিন্দু ছাড়াই, বেশিরভাগ ফাইল সিস্টেমে বড় ডিরেক্টরিগুলির সাথে মোকাবিলা করতে বেশ সময় লাগে। স্তরযুক্ত বিন্যাস ব্যবহার করে আপনি স্কিমটিকে বৃহত ডাটাবেসে রূপান্তর করতে পারেন। উদাহরণস্বরূপ, সমস্ত ফাইলকে একটি ডিরেক্টরিতে সংরক্ষণ করার পরিবর্তে তাদের নামের প্রথম কয়েকটি অক্ষরের উপর ভিত্তি করে এটিকে পৃথক সাব ডিরেক্টরিতে সংরক্ষণ করুন। গিটটি এটিই করে, উদাহরণস্বরূপ: এসএএএএ -1 হ্যাশ দ্বারা সূচিযুক্ত এর বস্তুগুলি বলা ফাইলগুলিতে সঞ্চিত থাকে .git/objects/01/2345679abcdef0123456789abcdef01234567সিন্টেমিক লেয়ারিং ব্যবহার করে এমন প্রোগ্রামগুলির অন্যান্য উদাহরণগুলি হ'ল ওয়েব ক্যাশিং প্রক্সি ডাব্লুউওফল এবং পলিপো ; উভয়ই বলা একটি ফাইলের URL এ পাওয়া কোনও পৃষ্ঠার ক্যাশেড অনুলিপি সঞ্চয় করেwww.example.com/HASH যেখানে HASH হ'ল URL এর কিছু হ্যাশের এনকোডিং ¹

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

আপনি যদি সত্যিকারের ডাটাবেসের সাথে যেতে চান, তবে আপনার স্বচ্ছ ফাইল সিস্টেম অ্যাক্সেসের সুবিধার্থে পূর্ববর্তী হওয়ার দরকার নেই। বার্কলে ডিবি (সহ) সহ ডাটাবেসগুলিতে অ্যাক্সেসের জন্য বেশ কয়েকটি FUSE ফাইল সিস্টেম রয়েছে জেফ গারজিকের ডিবিএফএস ), ওরাকল ( ওরাকল ডিবিএফএস সহ ), মাইএসকিউএল ( মাইএসকিএলএফ সহ ) ইত্যাদি etc.

An ইউআরএল এর মতো http://unix.stackexchange.com/questions/21943/standard-key-value-datastore-for-unix, পলিপো ফাইলটির unix.stackexchange.com/M0pPbpRufiErf4DLFcWlhw==অভ্যন্তরে একটি অতিরিক্ত শিরোনাম সহ ফাইলটি ব্যবহার করে যা স্পষ্ট লেখায় প্রকৃত URL টি নির্দেশ করে; ফাইলটির নাম হ'ল ইউআরএল এর এমডি 5 হ্যাশ (বাইনারি) এর বেস 64 এনকোডিং। ডাব্লুউফল ফাইলটি ব্যবহার করে http/unix.stackexchange.com/DM0pPbpRufiErf4DLFcWlhw; ফাইলটির নাম হ'ল এমডি 5 হ্যাশের একটি বাড়ির বর্ধিত এনকোডিং এবং সহকারী ফাইলhttp/unix.stackexchange.com/UM0pPbpRufiErf4DLFcWlhw URL থাকে contains


7

dbmutilআপনি যা চান তা পেতে পারে প্রশ্নটিতে আপনি যে ক্রিয়াকলাপ বর্ণনা করছেন তাতে এতে শেল ইউটিলিটি রয়েছে। আমি এটি ঠিক স্ট্যান্ডার্ড বলতে চাই না, তবে এতে আপনার পছন্দসই সুবিধা রয়েছে।


5

যেহেতু আপনি এটির নাম দিয়েছেন, আদর্শ রেডিস ক্লায়েন্টের একটি কমান্ড লাইন ইন্টারফেস রয়েছে redis-cli। এর কয়েকটি উদাহরণ redis-cli -h:

 cat /etc/passwd | redis-cli -x set mypasswd
 redis-cli get mypasswd
 redis-cli -r 100 lpush mylist x

(এবং আপনি যদি ফাইল সিস্টেমের মাধ্যমে ডিবি অ্যাক্সেস করতে চান তবে আপনি সকেটগুলি ব্যবহার করতে পারেন -sA এমন একটি সরঞ্জাম যা প্রতিটি অনুরোধে সরাসরি ডিবি সূচকটি পড়তে পারে এটি একদম অদক্ষ be

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