এসকিউএলাইট 3 একই ডিবি থেকে একাধিক প্রক্রিয়া পড়া / লেখার মাধ্যমে নিরাপদে সমবর্তী অ্যাক্সেস পরিচালনা করে? এতে কি কোনও প্ল্যাটফর্ম ব্যতিক্রম আছে?
এসকিউএলাইট 3 একই ডিবি থেকে একাধিক প্রক্রিয়া পড়া / লেখার মাধ্যমে নিরাপদে সমবর্তী অ্যাক্সেস পরিচালনা করে? এতে কি কোনও প্ল্যাটফর্ম ব্যতিক্রম আছে?
উত্তর:
যদি সেই সকল একযোগে অ্যাক্সেসগুলি বেশিরভাগই পঠিত হয় (যেমন নির্বাচন), এসকিউএলাইট এগুলি খুব ভালভাবে পরিচালনা করতে পারে। তবে আপনি যদি একই সাথে লিখতে শুরু করেন তবে লক বিবাদ একটি সমস্যা হয়ে উঠতে পারে। এসকিউএলাইট ইঞ্জিন নিজেই অত্যন্ত দ্রুত এবং তাত্পর্য হ্রাস করার জন্য অনেক চতুর অপ্টিমাইজেশন রয়েছে বলে আপনার ফাইল সিস্টেমটি কতটা দ্রুত তার উপর নির্ভর করবে depend বিশেষত এসকিউএলাইট 3।
বেশিরভাগ ডেস্কটপ / ল্যাপটপ / ট্যাবলেট / ফোন অ্যাপ্লিকেশনগুলির জন্য, এসকিউএলাইট যথেষ্ট দ্রুত সম্মতিযুক্ত না হওয়ায় দ্রুত। (ফায়ারফক্স বুকমার্ক, ইতিহাস ইত্যাদির জন্য এসকিউএলাইট ব্যাপকভাবে ব্যবহার করে)
সার্ভার অ্যাপ্লিকেশনগুলির জন্য, কেউ কেউ কিছু সময় আগে বলেছিলেন যে প্রতিদিনের 100K পৃষ্ঠাগুলির চেয়ে কম যে কোনও বিষয় সাধারণ পরিস্থিতিতে (যেমন ব্লগ, ফোরাম) এসকিউএলাইট ডাটাবেসের মাধ্যমে নিখুঁতভাবে পরিচালনা করা যেতে পারে এবং এর বিপরীতে আমার এখনও কোনও প্রমাণ দেখতে পাইনি। আসলে, আধুনিক ডিস্ক এবং প্রসেসরের সাহায্যে, 95% ওয়েব সাইট এবং ওয়েব পরিষেবাদি এসকিউএলাইটের সাথে ঠিক কাজ করবে would
আপনি যদি সত্যিই দ্রুত পঠন / লেখার অ্যাক্সেস চান তবে একটি মেমরির এসকিউএলাইট ডাটাবেস ব্যবহার করুন । র্যাম হ'ল ডিস্কের চেয়ে দ্রুততার একাধিক আদেশ।
হ্যাঁ, এসকিউএলাইট সামঞ্জস্যকে ভালভাবে পরিচালনা করে তবে কোনও পারফরম্যান্স কোণ থেকে এটি সেরা নয়। আমি যা বলতে পারি তা থেকে তার কোনও ব্যতিক্রম নেই। বিশদগুলি এসকিউএলাইটের সাইটে রয়েছে: https://www.sqlite.org/lockingv3.html
এই বিবৃতিটি আগ্রহের বিষয়: "পেজার মডিউলটি নিশ্চিত করে তোলে যে পরিবর্তনগুলি একবারে ঘটেছিল, যা হয় সমস্ত পরিবর্তন ঘটে বা তাদের কোনওটিই ঘটে না, যে দুটি বা ততোধিক প্রক্রিয়া একই সাথে বেমানান উপায়ে ডাটাবেস অ্যাক্সেস করার চেষ্টা করে না"
হ্যাঁ এটা করে. আসুন কেন তা বুঝতে দিন
এসকিউএলাইটে একক লেনদেনের মধ্যে সমস্ত পরিবর্তন হয় সম্পূর্ণরূপে হয় বা হয় না
তথাকথিত জার্নালিং ব্যবহার করে (এটিকে " পুরানো উপায় " বলতে দিন) বা লেখার আগে লগিং ব্যবহার করে (এটিকে " নতুন উপায়ে " বলুন) - এই জাতীয় এসিডি সমর্থন পাশাপাশি একই সাথে সমবর্তী পাঠ / লেখাগুলি সরবরাহ করা হয় ways
এই মোডে এসকিউএলাইট DATABASE-LEVEL লকিং ব্যবহার করে । এটি বোঝার জন্য গুরুত্বপূর্ণ বিষয়।
এর অর্থ যখনই যখন কিছু পড়তে / লেখার প্রয়োজন হয় তখন এটি প্রথমে এনটিআরআই ডাটাবেস ফাইলটিতে একটি লক অর্জন করে । একাধিক পাঠক সমান্তরালে কিছু সহ-উপস্থিত থাকতে পারেন এবং পড়তে পারেন
লেখার সময় এটি নিশ্চিত করে যে একটি একচেটিয়া লক অর্জিত হয়েছে এবং অন্য কোনও প্রক্রিয়া একই সাথে পড়ছে / লিখছে না এবং তাই লেখাগুলি নিরাপদ।
এ কারণেই তারা এখানে বলছেন যে এসকিউলেট সিরিয়ালাইজযোগ্য লেনদেন প্রয়োগ করে
যেহেতু এটির জন্য প্রতিবার একটি সম্পূর্ণ ডাটাবেস লক করা দরকার এবং প্রত্যেকে লেখার সমঝোতা সহ্য করার প্রক্রিয়াটির জন্য অপেক্ষা করে এবং এই জাতীয় যুগপত লেখাগুলি / পড়া মোটামুটি কম পারফরম্যান্সের হয়
ডাটাবেস ফাইলটিতে কিছু লেখার আগে এসকিউএলাইট প্রথমে অস্থায়ী ফাইলে পরিবর্তিত হওয়া অংশটি সংরক্ষণ করবে। ডাটাবেস ফাইলে লেখার মাঝামাঝি কিছু ক্র্যাশ হয়ে গেলে এটি এই অস্থায়ী ফাইলটি বেছে নেবে এবং এ থেকে পরিবর্তনগুলি ফিরিয়ে আনবে
এক্ষেত্রে সমস্ত লেখাগুলি একটি অস্থায়ী ফাইলে সংযুক্ত করা হয় ( লেখার জন্য এগিয়ে লগ ) এবং এই ফাইলটি পর্যায়ক্রমে মূল ডাটাবেসের সাথে মিশে যায়। এসকিউএলাইট যখন কোনও কিছুর সন্ধান করছে তখন এটি প্রথমে এই অস্থায়ী ফাইলটি পরীক্ষা করে এবং যদি কিছু না পাওয়া যায় তবে মূল ডাটাবেস ফাইলটি নিয়ে এগিয়ে যান।
ফলস্বরূপ, পাঠকরা লেখকদের সাথে প্রতিযোগিতা করেন না এবং ওল্ড ওয়েয়ের তুলনায় পারফরম্যান্স অনেক ভাল।
এসকিউলাইট মূলত অন্তর্নিহিত ফাইল সিস্টেম লকিং কার্যকারিতার উপর নির্ভর করে তাই এটি সতর্কতার সাথে ব্যবহার করা উচিত, আরও বিশদ এখানে
আপনি সম্ভবত ডাটাবেসটিতে চালিত হওয়ার সম্ভাবনা লক হওয়া ত্রুটিযুক্ত রয়েছেন , বিশেষত ভ্রমণ মোডে তাই আপনার অ্যাপ্লিকেশনটিকে এই ত্রুটিটি মাথায় রেখে ডিজাইন করা দরকার
কেউ মনে করেনি যে ওয়াল (লিখিত সামনের লগ) মোড উল্লেখ করেছেন। নিশ্চিত করুন যে লেনদেনগুলি সঠিকভাবে সংগঠিত হয়েছে এবং ওয়াল মোড চালু রয়েছে, কোনও আপডেট চলছে যখন লোকেরা জিনিসগুলি পড়ছে তখন ডেটাবেস লক করে রাখার দরকার নেই।
একমাত্র সমস্যা হ'ল এক পর্যায়ে ওয়ালকে মূল ডাটাবেসে পুনরায় অন্তর্ভুক্ত করা দরকার এবং ডাটাবেসের সাথে শেষ সংযোগ বন্ধ হয়ে গেলে এটি এটি করে। খুব ব্যস্ত সাইটের সাথে আপনাকে দেখতে পাবে যে সমস্ত সংযোগ খুব কাছাকাছি হতে কয়েক সেকেন্ড সময় নেয়, তবে প্রতিদিন 100 কে হিট সমস্যা হওয়া উচিত নয়।
database is locked
ত্রুটি লেখক উত্থাপন করবেন
2019 সালে, দুটি নতুন সমবর্তী লেখার বিকল্পগুলি এখনও প্রকাশিত হয়নি তবে পৃথক শাখায় উপলভ্য।
"PRAGMA জার্নাল_মোড = ওয়াল 2"
নিয়মিত "ওয়াল" মোডের ওপরে এই জার্নাল মোডের সুবিধা হ'ল লেখকরা অন্য ওয়াল ফাইলে লেখার জন্য চালিয়ে যেতে পারেন এবং অন্যটি পরীক্ষা করা হয়।
আরম্ভ করুন - বিস্তারিত ডকের লিঙ্ক
"ডিজিটাল ডাটাবেস" ওয়াল "বা" ওয়াল 2 "মোডে থাকলেও সিস্টেমটি এখনও কমিট কমান্ডকে সিরিয়াল করে দিলে বিগইন কনকরুরেন্ট বর্ধিতকরণ একাধিক লেখককে একযোগে লেখার লেনদেনের প্রক্রিয়া করতে দেয় although
যখন "বিগইন কনকরার্ন্ট" দিয়ে একটি লিখন-লেনদেন খোলা হয়, আসলে কোনও কমিট কার্যকর না হওয়া পর্যন্ত ডাটাবেস লক করা পিছিয়ে যায়। এর অর্থ হ'ল বিগইন কনকরুর্ট দিয়ে শুরু হওয়া যে কোনও সংখ্যক লেনদেন একই সাথে এগিয়ে যেতে পারে। বিরোধী সমবর্তী লেনদেনকে প্রতিশ্রুতিবদ্ধ হতে আটকাতে সিস্টেমটি আশাবাদী পৃষ্ঠা-স্তর-লকিং ব্যবহার করে।
তারা একসাথে সূচনা-সমবর্তী-ওয়াল 2 বা প্রতিটি পৃথক নিজস্ব শাখায় উপস্থিত রয়েছে ।
begin concurrent
।
এসকিউএলাইটের একটি পাঠক-লেখক ডাটাবেস স্তরে লক আছে । একাধিক সংযোগ (সম্ভবত বিভিন্ন প্রক্রিয়া দ্বারা মালিকানাধীন) একই সময়ে একই ডাটাবেস থেকে ডেটা পড়তে পারে, তবে কেবলমাত্র একজনই ডাটাবেসে লিখতে পারে।
এসকিউএলাইট সীমাহীন সংখ্যক একযোগে পাঠকদের সমর্থন করে তবে এটি কেবল সময়ে কোনও তাত্ক্ষণিকভাবে একজন লেখককে অনুমতি দেবে। অনেক পরিস্থিতিতে, এটি কোনও সমস্যা নয়। লেখকের সারি। প্রতিটি অ্যাপ্লিকেশন এর ডাটাবেস দ্রুত কাজ করে এবং এগিয়ে চলে এবং কোনও লক কয়েক ডজন মিলিসেকেন্ডের বেশি স্থায়ী হয় না। তবে কিছু অ্যাপ্লিকেশন রয়েছে যার জন্য আরও সম্মতি প্রয়োজন এবং সেই অ্যাপ্লিকেশনগুলির জন্য আলাদা সমাধান খুঁজতে হতে পারে। - এসকিউলাইট @ এসকিউলাইট.আর.গোর জন্য উপযুক্ত ব্যবহার
পাঠক-লেখক লক স্বাধীন লেনদেন প্রক্রিয়াজাতকরণ সক্ষম করে এবং এটি ডাটাবেস স্তরে একচেটিয়া এবং ভাগ করা লকগুলি ব্যবহার করে প্রয়োগ করা হয়।
কোনও সংযোগ কোনও ডাটাবেসে একটি লিখন অপারেশন সম্পাদন করার আগে একটি অনন্য লক অবশ্যই পাওয়া উচিত। এক্সক্লুসিভ লকটি প্রাপ্ত হওয়ার পরে, অন্য সংযোগগুলি থেকে পড়া এবং লেখার ক্রিয়াকলাপ লকটি আবার প্রকাশ না হওয়া পর্যন্ত অবরুদ্ধ করা হয়।
এসকিউএলাইটের একটি লক টেবিল রয়েছে যা সর্বাধিক সম্মতি নিশ্চিত করার জন্য একটি লিখন অপারেশন চলাকালীন যতদূর সম্ভব ডেটাবেস লক করতে সহায়তা করে।
প্রাথমিক অবস্থাটি আনলকড এবং এই অবস্থায় সংযোগটি এখনও ডেটাবেস অ্যাক্সেস করতে পারেনি। যখন কোনও প্রক্রিয়া একটি ডাটাবেসের সাথে সংযুক্ত থাকে এবং এমনকি বিজিইএন দিয়ে একটি লেনদেন শুরু হয়ে যায়, তখনও সংযোগটি আনলকড অবস্থায় থাকে।
আনলকড রাষ্ট্রের পরে, পরবর্তী রাষ্ট্রটি ভাগ করা রাষ্ট্র। ডাটাবেস থেকে ডেটা পড়তে (লিখতে না) সক্ষম হওয়ার জন্য, সংযোগটি প্রথমে একটি SHARED লক পেয়ে প্রথমে SHARED অবস্থায় প্রবেশ করতে হবে। একাধিক সংযোগ একই সময়ে SHARED লকগুলি অর্জন এবং রক্ষণাবেক্ষণ করতে পারে, তাই একাধিক সংযোগ একই সময়ে একই ডাটাবেস থেকে ডেটা পড়তে পারে। তবে যতক্ষণ না শুধুমাত্র একটি ভাগ করা লক অপ্রকাশিত থাকে, কোনও সংযোগ সফলভাবে ডাটাবেসে কোনও লেখা সম্পূর্ণ করতে পারে না।
যদি কোনও সংযোগ ডাটাবেজে লিখতে চায় তবে প্রথমে এটি অবশ্যই একটি সরবরাহিত লক পাওয়া উচিত।
একাধিক SHARED টি লক একক RESERVED লক সহ সহাবস্থান করতে পারে তবে একক সময়ে কেবলমাত্র একটি রিসার্ভেড লক সক্রিয় থাকতে পারে। রিসার্ভেড লক থাকা অবস্থায় নতুন ভাগ করা লকগুলি পেন্ডিংয়ের থেকে আলাদা করা হয় ES - এসকিউএল সংস্করণ 3 @ এসকিউএলটি.আরজে ফাইল লকিং এবং কনকুরেন্সি
কোনও সংযোগ একবার সরবরাহিত লক প্রাপ্ত হওয়ার পরে এটি ডাটাবেস পরিবর্তনের ক্রিয়াকলাপ শুরু করতে পারে, যদিও এই পরিবর্তনগুলি কেবলমাত্র ডিস্কে লিখিত না হয়ে কেবল বাফারে করা যেতে পারে। রিডআউট সামগ্রীতে সম্পাদিত পরিবর্তনগুলি মেমরি বাফারে সংরক্ষণ করা হয়। যখন কোনও সংযোগ কোনও পরিবর্তন (বা লেনদেন) জমা দিতে চায়, তখন এক্সক্লুসিভ লকটিতে রিসার্ভেড লকটি আপগ্রেড করা প্রয়োজন। লকটি পেতে, আপনাকে অবশ্যই প্রথমে লন্ডটিকে একটি পেন্ডিং লকটিতে তুলতে হবে।
একটি পেন্ডিং লক মানে হ'ল লকটি ধারণ করা প্রক্রিয়াটি যত তাড়াতাড়ি সম্ভব ডাটাবেসে লিখতে চায় এবং কেবলমাত্র বর্তমানের সমস্ত ভাগ করা লকটি সাফ করার জন্য অপেক্ষা করে যাতে এটি একটি এক্সক্লুসিভ লক পেতে পারে। পেন্ডিং লকটি সক্রিয় থাকলে ডাটাবেসটির বিরুদ্ধে কোনও নতুন ভাগ করা লক অনুমোদিত নয় যদিও বিদ্যমান শেয়ারড লকগুলি চালিয়ে যাওয়ার অনুমতি দেওয়া হয়েছে।
ডাটাবেস ফাইলে লেখার জন্য একটি এক্সক্লুসিভ লক প্রয়োজন। ফাইলটিতে কেবল একটি এক্সক্লুসিভ লক অনুমোদিত এবং কোনও প্রকারের অন্য কোনও লককে একটি এক্সক্লুসিভ লক সহ সহাবস্থান করার অনুমতি নেই। একযোগে সর্বাধিক করতে, এসকিউএলাইট বহিরাগত লকগুলি যে পরিমাণ সময় ধারণ করে তা হ্রাস করতে কাজ করে। - এসকিউএল সংস্করণ 3 @ এসকিউএলটি.আরজে ফাইল লকিং এবং কনকুরেন্সি
সুতরাং আপনি বলতে পারেন যে এসকিউএলাইট নিরাপদে একই ডিবিতে একাধিক প্রক্রিয়া লিখে সমবর্তী অ্যাক্সেস পরিচালনা করে কারণ এটি সমর্থন করে না! আপনি পাবেন SQLITE_BUSY
বা SQLITE_LOCKED
দ্বিতীয় লেখক যখন এটি পুনরায় চেষ্টা সীমাবদ্ধতা হিট।
এই থ্রেডটি পুরাতন তবে আমি মনে করি স্ক্লাইটে আমার পরীক্ষাগুলির ফলাফল ভাগ করে নেওয়া ভাল হবে: আমি পাইথন প্রোগ্রামের 2 টি দৃষ্টান্ত দৌড়েছি (বিভিন্ন প্রক্রিয়া একই প্রোগ্রাম) বিবৃতিগুলি সম্পাদন করে এক্সক্লুসিভ লক এবং সময়সীমা নির্ধারণের সাথে লেনদেনের মধ্যে এসকিএল কমান্ডগুলি নির্বাচন করুন একটি লক পেতে 10 সেকেন্ড, এবং ফলাফল হতাশ ছিল। প্রতিটি উদাহরণ 10000 পদক্ষেপ লুপে করেছে:
এমনকি স্ক্লাইট যদি লেনদেনের জন্য একচেটিয়া লক মঞ্জুর করে, তবে সত্যিকার অর্থে মৃত্যুদন্ড কার্যকর হওয়া চক্রের মোট সংখ্যা 20 000 এর সমান নয় তবে কম (উভয় প্রক্রিয়ার জন্য গণনা করা একক কাউন্টারে মোট পুনরাবৃত্তির সংখ্যা)। পাইথন প্রোগ্রাম প্রায় কোনও একক ব্যতিক্রম ছুঁড়ে ফেলেনি (কেবল একবার 20 মৃত্যুদণ্ড কার্যকর করার জন্য নির্বাচন করার সময়)। পরীক্ষার মুহুর্তে স্ক্লাইট সংস্করণটি ছিল 3.6.20 এবং পাইথন ভি 3.3 সেন্টোস 6.5। আমার মতে এই ধরণের কাজের জন্য আরও নির্ভরযোগ্য পণ্য সন্ধান করা বা একক অনন্য প্রক্রিয়া / থ্রেডে স্ক্লাইটে লেখার সীমাবদ্ধ রাখাই ভাল।
with con
যথেষ্ট।